xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-variable-128.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker; Unary shuffle indices from registers
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @var_shuffle_v2f64_v2f64_xx_i64(<2 x double> %x, i64 %i0, i64 %i1) nounwind {
13*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: var_shuffle_v2f64_v2f64_xx_i64:
14*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
17*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
18*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
19*9880d681SAndroid Build Coastguard Worker;
20*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v2f64_v2f64_xx_i64:
21*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
22*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
23*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
24*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
25*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
26*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <2 x double> %x, i64 %i0
27*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <2 x double> %x, i64 %i1
28*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <2 x double> undef, double %x0, i32 0
29*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <2 x double>   %r0, double %x1, i32 1
30*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %r1
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @var_shuffle_v2i64_v2i64_xx_i64(<2 x i64> %x, i32 %i0, i32 %i1) nounwind {
34*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: var_shuffle_v2i64_v2i64_xx_i64:
35*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
36*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movslq %edi, %rax
37*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
38*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movslq %esi, %rcx
39*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
40*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
41*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
42*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
43*9880d681SAndroid Build Coastguard Worker;
44*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v2i64_v2i64_xx_i64:
45*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
46*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edi, %rax
47*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
48*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %esi, %rcx
49*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
50*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
51*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
53*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <2 x i64> %x, i32 %i0
54*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <2 x i64> %x, i32 %i1
55*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <2 x i64> undef, i64 %x0, i32 0
56*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <2 x i64>   %r0, i64 %x1, i32 1
57*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %r1
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @var_shuffle_v4f32_v4f32_xxxx_i32(<4 x float> %x, i32 %i0, i32 %i1, i32 %i2, i32 %i3) nounwind {
61*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shuffle_v4f32_v4f32_xxxx_i32:
62*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
63*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %edi, %rax
64*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %esi, %rsi
65*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %edx, %rdx
66*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
67*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %ecx, %rcx
68*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
69*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
70*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
71*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
72*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
73*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
74*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
75*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
76*9880d681SAndroid Build Coastguard Worker;
77*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: var_shuffle_v4f32_v4f32_xxxx_i32:
78*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
79*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %edi, %rax
80*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %esi, %rsi
81*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %edx, %rdx
82*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
83*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %ecx, %rcx
84*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
85*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
86*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
87*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
88*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
89*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
90*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
91*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
92*9880d681SAndroid Build Coastguard Worker;
93*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shuffle_v4f32_v4f32_xxxx_i32:
94*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
95*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %edi, %rax
96*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %esi, %rsi
97*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %edx, %rdx
98*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
99*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %ecx, %rcx
100*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
101*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
102*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
103*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
104*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
105*9880d681SAndroid Build Coastguard Worker;
106*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v4f32_v4f32_xxxx_i32:
107*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
108*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edi, %rax
109*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %esi, %rsi
110*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edx, %rdx
111*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
112*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %ecx, %rcx
113*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
114*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
115*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
116*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
117*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
118*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <4 x float> %x, i32 %i0
119*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <4 x float> %x, i32 %i1
120*9880d681SAndroid Build Coastguard Worker  %x2 = extractelement <4 x float> %x, i32 %i2
121*9880d681SAndroid Build Coastguard Worker  %x3 = extractelement <4 x float> %x, i32 %i3
122*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <4 x float> undef, float %x0, i32 0
123*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x float>   %r0, float %x1, i32 1
124*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x float>   %r1, float %x2, i32 2
125*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <4 x float>   %r2, float %x3, i32 3
126*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r3
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @var_shuffle_v4i32_v4i32_xxxx_i32(<4 x i32> %x, i32 %i0, i32 %i1, i32 %i2, i32 %i3) nounwind {
130*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shuffle_v4i32_v4i32_xxxx_i32:
131*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
132*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %edi, %rax
133*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %esi, %rsi
134*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %edx, %rdx
135*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
136*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq %ecx, %rcx
137*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
138*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
139*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
140*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
141*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
142*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
143*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
144*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
145*9880d681SAndroid Build Coastguard Worker;
146*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: var_shuffle_v4i32_v4i32_xxxx_i32:
147*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
148*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %edi, %rax
149*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %esi, %rsi
150*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %edx, %rdx
151*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
152*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq %ecx, %rcx
153*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
154*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
155*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
156*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
157*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
158*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
159*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
160*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
161*9880d681SAndroid Build Coastguard Worker;
162*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shuffle_v4i32_v4i32_xxxx_i32:
163*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
164*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %edi, %rax
165*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %esi, %rsi
166*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %edx, %rdx
167*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
168*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq %ecx, %rcx
169*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
170*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $1, -24(%rsp,%rsi,4), %xmm0
171*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $2, -24(%rsp,%rdx,4), %xmm0
172*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $3, -24(%rsp,%rcx,4), %xmm0
173*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
174*9880d681SAndroid Build Coastguard Worker;
175*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v4i32_v4i32_xxxx_i32:
176*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
177*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edi, %rax
178*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %esi, %rsi
179*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edx, %rdx
180*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
181*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %ecx, %rcx
182*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
183*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $1, -24(%rsp,%rsi,4), %xmm0, %xmm0
184*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $2, -24(%rsp,%rdx,4), %xmm0, %xmm0
185*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $3, -24(%rsp,%rcx,4), %xmm0, %xmm0
186*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
187*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <4 x i32> %x, i32 %i0
188*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <4 x i32> %x, i32 %i1
189*9880d681SAndroid Build Coastguard Worker  %x2 = extractelement <4 x i32> %x, i32 %i2
190*9880d681SAndroid Build Coastguard Worker  %x3 = extractelement <4 x i32> %x, i32 %i3
191*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <4 x i32> undef, i32 %x0, i32 0
192*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x i32>   %r0, i32 %x1, i32 1
193*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x i32>   %r1, i32 %x2, i32 2
194*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <4 x i32>   %r2, i32 %x3, i32 3
195*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r3
196*9880d681SAndroid Build Coastguard Worker}
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @var_shuffle_v8i16_v8i16_xxxxxxxx_i16(<8 x i16> %x, i16 %i0, i16 %i1, i16 %i2, i16 %i3, i16 %i4, i16 %i5, i16 %i6, i16 %i7) nounwind {
199*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shuffle_v8i16_v8i16_xxxxxxxx_i16:
200*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
201*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
202*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
203*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
204*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
205*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
206*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
207*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %di, %rax
208*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %si, %rsi
209*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %dx, %rdx
210*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %cx, %r10
211*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %r8w, %r11
212*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
213*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %r9w, %r8
214*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq {{[0-9]+}}(%rsp), %rcx
215*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq {{[0-9]+}}(%rsp), %rdi
216*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rcx,2), %ecx
217*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rdi,2), %edi
218*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rax,2), %eax
219*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rsi,2), %esi
220*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
221*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rdx,2), %ecx
222*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%r10,2), %ecx
225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%r11,2), %eax
227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edi, %xmm1
231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %esi, %xmm1
234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%r8,2), %eax
235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
240*9880d681SAndroid Build Coastguard Worker;
241*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: var_shuffle_v8i16_v8i16_xxxxxxxx_i16:
242*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
243*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
244*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
245*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
246*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
247*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
248*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
249*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %di, %rax
250*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %si, %rsi
251*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %dx, %rdx
252*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %cx, %r10
253*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %r8w, %r11
254*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
255*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %r9w, %r8
256*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq {{[0-9]+}}(%rsp), %rcx
257*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq {{[0-9]+}}(%rsp), %rdi
258*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rcx,2), %ecx
259*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rdi,2), %edi
260*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rax,2), %eax
261*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rsi,2), %esi
262*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm0
263*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rdx,2), %ecx
264*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm1
265*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
266*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%r10,2), %ecx
267*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm0
268*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%r11,2), %eax
269*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
270*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
271*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
272*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %edi, %xmm1
273*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm2
274*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
275*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %esi, %xmm1
276*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%r8,2), %eax
277*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm3
278*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
279*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
280*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
281*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
282*9880d681SAndroid Build Coastguard Worker;
283*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shuffle_v8i16_v8i16_xxxxxxxx_i16:
284*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
285*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %rbx
286*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
287*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
288*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
289*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
290*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
291*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
292*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %di, %rax
293*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %si, %rbx
294*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %dx, %r11
295*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %cx, %r10
296*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %r8w, %rdi
297*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
298*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %r9w, %rcx
299*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq {{[0-9]+}}(%rsp), %rdx
300*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq {{[0-9]+}}(%rsp), %rsi
301*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzwl -16(%rsp,%rdx,2), %edx
302*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzwl -16(%rsp,%rsi,2), %esi
303*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzwl -16(%rsp,%rax,2), %eax
304*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %eax, %xmm0
305*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $1, -16(%rsp,%rbx,2), %xmm0
306*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $2, -16(%rsp,%r11,2), %xmm0
307*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $3, -16(%rsp,%r10,2), %xmm0
308*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $4, -16(%rsp,%rdi,2), %xmm0
309*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $5, -16(%rsp,%rcx,2), %xmm0
310*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $6, %edx, %xmm0
311*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $7, %esi, %xmm0
312*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %rbx
313*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
314*9880d681SAndroid Build Coastguard Worker;
315*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v8i16_v8i16_xxxxxxxx_i16:
316*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
317*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r14
318*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %rbx
319*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
320*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
321*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
322*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
323*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
324*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
325*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %di, %r10
326*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %si, %r11
327*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %dx, %r14
328*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %cx, %rcx
329*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %r8w, %rdi
330*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
331*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq %r9w, %rax
332*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq {{[0-9]+}}(%rsp), %rsi
333*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movswq {{[0-9]+}}(%rsp), %rdx
334*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzwl -24(%rsp,%rsi,2), %esi
335*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzwl -24(%rsp,%rdx,2), %edx
336*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzwl -24(%rsp,%r10,2), %ebx
337*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %ebx, %xmm0
338*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $1, -24(%rsp,%r11,2), %xmm0, %xmm0
339*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $2, -24(%rsp,%r14,2), %xmm0, %xmm0
340*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $3, -24(%rsp,%rcx,2), %xmm0, %xmm0
341*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $4, -24(%rsp,%rdi,2), %xmm0, %xmm0
342*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
343*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $6, %esi, %xmm0, %xmm0
344*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrw $7, %edx, %xmm0, %xmm0
345*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %rbx
346*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r14
347*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
348*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <8 x i16> %x, i16 %i0
349*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <8 x i16> %x, i16 %i1
350*9880d681SAndroid Build Coastguard Worker  %x2 = extractelement <8 x i16> %x, i16 %i2
351*9880d681SAndroid Build Coastguard Worker  %x3 = extractelement <8 x i16> %x, i16 %i3
352*9880d681SAndroid Build Coastguard Worker  %x4 = extractelement <8 x i16> %x, i16 %i4
353*9880d681SAndroid Build Coastguard Worker  %x5 = extractelement <8 x i16> %x, i16 %i5
354*9880d681SAndroid Build Coastguard Worker  %x6 = extractelement <8 x i16> %x, i16 %i6
355*9880d681SAndroid Build Coastguard Worker  %x7 = extractelement <8 x i16> %x, i16 %i7
356*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <8 x i16> undef, i16 %x0, i32 0
357*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i16>   %r0, i16 %x1, i32 1
358*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i16>   %r1, i16 %x2, i32 2
359*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <8 x i16>   %r2, i16 %x3, i32 3
360*9880d681SAndroid Build Coastguard Worker  %r4 = insertelement <8 x i16>   %r3, i16 %x4, i32 4
361*9880d681SAndroid Build Coastguard Worker  %r5 = insertelement <8 x i16>   %r4, i16 %x5, i32 5
362*9880d681SAndroid Build Coastguard Worker  %r6 = insertelement <8 x i16>   %r5, i16 %x6, i32 6
363*9880d681SAndroid Build Coastguard Worker  %r7 = insertelement <8 x i16>   %r6, i16 %x7, i32 7
364*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r7
365*9880d681SAndroid Build Coastguard Worker}
366*9880d681SAndroid Build Coastguard Worker
367*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @var_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8(<16 x i8> %x, i8 %i0, i8 %i1, i8 %i2, i8 %i3, i8 %i4, i8 %i5, i8 %i6, i8 %i7, i8 %i8, i8 %i9, i8 %i10, i8 %i11, i8 %i12, i8 %i13, i8 %i14, i8 %i15) nounwind {
368*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
369*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
370*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
371*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
372*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
373*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %r10
378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%r10,%r11), %eax
380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm15
381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm8
384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm9
387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %dl, %rax
388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm10
393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %dil, %rax
394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm11
399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %r8b, %rax
400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
401*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm7
402*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
403*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
404*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
405*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
406*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
407*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm12
408*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
409*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
410*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm13
411*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %cl, %rax
412*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
413*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm6
414*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
415*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
416*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm14
417*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %sil, %rax
418*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
419*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm5
420*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
421*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
422*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm4
423*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq %r9b, %rax
424*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rax,%r11), %eax
425*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
426*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm8[0],xmm15[1],xmm8[1],xmm15[2],xmm8[2],xmm15[3],xmm8[3],xmm15[4],xmm8[4],xmm15[5],xmm8[5],xmm15[6],xmm8[6],xmm15[7],xmm8[7]
427*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
428*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm15[0],xmm3[1],xmm15[1],xmm3[2],xmm15[2],xmm3[3],xmm15[3],xmm3[4],xmm15[4],xmm3[5],xmm15[5],xmm3[6],xmm15[6],xmm3[7],xmm15[7]
429*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1],xmm0[2],xmm10[2],xmm0[3],xmm10[3],xmm0[4],xmm10[4],xmm0[5],xmm10[5],xmm0[6],xmm10[6],xmm0[7],xmm10[7]
430*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm11[0],xmm7[1],xmm11[1],xmm7[2],xmm11[2],xmm7[3],xmm11[3],xmm7[4],xmm11[4],xmm7[5],xmm11[5],xmm7[6],xmm11[6],xmm7[7],xmm11[7]
431*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]
432*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
433*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm12[0],xmm2[1],xmm12[1],xmm2[2],xmm12[2],xmm2[3],xmm12[3],xmm2[4],xmm12[4],xmm2[5],xmm12[5],xmm2[6],xmm12[6],xmm2[7],xmm12[7]
434*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1],xmm6[2],xmm13[2],xmm6[3],xmm13[3],xmm6[4],xmm13[4],xmm6[5],xmm13[5],xmm6[6],xmm13[6],xmm6[7],xmm13[7]
435*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]
436*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm14[0],xmm5[1],xmm14[1],xmm5[2],xmm14[2],xmm5[3],xmm14[3],xmm5[4],xmm14[4],xmm5[5],xmm14[5],xmm5[6],xmm14[6],xmm5[7],xmm14[7]
437*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
438*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]
439*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1],xmm5[2],xmm6[2],xmm5[3],xmm6[3],xmm5[4],xmm6[4],xmm5[5],xmm6[5],xmm5[6],xmm6[6],xmm5[7],xmm6[7]
440*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
441*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
442*9880d681SAndroid Build Coastguard Worker;
443*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: var_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
444*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
445*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
446*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
447*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
448*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
449*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
450*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
451*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
452*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %r10
453*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    leaq -{{[0-9]+}}(%rsp), %r11
454*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%r10,%r11), %eax
455*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm15
456*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
457*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
458*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm8
459*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
460*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
461*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm9
462*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %dl, %rax
463*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
464*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm3
465*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
466*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
467*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm10
468*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %dil, %rax
469*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
470*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm0
471*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
472*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
473*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm11
474*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %r8b, %rax
475*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
476*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm7
477*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
478*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
479*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
480*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
481*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
482*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm12
483*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
484*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
485*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm13
486*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %cl, %rax
487*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
488*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm6
489*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
490*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
491*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm14
492*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %sil, %rax
493*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
494*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm5
495*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq {{[0-9]+}}(%rsp), %rax
496*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
497*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm4
498*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq %r9b, %rax
499*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rax,%r11), %eax
500*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
501*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm8[0],xmm15[1],xmm8[1],xmm15[2],xmm8[2],xmm15[3],xmm8[3],xmm15[4],xmm8[4],xmm15[5],xmm8[5],xmm15[6],xmm8[6],xmm15[7],xmm8[7]
502*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
503*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm15[0],xmm3[1],xmm15[1],xmm3[2],xmm15[2],xmm3[3],xmm15[3],xmm3[4],xmm15[4],xmm3[5],xmm15[5],xmm3[6],xmm15[6],xmm3[7],xmm15[7]
504*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1],xmm0[2],xmm10[2],xmm0[3],xmm10[3],xmm0[4],xmm10[4],xmm0[5],xmm10[5],xmm0[6],xmm10[6],xmm0[7],xmm10[7]
505*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm11[0],xmm7[1],xmm11[1],xmm7[2],xmm11[2],xmm7[3],xmm11[3],xmm7[4],xmm11[4],xmm7[5],xmm11[5],xmm7[6],xmm11[6],xmm7[7],xmm11[7]
506*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]
507*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
508*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm12[0],xmm2[1],xmm12[1],xmm2[2],xmm12[2],xmm2[3],xmm12[3],xmm2[4],xmm12[4],xmm2[5],xmm12[5],xmm2[6],xmm12[6],xmm2[7],xmm12[7]
509*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1],xmm6[2],xmm13[2],xmm6[3],xmm13[3],xmm6[4],xmm13[4],xmm6[5],xmm13[5],xmm6[6],xmm13[6],xmm6[7],xmm13[7]
510*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]
511*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm14[0],xmm5[1],xmm14[1],xmm5[2],xmm14[2],xmm5[3],xmm14[3],xmm5[4],xmm14[4],xmm5[5],xmm14[5],xmm5[6],xmm14[6],xmm5[7],xmm14[7]
512*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
513*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7]
514*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1],xmm5[2],xmm6[2],xmm5[3],xmm6[3],xmm5[4],xmm6[4],xmm5[5],xmm6[5],xmm5[6],xmm6[6],xmm5[7],xmm6[7]
515*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
516*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
517*9880d681SAndroid Build Coastguard Worker;
518*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
519*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
520*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %rbp
521*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r15
522*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r14
523*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r13
524*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r12
525*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %rbx
526*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
527*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
528*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
529*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
530*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
531*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
532*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %dil, %r15
533*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %sil, %r14
534*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %dl, %r11
535*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %cl, %r10
536*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %r8b, %r8
537*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
538*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq %r9b, %r9
539*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r12
540*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r13
541*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %rbp
542*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %rbx
543*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
544*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r15,%rax), %ecx
545*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %ecx, %xmm0
546*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r15
547*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $1, (%r14,%rax), %xmm0
548*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r14
549*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $2, (%r11,%rax), %xmm0
550*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r11
551*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $3, (%r10,%rax), %xmm0
552*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %r10
553*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $4, (%r8,%rax), %xmm0
554*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %rcx
555*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $5, (%r9,%rax), %xmm0
556*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq {{[0-9]+}}(%rsp), %rdx
557*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r12,%rax), %esi
558*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r13,%rax), %edi
559*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rbp,%rax), %ebp
560*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rbx,%rax), %ebx
561*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r15,%rax), %r8d
562*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r14,%rax), %r9d
563*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r11,%rax), %r11d
564*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r10,%rax), %r10d
565*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rcx,%rax), %ecx
566*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rdx,%rax), %eax
567*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $6, %esi, %xmm0
568*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $7, %edi, %xmm0
569*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $8, %ebp, %xmm0
570*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $9, %ebx, %xmm0
571*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $10, %r8d, %xmm0
572*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $11, %r9d, %xmm0
573*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $12, %r11d, %xmm0
574*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $13, %r10d, %xmm0
575*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $14, %ecx, %xmm0
576*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $15, %eax, %xmm0
577*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %rbx
578*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r12
579*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r13
580*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r14
581*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r15
582*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %rbp
583*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
584*9880d681SAndroid Build Coastguard Worker;
585*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
586*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
587*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %rbp
588*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r15
589*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r14
590*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r13
591*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r12
592*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %rbx
593*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
594*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
595*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
596*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
597*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
598*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
599*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %dil, %r10
600*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %sil, %r11
601*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %dl, %r14
602*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %cl, %r15
603*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %r8b, %r8
604*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
605*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq %r9b, %r9
606*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r12
607*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r13
608*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %rbp
609*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %rcx
610*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rdi
611*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r10,%rdi), %eax
612*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %eax, %xmm0
613*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r10
614*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $1, (%r11,%rdi), %xmm0, %xmm0
615*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r11
616*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $2, (%r14,%rdi), %xmm0, %xmm0
617*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r14
618*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $3, (%r15,%rdi), %xmm0, %xmm0
619*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r15
620*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $4, (%r8,%rdi), %xmm0, %xmm0
621*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %r8
622*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $5, (%r9,%rdi), %xmm0, %xmm0
623*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq {{[0-9]+}}(%rsp), %rsi
624*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r12,%rdi), %edx
625*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r13,%rdi), %ebx
626*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rbp,%rdi), %ebp
627*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rcx,%rdi), %ecx
628*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r10,%rdi), %eax
629*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r11,%rdi), %r9d
630*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r14,%rdi), %r10d
631*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r15,%rdi), %r11d
632*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r8,%rdi), %r8d
633*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rsi,%rdi), %esi
634*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $6, %edx, %xmm0, %xmm0
635*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $7, %ebx, %xmm0, %xmm0
636*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $8, %ebp, %xmm0, %xmm0
637*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $9, %ecx, %xmm0, %xmm0
638*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
639*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $11, %r9d, %xmm0, %xmm0
640*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $12, %r10d, %xmm0, %xmm0
641*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $13, %r11d, %xmm0, %xmm0
642*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $14, %r8d, %xmm0, %xmm0
643*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $15, %esi, %xmm0, %xmm0
644*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %rbx
645*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r12
646*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r13
647*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r14
648*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r15
649*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %rbp
650*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
651*9880d681SAndroid Build Coastguard Worker  %x0  = extractelement <16 x i8> %x, i8 %i0
652*9880d681SAndroid Build Coastguard Worker  %x1  = extractelement <16 x i8> %x, i8 %i1
653*9880d681SAndroid Build Coastguard Worker  %x2  = extractelement <16 x i8> %x, i8 %i2
654*9880d681SAndroid Build Coastguard Worker  %x3  = extractelement <16 x i8> %x, i8 %i3
655*9880d681SAndroid Build Coastguard Worker  %x4  = extractelement <16 x i8> %x, i8 %i4
656*9880d681SAndroid Build Coastguard Worker  %x5  = extractelement <16 x i8> %x, i8 %i5
657*9880d681SAndroid Build Coastguard Worker  %x6  = extractelement <16 x i8> %x, i8 %i6
658*9880d681SAndroid Build Coastguard Worker  %x7  = extractelement <16 x i8> %x, i8 %i7
659*9880d681SAndroid Build Coastguard Worker  %x8  = extractelement <16 x i8> %x, i8 %i8
660*9880d681SAndroid Build Coastguard Worker  %x9  = extractelement <16 x i8> %x, i8 %i9
661*9880d681SAndroid Build Coastguard Worker  %x10 = extractelement <16 x i8> %x, i8 %i10
662*9880d681SAndroid Build Coastguard Worker  %x11 = extractelement <16 x i8> %x, i8 %i11
663*9880d681SAndroid Build Coastguard Worker  %x12 = extractelement <16 x i8> %x, i8 %i12
664*9880d681SAndroid Build Coastguard Worker  %x13 = extractelement <16 x i8> %x, i8 %i13
665*9880d681SAndroid Build Coastguard Worker  %x14 = extractelement <16 x i8> %x, i8 %i14
666*9880d681SAndroid Build Coastguard Worker  %x15 = extractelement <16 x i8> %x, i8 %i15
667*9880d681SAndroid Build Coastguard Worker  %r0  = insertelement <16 x i8> undef, i8 %x0 , i32 0
668*9880d681SAndroid Build Coastguard Worker  %r1  = insertelement <16 x i8>  %r0 , i8 %x1 , i32 1
669*9880d681SAndroid Build Coastguard Worker  %r2  = insertelement <16 x i8>  %r1 , i8 %x2 , i32 2
670*9880d681SAndroid Build Coastguard Worker  %r3  = insertelement <16 x i8>  %r2 , i8 %x3 , i32 3
671*9880d681SAndroid Build Coastguard Worker  %r4  = insertelement <16 x i8>  %r3 , i8 %x4 , i32 4
672*9880d681SAndroid Build Coastguard Worker  %r5  = insertelement <16 x i8>  %r4 , i8 %x5 , i32 5
673*9880d681SAndroid Build Coastguard Worker  %r6  = insertelement <16 x i8>  %r5 , i8 %x6 , i32 6
674*9880d681SAndroid Build Coastguard Worker  %r7  = insertelement <16 x i8>  %r6 , i8 %x7 , i32 7
675*9880d681SAndroid Build Coastguard Worker  %r8  = insertelement <16 x i8>  %r7 , i8 %x8 , i32 8
676*9880d681SAndroid Build Coastguard Worker  %r9  = insertelement <16 x i8>  %r8 , i8 %x9 , i32 9
677*9880d681SAndroid Build Coastguard Worker  %r10 = insertelement <16 x i8>  %r9 , i8 %x10, i32 10
678*9880d681SAndroid Build Coastguard Worker  %r11 = insertelement <16 x i8>  %r10, i8 %x11, i32 11
679*9880d681SAndroid Build Coastguard Worker  %r12 = insertelement <16 x i8>  %r11, i8 %x12, i32 12
680*9880d681SAndroid Build Coastguard Worker  %r13 = insertelement <16 x i8>  %r12, i8 %x13, i32 13
681*9880d681SAndroid Build Coastguard Worker  %r14 = insertelement <16 x i8>  %r13, i8 %x14, i32 14
682*9880d681SAndroid Build Coastguard Worker  %r15 = insertelement <16 x i8>  %r14, i8 %x15, i32 15
683*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %r15
684*9880d681SAndroid Build Coastguard Worker}
685*9880d681SAndroid Build Coastguard Worker
686*9880d681SAndroid Build Coastguard Worker;
687*9880d681SAndroid Build Coastguard Worker; Unary shuffle indices from memory
688*9880d681SAndroid Build Coastguard Worker;
689*9880d681SAndroid Build Coastguard Worker
690*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mem_shuffle_v4i32_v4i32_xxxx_i32(<4 x i32> %x, i32* %i) nounwind {
691*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: mem_shuffle_v4i32_v4i32_xxxx_i32:
692*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
693*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq (%rdi), %rax
694*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
695*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq 4(%rdi), %rcx
696*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq 8(%rdi), %rdx
697*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movslq 12(%rdi), %rsi
698*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
699*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
700*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
701*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
702*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
703*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
704*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
705*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
706*9880d681SAndroid Build Coastguard Worker;
707*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: mem_shuffle_v4i32_v4i32_xxxx_i32:
708*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
709*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq (%rdi), %rax
710*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
711*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq 4(%rdi), %rcx
712*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq 8(%rdi), %rdx
713*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movslq 12(%rdi), %rsi
714*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
715*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
716*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
717*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
718*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
719*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
720*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
721*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
722*9880d681SAndroid Build Coastguard Worker;
723*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: mem_shuffle_v4i32_v4i32_xxxx_i32:
724*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
725*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq (%rdi), %rax
726*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
727*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq 4(%rdi), %rcx
728*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq 8(%rdi), %rdx
729*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movslq 12(%rdi), %rsi
730*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
731*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $1, -24(%rsp,%rcx,4), %xmm0
732*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $2, -24(%rsp,%rdx,4), %xmm0
733*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrd $3, -24(%rsp,%rsi,4), %xmm0
734*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
735*9880d681SAndroid Build Coastguard Worker;
736*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: mem_shuffle_v4i32_v4i32_xxxx_i32:
737*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
738*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq (%rdi), %rax
739*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
740*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq 4(%rdi), %rcx
741*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq 8(%rdi), %rdx
742*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq 12(%rdi), %rsi
743*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
744*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $1, -24(%rsp,%rcx,4), %xmm0, %xmm0
745*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $2, -24(%rsp,%rdx,4), %xmm0, %xmm0
746*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrd $3, -24(%rsp,%rsi,4), %xmm0, %xmm0
747*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
748*9880d681SAndroid Build Coastguard Worker  %p0  = getelementptr inbounds i32, i32* %i, i64 0
749*9880d681SAndroid Build Coastguard Worker  %p1  = getelementptr inbounds i32, i32* %i, i64 1
750*9880d681SAndroid Build Coastguard Worker  %p2  = getelementptr inbounds i32, i32* %i, i64 2
751*9880d681SAndroid Build Coastguard Worker  %p3  = getelementptr inbounds i32, i32* %i, i64 3
752*9880d681SAndroid Build Coastguard Worker  %i0  = load i32, i32* %p0, align 4
753*9880d681SAndroid Build Coastguard Worker  %i1  = load i32, i32* %p1, align 4
754*9880d681SAndroid Build Coastguard Worker  %i2  = load i32, i32* %p2, align 4
755*9880d681SAndroid Build Coastguard Worker  %i3  = load i32, i32* %p3, align 4
756*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <4 x i32> %x, i32 %i0
757*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <4 x i32> %x, i32 %i1
758*9880d681SAndroid Build Coastguard Worker  %x2 = extractelement <4 x i32> %x, i32 %i2
759*9880d681SAndroid Build Coastguard Worker  %x3 = extractelement <4 x i32> %x, i32 %i3
760*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <4 x i32> undef, i32 %x0, i32 0
761*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x i32>   %r0, i32 %x1, i32 1
762*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x i32>   %r1, i32 %x2, i32 2
763*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <4 x i32>   %r2, i32 %x3, i32 3
764*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r3
765*9880d681SAndroid Build Coastguard Worker}
766*9880d681SAndroid Build Coastguard Worker
767*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @mem_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8(<16 x i8> %x, i8* %i) nounwind {
768*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: mem_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
769*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
770*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq (%rdi), %rcx
771*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
772*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm0
775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 8(%rdi), %rcx
776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
777*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm8
778*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 12(%rdi), %rcx
779*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
780*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm9
781*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 4(%rdi), %rcx
782*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
783*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm3
784*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 14(%rdi), %rcx
785*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
786*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm10
787*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 6(%rdi), %rcx
788*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
789*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm5
790*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 10(%rdi), %rcx
791*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
792*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm11
793*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 2(%rdi), %rcx
794*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
795*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm7
796*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 15(%rdi), %rcx
797*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
798*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm12
799*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 7(%rdi), %rcx
800*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
801*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm2
802*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 11(%rdi), %rcx
803*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
804*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm13
805*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 3(%rdi), %rcx
806*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
807*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm6
808*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 13(%rdi), %rcx
809*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
810*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm14
811*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 5(%rdi), %rcx
812*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
813*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm4
814*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 9(%rdi), %rcx
815*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %ecx
816*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm15
817*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsbq 1(%rdi), %rcx
818*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzbl (%rcx,%rax), %eax
819*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
820*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm8[0],xmm0[1],xmm8[1],xmm0[2],xmm8[2],xmm0[3],xmm8[3],xmm0[4],xmm8[4],xmm0[5],xmm8[5],xmm0[6],xmm8[6],xmm0[7],xmm8[7]
821*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
822*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
823*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm10[0],xmm5[1],xmm10[1],xmm5[2],xmm10[2],xmm5[3],xmm10[3],xmm5[4],xmm10[4],xmm5[5],xmm10[5],xmm5[6],xmm10[6],xmm5[7],xmm10[7]
824*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm11[0],xmm7[1],xmm11[1],xmm7[2],xmm11[2],xmm7[3],xmm11[3],xmm7[4],xmm11[4],xmm7[5],xmm11[5],xmm7[6],xmm11[6],xmm7[7],xmm11[7]
825*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm5[0],xmm7[1],xmm5[1],xmm7[2],xmm5[2],xmm7[3],xmm5[3],xmm7[4],xmm5[4],xmm7[5],xmm5[5],xmm7[6],xmm5[6],xmm7[7],xmm5[7]
826*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]
827*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm12[0],xmm2[1],xmm12[1],xmm2[2],xmm12[2],xmm2[3],xmm12[3],xmm2[4],xmm12[4],xmm2[5],xmm12[5],xmm2[6],xmm12[6],xmm2[7],xmm12[7]
828*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1],xmm6[2],xmm13[2],xmm6[3],xmm13[3],xmm6[4],xmm13[4],xmm6[5],xmm13[5],xmm6[6],xmm13[6],xmm6[7],xmm13[7]
829*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]
830*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm14[0],xmm4[1],xmm14[1],xmm4[2],xmm14[2],xmm4[3],xmm14[3],xmm4[4],xmm14[4],xmm4[5],xmm14[5],xmm4[6],xmm14[6],xmm4[7],xmm14[7]
831*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm15[0],xmm1[1],xmm15[1],xmm1[2],xmm15[2],xmm1[3],xmm15[3],xmm1[4],xmm15[4],xmm1[5],xmm15[5],xmm1[6],xmm15[6],xmm1[7],xmm15[7]
832*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
833*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm6[0],xmm1[1],xmm6[1],xmm1[2],xmm6[2],xmm1[3],xmm6[3],xmm1[4],xmm6[4],xmm1[5],xmm6[5],xmm1[6],xmm6[6],xmm1[7],xmm6[7]
834*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
835*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
836*9880d681SAndroid Build Coastguard Worker;
837*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: mem_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
838*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
839*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq (%rdi), %rcx
840*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
841*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
842*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
843*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm0
844*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 8(%rdi), %rcx
845*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
846*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm8
847*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 12(%rdi), %rcx
848*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
849*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm9
850*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 4(%rdi), %rcx
851*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
852*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm3
853*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 14(%rdi), %rcx
854*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
855*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm10
856*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 6(%rdi), %rcx
857*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
858*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm5
859*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 10(%rdi), %rcx
860*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
861*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm11
862*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 2(%rdi), %rcx
863*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
864*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm7
865*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 15(%rdi), %rcx
866*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
867*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm12
868*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 7(%rdi), %rcx
869*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
870*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm2
871*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 11(%rdi), %rcx
872*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
873*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm13
874*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 3(%rdi), %rcx
875*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
876*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm6
877*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 13(%rdi), %rcx
878*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
879*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm14
880*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 5(%rdi), %rcx
881*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
882*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm4
883*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 9(%rdi), %rcx
884*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %ecx
885*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm15
886*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsbq 1(%rdi), %rcx
887*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzbl (%rcx,%rax), %eax
888*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
889*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm8[0],xmm0[1],xmm8[1],xmm0[2],xmm8[2],xmm0[3],xmm8[3],xmm0[4],xmm8[4],xmm0[5],xmm8[5],xmm0[6],xmm8[6],xmm0[7],xmm8[7]
890*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1],xmm3[2],xmm9[2],xmm3[3],xmm9[3],xmm3[4],xmm9[4],xmm3[5],xmm9[5],xmm3[6],xmm9[6],xmm3[7],xmm9[7]
891*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
892*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm10[0],xmm5[1],xmm10[1],xmm5[2],xmm10[2],xmm5[3],xmm10[3],xmm5[4],xmm10[4],xmm5[5],xmm10[5],xmm5[6],xmm10[6],xmm5[7],xmm10[7]
893*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm11[0],xmm7[1],xmm11[1],xmm7[2],xmm11[2],xmm7[3],xmm11[3],xmm7[4],xmm11[4],xmm7[5],xmm11[5],xmm7[6],xmm11[6],xmm7[7],xmm11[7]
894*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm5[0],xmm7[1],xmm5[1],xmm7[2],xmm5[2],xmm7[3],xmm5[3],xmm7[4],xmm5[4],xmm7[5],xmm5[5],xmm7[6],xmm5[6],xmm7[7],xmm5[7]
895*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]
896*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm12[0],xmm2[1],xmm12[1],xmm2[2],xmm12[2],xmm2[3],xmm12[3],xmm2[4],xmm12[4],xmm2[5],xmm12[5],xmm2[6],xmm12[6],xmm2[7],xmm12[7]
897*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1],xmm6[2],xmm13[2],xmm6[3],xmm13[3],xmm6[4],xmm13[4],xmm6[5],xmm13[5],xmm6[6],xmm13[6],xmm6[7],xmm13[7]
898*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm2[0],xmm6[1],xmm2[1],xmm6[2],xmm2[2],xmm6[3],xmm2[3],xmm6[4],xmm2[4],xmm6[5],xmm2[5],xmm6[6],xmm2[6],xmm6[7],xmm2[7]
899*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm14[0],xmm4[1],xmm14[1],xmm4[2],xmm14[2],xmm4[3],xmm14[3],xmm4[4],xmm14[4],xmm4[5],xmm14[5],xmm4[6],xmm14[6],xmm4[7],xmm14[7]
900*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm15[0],xmm1[1],xmm15[1],xmm1[2],xmm15[2],xmm1[3],xmm15[3],xmm1[4],xmm15[4],xmm1[5],xmm15[5],xmm1[6],xmm15[6],xmm1[7],xmm15[7]
901*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
902*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm6[0],xmm1[1],xmm6[1],xmm1[2],xmm6[2],xmm1[3],xmm6[3],xmm1[4],xmm6[4],xmm1[5],xmm6[5],xmm1[6],xmm6[6],xmm1[7],xmm6[7]
903*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
904*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
905*9880d681SAndroid Build Coastguard Worker;
906*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: mem_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
907*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
908*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %rbp
909*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r15
910*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r14
911*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r13
912*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %r12
913*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pushq %rbx
914*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq (%rdi), %rax
915*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
916*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 1(%rdi), %r15
917*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 2(%rdi), %r8
918*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 3(%rdi), %r9
919*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 4(%rdi), %r10
920*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 5(%rdi), %r11
921*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 6(%rdi), %r14
922*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 7(%rdi), %r12
923*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 8(%rdi), %r13
924*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 9(%rdi), %rdx
925*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 10(%rdi), %rcx
926*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 11(%rdi), %rsi
927*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 12(%rdi), %rbx
928*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    leaq -{{[0-9]+}}(%rsp), %rbp
929*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rax,%rbp), %eax
930*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %eax, %xmm0
931*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 13(%rdi), %rax
932*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $1, (%r15,%rbp), %xmm0
933*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 14(%rdi), %r15
934*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movsbq 15(%rdi), %rdi
935*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rdi,%rbp), %edi
936*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r15,%rbp), %r15d
937*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rax,%rbp), %eax
938*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rbx,%rbp), %ebx
939*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rsi,%rbp), %esi
940*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rcx,%rbp), %ecx
941*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%rdx,%rbp), %edx
942*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r13,%rbp), %r13d
943*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r12,%rbp), %r12d
944*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r14,%rbp), %r14d
945*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r11,%rbp), %r11d
946*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r10,%rbp), %r10d
947*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r9,%rbp), %r9d
948*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzbl (%r8,%rbp), %ebp
949*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $2, %ebp, %xmm0
950*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $3, %r9d, %xmm0
951*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $4, %r10d, %xmm0
952*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $5, %r11d, %xmm0
953*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $6, %r14d, %xmm0
954*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $7, %r12d, %xmm0
955*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $8, %r13d, %xmm0
956*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $9, %edx, %xmm0
957*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $10, %ecx, %xmm0
958*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $11, %esi, %xmm0
959*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $12, %ebx, %xmm0
960*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $13, %eax, %xmm0
961*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $14, %r15d, %xmm0
962*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $15, %edi, %xmm0
963*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %rbx
964*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r12
965*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r13
966*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r14
967*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %r15
968*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    popq %rbp
969*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
970*9880d681SAndroid Build Coastguard Worker;
971*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: mem_shuffle_v16i8_v16i8_xxxxxxxxxxxxxxxx_i8:
972*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
973*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %rbp
974*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r15
975*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r14
976*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r13
977*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %r12
978*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    pushq %rbx
979*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq (%rdi), %rsi
980*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
981*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 1(%rdi), %r15
982*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 2(%rdi), %r8
983*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 3(%rdi), %r9
984*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 4(%rdi), %r10
985*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 5(%rdi), %r11
986*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 6(%rdi), %r14
987*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 7(%rdi), %r12
988*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 8(%rdi), %r13
989*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 9(%rdi), %rdx
990*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 10(%rdi), %rax
991*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 11(%rdi), %rcx
992*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 12(%rdi), %rbx
993*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    leaq -{{[0-9]+}}(%rsp), %rbp
994*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rsi,%rbp), %esi
995*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovd %esi, %xmm0
996*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 13(%rdi), %rsi
997*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $1, (%r15,%rbp), %xmm0, %xmm0
998*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 14(%rdi), %r15
999*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movsbq 15(%rdi), %rdi
1000*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rdi,%rbp), %edi
1001*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r15,%rbp), %r15d
1002*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rsi,%rbp), %esi
1003*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rbx,%rbp), %ebx
1004*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rcx,%rbp), %ecx
1005*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rax,%rbp), %eax
1006*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%rdx,%rbp), %edx
1007*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r13,%rbp), %r13d
1008*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r12,%rbp), %r12d
1009*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r14,%rbp), %r14d
1010*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r11,%rbp), %r11d
1011*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r10,%rbp), %r10d
1012*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r9,%rbp), %r9d
1013*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movzbl (%r8,%rbp), %ebp
1014*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $2, %ebp, %xmm0, %xmm0
1015*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $3, %r9d, %xmm0, %xmm0
1016*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $4, %r10d, %xmm0, %xmm0
1017*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $5, %r11d, %xmm0, %xmm0
1018*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $6, %r14d, %xmm0, %xmm0
1019*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $7, %r12d, %xmm0, %xmm0
1020*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $8, %r13d, %xmm0, %xmm0
1021*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $9, %edx, %xmm0, %xmm0
1022*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0
1023*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $11, %ecx, %xmm0, %xmm0
1024*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $12, %ebx, %xmm0, %xmm0
1025*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $13, %esi, %xmm0, %xmm0
1026*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $14, %r15d, %xmm0, %xmm0
1027*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $15, %edi, %xmm0, %xmm0
1028*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %rbx
1029*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r12
1030*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r13
1031*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r14
1032*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %r15
1033*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    popq %rbp
1034*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1035*9880d681SAndroid Build Coastguard Worker  %p0  = getelementptr inbounds i8, i8* %i, i64 0
1036*9880d681SAndroid Build Coastguard Worker  %p1  = getelementptr inbounds i8, i8* %i, i64 1
1037*9880d681SAndroid Build Coastguard Worker  %p2  = getelementptr inbounds i8, i8* %i, i64 2
1038*9880d681SAndroid Build Coastguard Worker  %p3  = getelementptr inbounds i8, i8* %i, i64 3
1039*9880d681SAndroid Build Coastguard Worker  %p4  = getelementptr inbounds i8, i8* %i, i64 4
1040*9880d681SAndroid Build Coastguard Worker  %p5  = getelementptr inbounds i8, i8* %i, i64 5
1041*9880d681SAndroid Build Coastguard Worker  %p6  = getelementptr inbounds i8, i8* %i, i64 6
1042*9880d681SAndroid Build Coastguard Worker  %p7  = getelementptr inbounds i8, i8* %i, i64 7
1043*9880d681SAndroid Build Coastguard Worker  %p8  = getelementptr inbounds i8, i8* %i, i64 8
1044*9880d681SAndroid Build Coastguard Worker  %p9  = getelementptr inbounds i8, i8* %i, i64 9
1045*9880d681SAndroid Build Coastguard Worker  %p10 = getelementptr inbounds i8, i8* %i, i64 10
1046*9880d681SAndroid Build Coastguard Worker  %p11 = getelementptr inbounds i8, i8* %i, i64 11
1047*9880d681SAndroid Build Coastguard Worker  %p12 = getelementptr inbounds i8, i8* %i, i64 12
1048*9880d681SAndroid Build Coastguard Worker  %p13 = getelementptr inbounds i8, i8* %i, i64 13
1049*9880d681SAndroid Build Coastguard Worker  %p14 = getelementptr inbounds i8, i8* %i, i64 14
1050*9880d681SAndroid Build Coastguard Worker  %p15 = getelementptr inbounds i8, i8* %i, i64 15
1051*9880d681SAndroid Build Coastguard Worker  %i0  = load i8, i8* %p0 , align 4
1052*9880d681SAndroid Build Coastguard Worker  %i1  = load i8, i8* %p1 , align 4
1053*9880d681SAndroid Build Coastguard Worker  %i2  = load i8, i8* %p2 , align 4
1054*9880d681SAndroid Build Coastguard Worker  %i3  = load i8, i8* %p3 , align 4
1055*9880d681SAndroid Build Coastguard Worker  %i4  = load i8, i8* %p4 , align 4
1056*9880d681SAndroid Build Coastguard Worker  %i5  = load i8, i8* %p5 , align 4
1057*9880d681SAndroid Build Coastguard Worker  %i6  = load i8, i8* %p6 , align 4
1058*9880d681SAndroid Build Coastguard Worker  %i7  = load i8, i8* %p7 , align 4
1059*9880d681SAndroid Build Coastguard Worker  %i8  = load i8, i8* %p8 , align 4
1060*9880d681SAndroid Build Coastguard Worker  %i9  = load i8, i8* %p9 , align 4
1061*9880d681SAndroid Build Coastguard Worker  %i10 = load i8, i8* %p10, align 4
1062*9880d681SAndroid Build Coastguard Worker  %i11 = load i8, i8* %p11, align 4
1063*9880d681SAndroid Build Coastguard Worker  %i12 = load i8, i8* %p12, align 4
1064*9880d681SAndroid Build Coastguard Worker  %i13 = load i8, i8* %p13, align 4
1065*9880d681SAndroid Build Coastguard Worker  %i14 = load i8, i8* %p14, align 4
1066*9880d681SAndroid Build Coastguard Worker  %i15 = load i8, i8* %p15, align 4
1067*9880d681SAndroid Build Coastguard Worker  %x0  = extractelement <16 x i8> %x, i8 %i0
1068*9880d681SAndroid Build Coastguard Worker  %x1  = extractelement <16 x i8> %x, i8 %i1
1069*9880d681SAndroid Build Coastguard Worker  %x2  = extractelement <16 x i8> %x, i8 %i2
1070*9880d681SAndroid Build Coastguard Worker  %x3  = extractelement <16 x i8> %x, i8 %i3
1071*9880d681SAndroid Build Coastguard Worker  %x4  = extractelement <16 x i8> %x, i8 %i4
1072*9880d681SAndroid Build Coastguard Worker  %x5  = extractelement <16 x i8> %x, i8 %i5
1073*9880d681SAndroid Build Coastguard Worker  %x6  = extractelement <16 x i8> %x, i8 %i6
1074*9880d681SAndroid Build Coastguard Worker  %x7  = extractelement <16 x i8> %x, i8 %i7
1075*9880d681SAndroid Build Coastguard Worker  %x8  = extractelement <16 x i8> %x, i8 %i8
1076*9880d681SAndroid Build Coastguard Worker  %x9  = extractelement <16 x i8> %x, i8 %i9
1077*9880d681SAndroid Build Coastguard Worker  %x10 = extractelement <16 x i8> %x, i8 %i10
1078*9880d681SAndroid Build Coastguard Worker  %x11 = extractelement <16 x i8> %x, i8 %i11
1079*9880d681SAndroid Build Coastguard Worker  %x12 = extractelement <16 x i8> %x, i8 %i12
1080*9880d681SAndroid Build Coastguard Worker  %x13 = extractelement <16 x i8> %x, i8 %i13
1081*9880d681SAndroid Build Coastguard Worker  %x14 = extractelement <16 x i8> %x, i8 %i14
1082*9880d681SAndroid Build Coastguard Worker  %x15 = extractelement <16 x i8> %x, i8 %i15
1083*9880d681SAndroid Build Coastguard Worker  %r0  = insertelement <16 x i8> undef, i8 %x0 , i32 0
1084*9880d681SAndroid Build Coastguard Worker  %r1  = insertelement <16 x i8>  %r0 , i8 %x1 , i32 1
1085*9880d681SAndroid Build Coastguard Worker  %r2  = insertelement <16 x i8>  %r1 , i8 %x2 , i32 2
1086*9880d681SAndroid Build Coastguard Worker  %r3  = insertelement <16 x i8>  %r2 , i8 %x3 , i32 3
1087*9880d681SAndroid Build Coastguard Worker  %r4  = insertelement <16 x i8>  %r3 , i8 %x4 , i32 4
1088*9880d681SAndroid Build Coastguard Worker  %r5  = insertelement <16 x i8>  %r4 , i8 %x5 , i32 5
1089*9880d681SAndroid Build Coastguard Worker  %r6  = insertelement <16 x i8>  %r5 , i8 %x6 , i32 6
1090*9880d681SAndroid Build Coastguard Worker  %r7  = insertelement <16 x i8>  %r6 , i8 %x7 , i32 7
1091*9880d681SAndroid Build Coastguard Worker  %r8  = insertelement <16 x i8>  %r7 , i8 %x8 , i32 8
1092*9880d681SAndroid Build Coastguard Worker  %r9  = insertelement <16 x i8>  %r8 , i8 %x9 , i32 9
1093*9880d681SAndroid Build Coastguard Worker  %r10 = insertelement <16 x i8>  %r9 , i8 %x10, i32 10
1094*9880d681SAndroid Build Coastguard Worker  %r11 = insertelement <16 x i8>  %r10, i8 %x11, i32 11
1095*9880d681SAndroid Build Coastguard Worker  %r12 = insertelement <16 x i8>  %r11, i8 %x12, i32 12
1096*9880d681SAndroid Build Coastguard Worker  %r13 = insertelement <16 x i8>  %r12, i8 %x13, i32 13
1097*9880d681SAndroid Build Coastguard Worker  %r14 = insertelement <16 x i8>  %r13, i8 %x14, i32 14
1098*9880d681SAndroid Build Coastguard Worker  %r15 = insertelement <16 x i8>  %r14, i8 %x15, i32 15
1099*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %r15
1100*9880d681SAndroid Build Coastguard Worker}
1101*9880d681SAndroid Build Coastguard Worker
1102*9880d681SAndroid Build Coastguard Worker;
1103*9880d681SAndroid Build Coastguard Worker; Binary shuffle indices from registers
1104*9880d681SAndroid Build Coastguard Worker;
1105*9880d681SAndroid Build Coastguard Worker
1106*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @var_shuffle_v4f32_v4f32_x0yx_i32(<4 x float> %x, <4 x float> %y, i32 %i0, i32 %i1, i32 %i2, i32 %i3) nounwind {
1107*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: var_shuffle_v4f32_v4f32_x0yx_i32:
1108*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1109*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movslq %edi, %rax
1110*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
1111*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movslq %edx, %rdx
1112*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1113*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movslq %ecx, %rcx
1114*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1115*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1116*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1117*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1118*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1119*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1120*9880d681SAndroid Build Coastguard Worker;
1121*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shuffle_v4f32_v4f32_x0yx_i32:
1122*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1123*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edi, %rax
1124*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm1, -{{[0-9]+}}(%rsp)
1125*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %edx, %rdx
1126*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1127*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    movslq %ecx, %rcx
1128*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1129*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1130*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1131*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vunpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1132*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1133*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1134*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <4 x float> %x, i32 %i0
1135*9880d681SAndroid Build Coastguard Worker  %x1 = extractelement <4 x float> %x, i32 %i1
1136*9880d681SAndroid Build Coastguard Worker  %y2 = extractelement <4 x float> %y, i32 %i2
1137*9880d681SAndroid Build Coastguard Worker  %x3 = extractelement <4 x float> %x, i32 %i3
1138*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <4 x float> undef, float %x0, i32 0
1139*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x float>   %r0, float 0.0, i32 1
1140*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x float>   %r1, float %y2, i32 2
1141*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <4 x float>   %r2, float %x3, i32 3
1142*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r3
1143*9880d681SAndroid Build Coastguard Worker}
1144*9880d681SAndroid Build Coastguard Worker
1145*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @var_shuffle_v8i16_v8i16_xyxyxy00_i16(<8 x i16> %x, <8 x i16> %y, i16 %i0, i16 %i1, i16 %i2, i16 %i3, i16 %i4, i16 %i5, i16 %i6, i16 %i7) nounwind {
1146*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shuffle_v8i16_v8i16_xyxyxy00_i16:
1147*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1148*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
1149*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
1150*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
1151*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
1152*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
1153*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
1154*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %di, %r10
1155*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %si, %rsi
1156*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %dx, %r11
1157*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %cx, %rcx
1158*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1159*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %r8w, %rdi
1160*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
1161*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movswq %r9w, %rax
1162*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rsi,2), %esi
1163*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %edx, %edx
1164*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %edx, %xmm0
1165*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rcx,2), %ecx
1166*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
1167*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1168*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %esi, %xmm2
1169*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -24(%rsp,%rax,2), %eax
1170*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
1171*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
1172*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
1173*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -40(%rsp,%r10,2), %eax
1174*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -40(%rsp,%r11,2), %ecx
1175*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %ecx, %xmm1
1176*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1177*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm0
1178*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl -40(%rsp,%rdi,2), %eax
1179*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
1180*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
1181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1184*9880d681SAndroid Build Coastguard Worker;
1185*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: var_shuffle_v8i16_v8i16_xyxyxy00_i16:
1186*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
1187*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
1188*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
1189*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
1190*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
1191*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
1192*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
1193*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %di, %r10
1194*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %si, %rsi
1195*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %dx, %r11
1196*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %cx, %rcx
1197*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1198*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %r8w, %rdi
1199*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
1200*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movswq %r9w, %rax
1201*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rsi,2), %esi
1202*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %edx, %edx
1203*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %edx, %xmm0
1204*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rcx,2), %ecx
1205*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm1
1206*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1207*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %esi, %xmm2
1208*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -24(%rsp,%rax,2), %eax
1209*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm3
1210*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
1211*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
1212*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -40(%rsp,%r10,2), %eax
1213*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -40(%rsp,%r11,2), %ecx
1214*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %ecx, %xmm1
1215*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1216*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm0
1217*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movzwl -40(%rsp,%rdi,2), %eax
1218*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm3
1219*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
1220*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1221*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1222*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
1223*9880d681SAndroid Build Coastguard Worker;
1224*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shuffle_v8i16_v8i16_xyxyxy00_i16:
1225*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1226*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
1227*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
1228*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
1229*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
1230*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
1231*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
1232*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %di, %rax
1233*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %si, %rsi
1234*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %dx, %rdx
1235*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %cx, %r10
1236*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)
1237*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %r8w, %rdi
1238*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
1239*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movswq %r9w, %rcx
1240*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movzwl -40(%rsp,%rax,2), %eax
1241*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movd %eax, %xmm1
1242*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $1, -24(%rsp,%rsi,2), %xmm1
1243*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $2, -40(%rsp,%rdx,2), %xmm1
1244*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $3, -24(%rsp,%r10,2), %xmm1
1245*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $4, -40(%rsp,%rdi,2), %xmm1
1246*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrw $5, -24(%rsp,%rcx,2), %xmm1
1247*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm0, %xmm0
1248*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5],xmm0[6,7]
1249*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1250*9880d681SAndroid Build Coastguard Worker;
1251*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shuffle_v8i16_v8i16_xyxyxy00_i16:
1252*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
1254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
1255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
1256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
1257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
1258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
1259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %di, %r10
1260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %si, %r11
1261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %dx, %rdx
1262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %cx, %rcx
1263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %r8w, %rdi
1265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa %xmm1, -{{[0-9]+}}(%rsp)
1266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movswq %r9w, %rax
1267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl -40(%rsp,%r10,2), %esi
1268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %esi, %xmm0
1269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $1, -24(%rsp,%r11,2), %xmm0, %xmm0
1270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $2, -40(%rsp,%rdx,2), %xmm0, %xmm0
1271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $3, -24(%rsp,%rcx,2), %xmm0, %xmm0
1272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $4, -40(%rsp,%rdi,2), %xmm0, %xmm0
1273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],xmm1[6,7]
1276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1277*9880d681SAndroid Build Coastguard Worker;
1278*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shuffle_v8i16_v8i16_xyxyxy00_i16:
1279*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1280*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %R9D<def> %R9D<kill> %R9<def>
1281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %R8D<def> %R8D<kill> %R8<def>
1282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %ECX<def> %ECX<kill> %RCX<def>
1283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EDX<def> %EDX<kill> %RDX<def>
1284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %ESI<def> %ESI<kill> %RSI<def>
1285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
1286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %di, %r10
1287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %si, %r11
1288*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %dx, %rdx
1289*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %cx, %rcx
1290*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1291*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %r8w, %rdi
1292*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa %xmm1, -{{[0-9]+}}(%rsp)
1293*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movswq %r9w, %rax
1294*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl -40(%rsp,%r10,2), %esi
1295*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %esi, %xmm0
1296*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $1, -24(%rsp,%r11,2), %xmm0, %xmm0
1297*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $2, -40(%rsp,%rdx,2), %xmm0, %xmm0
1298*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $3, -24(%rsp,%rcx,2), %xmm0, %xmm0
1299*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $4, -40(%rsp,%rdi,2), %xmm0, %xmm0
1300*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1301*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1302*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3]
1303*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1304*9880d681SAndroid Build Coastguard Worker  %x0 = extractelement <8 x i16> %x, i16 %i0
1305*9880d681SAndroid Build Coastguard Worker  %y1 = extractelement <8 x i16> %y, i16 %i1
1306*9880d681SAndroid Build Coastguard Worker  %x2 = extractelement <8 x i16> %x, i16 %i2
1307*9880d681SAndroid Build Coastguard Worker  %y3 = extractelement <8 x i16> %y, i16 %i3
1308*9880d681SAndroid Build Coastguard Worker  %x4 = extractelement <8 x i16> %x, i16 %i4
1309*9880d681SAndroid Build Coastguard Worker  %y5 = extractelement <8 x i16> %y, i16 %i5
1310*9880d681SAndroid Build Coastguard Worker  %x6 = extractelement <8 x i16> %x, i16 %i6
1311*9880d681SAndroid Build Coastguard Worker  %x7 = extractelement <8 x i16> %x, i16 %i7
1312*9880d681SAndroid Build Coastguard Worker  %r0 = insertelement <8 x i16> undef, i16 %x0, i32 0
1313*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i16>   %r0, i16 %y1, i32 1
1314*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i16>   %r1, i16 %x2, i32 2
1315*9880d681SAndroid Build Coastguard Worker  %r3 = insertelement <8 x i16>   %r2, i16 %y3, i32 3
1316*9880d681SAndroid Build Coastguard Worker  %r4 = insertelement <8 x i16>   %r3, i16 %x4, i32 4
1317*9880d681SAndroid Build Coastguard Worker  %r5 = insertelement <8 x i16>   %r4, i16 %y5, i32 5
1318*9880d681SAndroid Build Coastguard Worker  %r6 = insertelement <8 x i16>   %r5, i16   0, i32 6
1319*9880d681SAndroid Build Coastguard Worker  %r7 = insertelement <8 x i16>   %r6, i16   0, i32 7
1320*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r7
1321*9880d681SAndroid Build Coastguard Worker}
1322