1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.2 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Test based on pr5626 to load/store 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker%i32vec3 = type <3 x i32> 8*9880d681SAndroid Build Coastguard Workerdefine void @add3i32(%i32vec3* sret %ret, %i32vec3* %ap, %i32vec3* %bp) { 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add3i32: 10*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd (%rdx), %xmm0 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrd $2, %xmm0, 8(%rdi) 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm0, (%rdi) 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker %a = load %i32vec3, %i32vec3* %ap, align 16 18*9880d681SAndroid Build Coastguard Worker %b = load %i32vec3, %i32vec3* %bp, align 16 19*9880d681SAndroid Build Coastguard Worker %x = add %i32vec3 %a, %b 20*9880d681SAndroid Build Coastguard Worker store %i32vec3 %x, %i32vec3* %ret, align 16 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine void @add3i32_2(%i32vec3* sret %ret, %i32vec3* %ap, %i32vec3* %bp) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add3i32_2: 26*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pinsrd $2, 8(%rsi), %xmm0 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pinsrd $2, 8(%rdx), %xmm1 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd %xmm0, %xmm1 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrd $2, %xmm1, 8(%rdi) 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm1, (%rdi) 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 36*9880d681SAndroid Build Coastguard Worker %a = load %i32vec3, %i32vec3* %ap, align 8 37*9880d681SAndroid Build Coastguard Worker %b = load %i32vec3, %i32vec3* %bp, align 8 38*9880d681SAndroid Build Coastguard Worker %x = add %i32vec3 %a, %b 39*9880d681SAndroid Build Coastguard Worker store %i32vec3 %x, %i32vec3* %ret, align 8 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker%i32vec7 = type <7 x i32> 44*9880d681SAndroid Build Coastguard Workerdefine void @add7i32(%i32vec7* sret %ret, %i32vec7* %ap, %i32vec7* %bp) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add7i32: 46*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 16(%rsi), %xmm1 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd (%rdx), %xmm0 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd 16(%rdx), %xmm1 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrd $2, %xmm1, 24(%rdi) 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm1, 16(%rdi) 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, (%rdi) 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 56*9880d681SAndroid Build Coastguard Worker %a = load %i32vec7, %i32vec7* %ap, align 16 57*9880d681SAndroid Build Coastguard Worker %b = load %i32vec7, %i32vec7* %bp, align 16 58*9880d681SAndroid Build Coastguard Worker %x = add %i32vec7 %a, %b 59*9880d681SAndroid Build Coastguard Worker store %i32vec7 %x, %i32vec7* %ret, align 16 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker%i32vec12 = type <12 x i32> 64*9880d681SAndroid Build Coastguard Workerdefine void @add12i32(%i32vec12* sret %ret, %i32vec12* %ap, %i32vec12* %bp) { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add12i32: 66*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 16(%rsi), %xmm1 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 32(%rsi), %xmm2 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd (%rdx), %xmm0 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd 16(%rdx), %xmm1 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd 32(%rdx), %xmm2 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm2, 32(%rdi) 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm1, 16(%rdi) 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, (%rdi) 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 78*9880d681SAndroid Build Coastguard Worker %a = load %i32vec12, %i32vec12* %ap, align 16 79*9880d681SAndroid Build Coastguard Worker %b = load %i32vec12, %i32vec12* %bp, align 16 80*9880d681SAndroid Build Coastguard Worker %x = add %i32vec12 %a, %b 81*9880d681SAndroid Build Coastguard Worker store %i32vec12 %x, %i32vec12* %ret, align 16 82*9880d681SAndroid Build Coastguard Worker ret void 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker%i16vec3 = type <3 x i16> 87*9880d681SAndroid Build Coastguard Workerdefine void @add3i16(%i16vec3* nocapture sret %ret, %i16vec3* %ap, %i16vec3* %bp) nounwind { 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add3i16: 89*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd %xmm0, %xmm1 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrw $4, %xmm1, 4(%rdi) 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, (%rdi) 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 99*9880d681SAndroid Build Coastguard Worker %a = load %i16vec3, %i16vec3* %ap, align 16 100*9880d681SAndroid Build Coastguard Worker %b = load %i16vec3, %i16vec3* %bp, align 16 101*9880d681SAndroid Build Coastguard Worker %x = add %i16vec3 %a, %b 102*9880d681SAndroid Build Coastguard Worker store %i16vec3 %x, %i16vec3* %ret, align 16 103*9880d681SAndroid Build Coastguard Worker ret void 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker%i16vec4 = type <4 x i16> 107*9880d681SAndroid Build Coastguard Workerdefine void @add4i16(%i16vec4* nocapture sret %ret, %i16vec4* %ap, %i16vec4* %bp) nounwind { 108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add4i16: 109*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw %xmm0, %xmm1 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm1, (%rdi) 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 116*9880d681SAndroid Build Coastguard Worker %a = load %i16vec4, %i16vec4* %ap, align 16 117*9880d681SAndroid Build Coastguard Worker %b = load %i16vec4, %i16vec4* %bp, align 16 118*9880d681SAndroid Build Coastguard Worker %x = add %i16vec4 %a, %b 119*9880d681SAndroid Build Coastguard Worker store %i16vec4 %x, %i16vec4* %ret, align 16 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker%i16vec12 = type <12 x i16> 124*9880d681SAndroid Build Coastguard Workerdefine void @add12i16(%i16vec12* nocapture sret %ret, %i16vec12* %ap, %i16vec12* %bp) nounwind { 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add12i16: 126*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 16(%rsi), %xmm1 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw (%rdx), %xmm0 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw 16(%rdx), %xmm1 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm1, 16(%rdi) 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, (%rdi) 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker %a = load %i16vec12, %i16vec12* %ap, align 16 136*9880d681SAndroid Build Coastguard Worker %b = load %i16vec12, %i16vec12* %bp, align 16 137*9880d681SAndroid Build Coastguard Worker %x = add %i16vec12 %a, %b 138*9880d681SAndroid Build Coastguard Worker store %i16vec12 %x, %i16vec12* %ret, align 16 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker%i16vec18 = type <18 x i16> 143*9880d681SAndroid Build Coastguard Workerdefine void @add18i16(%i16vec18* nocapture sret %ret, %i16vec18* %ap, %i16vec18* %bp) nounwind { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add18i16: 145*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 16(%rsi), %xmm1 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 32(%rsi), %xmm2 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw (%rdx), %xmm0 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw 16(%rdx), %xmm1 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddw 32(%rdx), %xmm2 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm2, 32(%rdi) 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm1, 16(%rdi) 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, (%rdi) 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker %a = load %i16vec18, %i16vec18* %ap, align 16 158*9880d681SAndroid Build Coastguard Worker %b = load %i16vec18, %i16vec18* %bp, align 16 159*9880d681SAndroid Build Coastguard Worker %x = add %i16vec18 %a, %b 160*9880d681SAndroid Build Coastguard Worker store %i16vec18 %x, %i16vec18* %ret, align 16 161*9880d681SAndroid Build Coastguard Worker ret void 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker%i8vec3 = type <3 x i8> 166*9880d681SAndroid Build Coastguard Workerdefine void @add3i8(%i8vec3* nocapture sret %ret, %i8vec3* %ap, %i8vec3* %bp) nounwind { 167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add3i8: 168*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddd %xmm0, %xmm1 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrb $8, %xmm1, 2(%rdi) 173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufb {{.*#+}} xmm1 = xmm1[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u] 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movw %ax, (%rdi) 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 179*9880d681SAndroid Build Coastguard Worker %a = load %i8vec3, %i8vec3* %ap, align 16 180*9880d681SAndroid Build Coastguard Worker %b = load %i8vec3, %i8vec3* %bp, align 16 181*9880d681SAndroid Build Coastguard Worker %x = add %i8vec3 %a, %b 182*9880d681SAndroid Build Coastguard Worker store %i8vec3 %x, %i8vec3* %ret, align 16 183*9880d681SAndroid Build Coastguard Worker ret void 184*9880d681SAndroid Build Coastguard Worker} 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker%i8vec31 = type <31 x i8> 187*9880d681SAndroid Build Coastguard Workerdefine void @add31i8(%i8vec31* nocapture sret %ret, %i8vec31* %ap, %i8vec31* %bp) nounwind { 188*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add31i8: 189*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa (%rsi), %xmm0 191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa 16(%rsi), %xmm1 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddb (%rdx), %xmm0 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddb 16(%rdx), %xmm1 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrb $14, %xmm1, 30(%rdi) 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrw $6, %xmm1, 28(%rdi) 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrd $2, %xmm1, 24(%rdi) 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %xmm1, 16(%rdi) 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, (%rdi) 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 201*9880d681SAndroid Build Coastguard Worker %a = load %i8vec31, %i8vec31* %ap, align 16 202*9880d681SAndroid Build Coastguard Worker %b = load %i8vec31, %i8vec31* %bp, align 16 203*9880d681SAndroid Build Coastguard Worker %x = add %i8vec31 %a, %b 204*9880d681SAndroid Build Coastguard Worker store %i8vec31 %x, %i8vec31* %ret, align 16 205*9880d681SAndroid Build Coastguard Worker ret void 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker%i8vec3pack = type { <3 x i8>, i8 } 210*9880d681SAndroid Build Coastguard Workerdefine void @rot(%i8vec3pack* nocapture sret %result, %i8vec3pack* %X, %i8vec3pack* %rot) nounwind { 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: rot: 212*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa {{.*#+}} xmm0 = <0,4,8,128,u,u,u,u,u,u,u,u,u,u,u,u> 214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa {{.*#+}} xmm1 = <158,158,158,u> 215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufb %xmm0, %xmm1 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero 217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm1, %eax 218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movw %ax, (%rsi) 219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movb $-98, 2(%rsi) 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa {{.*#+}} xmm1 = <1,1,1,u> 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufb %xmm0, %xmm1 222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero 223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movw %ax, (%rdx) 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movb $1, 2(%rdx) 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero 227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm0, %xmm1 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $1, %xmm1 229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5],xmm0[6,7] 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pextrb $8, %xmm1, 2(%rdi) 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufb {{.*#+}} xmm1 = xmm1[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u] 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pmovzxwq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero 233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movw %ax, (%rdi) 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rdi, %rax 236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 237*9880d681SAndroid Build Coastguard Workerentry: 238*9880d681SAndroid Build Coastguard Worker %storetmp = bitcast %i8vec3pack* %X to <3 x i8>* 239*9880d681SAndroid Build Coastguard Worker store <3 x i8> <i8 -98, i8 -98, i8 -98>, <3 x i8>* %storetmp 240*9880d681SAndroid Build Coastguard Worker %storetmp1 = bitcast %i8vec3pack* %rot to <3 x i8>* 241*9880d681SAndroid Build Coastguard Worker store <3 x i8> <i8 1, i8 1, i8 1>, <3 x i8>* %storetmp1 242*9880d681SAndroid Build Coastguard Worker %tmp = load %i8vec3pack, %i8vec3pack* %X 243*9880d681SAndroid Build Coastguard Worker %extractVec = extractvalue %i8vec3pack %tmp, 0 244*9880d681SAndroid Build Coastguard Worker %tmp2 = load %i8vec3pack, %i8vec3pack* %rot 245*9880d681SAndroid Build Coastguard Worker %extractVec3 = extractvalue %i8vec3pack %tmp2, 0 246*9880d681SAndroid Build Coastguard Worker %shr = lshr <3 x i8> %extractVec, %extractVec3 247*9880d681SAndroid Build Coastguard Worker %storetmp4 = bitcast %i8vec3pack* %result to <3 x i8>* 248*9880d681SAndroid Build Coastguard Worker store <3 x i8> %shr, <3 x i8>* %storetmp4 249*9880d681SAndroid Build Coastguard Worker ret void 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252