xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shift-shl-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 -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
9*9880d681SAndroid Build Coastguard Worker;
10*9880d681SAndroid Build Coastguard Worker; Just one 32-bit run to make sure we do reasonable things for i64 shifts.
11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=X32-SSE --check-prefix=X32-SSE2
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker;
14*9880d681SAndroid Build Coastguard Worker; Variable Shifts
15*9880d681SAndroid Build Coastguard Worker;
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @var_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
18*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v2i64:
19*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
20*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]
21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllq %xmm3, %xmm2
23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllq %xmm1, %xmm0
24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1]
25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm2, %xmm0
26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
27*9880d681SAndroid Build Coastguard Worker;
28*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v2i64:
29*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
30*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
31*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllq %xmm1, %xmm2
32*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
33*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllq %xmm1, %xmm0
34*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm0[4,5,6,7]
35*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
36*9880d681SAndroid Build Coastguard Worker;
37*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v2i64:
38*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm2
40*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
41*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0
42*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm0[4,5,6,7]
43*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
44*9880d681SAndroid Build Coastguard Worker;
45*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v2i64:
46*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvq %xmm1, %xmm0, %xmm0
48*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
49*9880d681SAndroid Build Coastguard Worker;
50*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v2i64:
51*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
52*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
53*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker;
55*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v2i64:
56*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsllvq %xmm1, %xmm0, %xmm0
58*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
59*9880d681SAndroid Build Coastguard Worker;
60*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v2i64:
61*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
62*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvq %xmm1, %xmm0, %xmm0
63*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
64*9880d681SAndroid Build Coastguard Worker;
65*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v2i64:
66*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
67*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]
68*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm2
69*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq %xmm3, %xmm2
70*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movq {{.*#+}} xmm1 = xmm1[0],zero
71*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq %xmm1, %xmm0
72*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1]
73*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movapd %xmm2, %xmm0
74*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
75*9880d681SAndroid Build Coastguard Worker  %shift = shl <2 x i64> %a, %b
76*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @var_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
80*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v4i32:
81*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
82*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pslld $23, %xmm1
83*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd {{.*}}(%rip), %xmm1
84*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    cvttps2dq %xmm1, %xmm1
85*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
86*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pmuludq %xmm0, %xmm1
87*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
88*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
89*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pmuludq %xmm2, %xmm0
90*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
91*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
92*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
93*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
94*9880d681SAndroid Build Coastguard Worker;
95*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v4i32:
96*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
97*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pslld $23, %xmm1
98*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddd {{.*}}(%rip), %xmm1
99*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    cvttps2dq %xmm1, %xmm1
100*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmulld %xmm1, %xmm0
101*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
102*9880d681SAndroid Build Coastguard Worker;
103*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v4i32:
104*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslld $23, %xmm1, %xmm1
106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm1, %xmm1
107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vcvttps2dq %xmm1, %xmm1
108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm0, %xmm1, %xmm0
109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
110*9880d681SAndroid Build Coastguard Worker;
111*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v4i32:
112*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvd %xmm1, %xmm0, %xmm0
114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
115*9880d681SAndroid Build Coastguard Worker;
116*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v4i32:
117*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
118*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld %xmm1, %xmm0, %xmm0
119*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
120*9880d681SAndroid Build Coastguard Worker;
121*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v4i32:
122*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
123*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsllvd %xmm1, %xmm0, %xmm0
124*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
125*9880d681SAndroid Build Coastguard Worker;
126*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v4i32:
127*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
128*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvd %xmm1, %xmm0, %xmm0
129*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
130*9880d681SAndroid Build Coastguard Worker;
131*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v4i32:
132*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
133*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pslld $23, %xmm1
134*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddd {{\.LCPI.*}}, %xmm1
135*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    cvttps2dq %xmm1, %xmm1
136*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
137*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pmuludq %xmm0, %xmm1
138*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
139*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
140*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pmuludq %xmm2, %xmm0
141*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
142*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
143*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
144*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
145*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i32> %a, %b
146*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @var_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
150*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v8i16:
151*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
152*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $12, %xmm1
153*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
154*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
155*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
156*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
157*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $8, %xmm0
158*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
159*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
160*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
161*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
162*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
163*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
164*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
165*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $4, %xmm0
166*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
167*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
168*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
169*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
170*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
171*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
172*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
173*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $2, %xmm0
174*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
175*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
176*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
177*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm1
178*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
179*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm2
180*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $1, %xmm0
181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
184*9880d681SAndroid Build Coastguard Worker;
185*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v8i16:
186*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
187*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
188*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
189*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $12, %xmm0
190*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm1
191*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    por %xmm0, %xmm1
192*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
193*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
194*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
195*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $8, %xmm4
196*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
197*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
198*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
199*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm1
200*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
201*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
202*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
203*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $2, %xmm1
204*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
205*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
206*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
207*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
208*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $1, %xmm1
209*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
210*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
211*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
212*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
213*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
214*9880d681SAndroid Build Coastguard Worker;
215*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v8i16:
216*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $12, %xmm1, %xmm2
218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
219*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm1, %xmm1
220*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm2
221*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm3
222*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
223*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm1
224*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
225*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $2, %xmm0, %xmm1
226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $1, %xmm0, %xmm1
229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
232*9880d681SAndroid Build Coastguard Worker;
233*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v8i16:
234*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero
236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0
238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v8i16:
245*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
246*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
247*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
248*9880d681SAndroid Build Coastguard Worker;
249*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v8i16:
250*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
251*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM1<def> %XMM1<kill> %ZMM1<def>
252*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
253*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0
254*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
255*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
256*9880d681SAndroid Build Coastguard Worker;
257*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v8i16:
258*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
259*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $12, %xmm1
260*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
261*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
262*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
263*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
264*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $8, %xmm0
265*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
266*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
267*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
268*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
269*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
270*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
271*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
272*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $4, %xmm0
273*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
274*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
275*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
276*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
277*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
278*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
279*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
280*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $2, %xmm0
281*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
282*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
283*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
284*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm1
285*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
286*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm2
287*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $1, %xmm0
288*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
289*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm2, %xmm0
290*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
291*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, %b
292*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @var_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
296*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v16i8:
297*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm1
299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm2
300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3
302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $4, %xmm0
305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
307*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
308*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm1, %xmm1
309*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
310*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm1, %xmm3
311*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
312*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
313*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $2, %xmm0
314*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
315*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm1, %xmm1
318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm1
320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm1
321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
325*9880d681SAndroid Build Coastguard Worker;
326*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v16i8:
327*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm1
330*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm3
331*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm3
332*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm3
333*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
334*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm2
335*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm3
336*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $2, %xmm3
337*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm3
338*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm1, %xmm1
339*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
340*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm2
341*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm3
342*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm3
343*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm1, %xmm1
344*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
345*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm2
346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
347*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
348*9880d681SAndroid Build Coastguard Worker;
349*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shift_v16i8:
350*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
351*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1
352*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $4, %xmm0, %xmm2
353*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
354*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
355*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $2, %xmm0, %xmm2
356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
357*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
358*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
359*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
360*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
361*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
362*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
363*9880d681SAndroid Build Coastguard Worker;
364*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v16i8:
365*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
366*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
367*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
368*9880d681SAndroid Build Coastguard Worker;
369*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v16i8:
370*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
371*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
372*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $4, %xmm0, %xmm2
373*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
374*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
375*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $2, %xmm0, %xmm2
376*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
377*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
378*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
379*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
380*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
381*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
382*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
383*9880d681SAndroid Build Coastguard Worker;
384*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v16i8:
385*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
386*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm1
387*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
388*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
389*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm1, %xmm3
390*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
391*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
392*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $4, %xmm0
393*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
394*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
395*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
396*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm1, %xmm1
397*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
398*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm1, %xmm3
399*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
400*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
401*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $2, %xmm0
402*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
403*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
404*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
405*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm1, %xmm1
406*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm1, %xmm2
407*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm1
408*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm1
409*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm0, %xmm0
410*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
411*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm1, %xmm0
412*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
413*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i8> %a, %b
414*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
415*9880d681SAndroid Build Coastguard Worker}
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Worker;
418*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts
419*9880d681SAndroid Build Coastguard Worker;
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatvar_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
422*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatvar_shift_v2i64:
423*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
424*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq %xmm1, %xmm0
425*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
426*9880d681SAndroid Build Coastguard Worker;
427*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v2i64:
428*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
429*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllq %xmm1, %xmm0, %xmm0
430*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
431*9880d681SAndroid Build Coastguard Worker;
432*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v2i64:
433*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
434*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsllq %xmm1, %xmm0, %xmm0
435*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
436*9880d681SAndroid Build Coastguard Worker;
437*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v2i64:
438*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq %xmm1, %xmm0, %xmm0
440*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
441*9880d681SAndroid Build Coastguard Worker;
442*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v2i64:
443*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
444*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movq {{.*#+}} xmm1 = xmm1[0],zero
445*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq %xmm1, %xmm0
446*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
447*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <2 x i64> %b, <2 x i64> undef, <2 x i32> zeroinitializer
448*9880d681SAndroid Build Coastguard Worker  %shift = shl <2 x i64> %a, %splat
449*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatvar_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
453*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v4i32:
454*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
455*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorps %xmm2, %xmm2
456*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
457*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pslld %xmm2, %xmm0
458*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
459*9880d681SAndroid Build Coastguard Worker;
460*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v4i32:
461*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
462*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
463*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
464*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pslld %xmm2, %xmm0
465*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
466*9880d681SAndroid Build Coastguard Worker;
467*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v4i32:
468*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
469*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
470*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
471*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpslld %xmm1, %xmm0, %xmm0
472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
473*9880d681SAndroid Build Coastguard Worker;
474*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v4i32:
475*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
476*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
477*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
478*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpslld %xmm1, %xmm0, %xmm0
479*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
480*9880d681SAndroid Build Coastguard Worker;
481*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v4i32:
482*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
483*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps %xmm2, %xmm2, %xmm2
484*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3]
485*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpslld %xmm1, %xmm0, %xmm0
486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
487*9880d681SAndroid Build Coastguard Worker;
488*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v4i32:
489*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
490*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorps %xmm2, %xmm2
491*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
492*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pslld %xmm2, %xmm0
493*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
494*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> zeroinitializer
495*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i32> %a, %splat
496*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
497*9880d681SAndroid Build Coastguard Worker}
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatvar_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
500*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v8i16:
501*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
502*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm1, %eax
503*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl %ax, %eax
504*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
505*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw %xmm1, %xmm0
506*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
507*9880d681SAndroid Build Coastguard Worker;
508*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v8i16:
509*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
510*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
511*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7]
512*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw %xmm2, %xmm0
513*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
514*9880d681SAndroid Build Coastguard Worker;
515*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v8i16:
516*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
517*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
518*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
519*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw %xmm1, %xmm0, %xmm0
520*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
521*9880d681SAndroid Build Coastguard Worker;
522*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v8i16:
523*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
524*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
525*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
526*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsllw %xmm1, %xmm0, %xmm0
527*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker;
529*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v8i16:
530*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
531*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
532*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
533*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw %xmm1, %xmm0, %xmm0
534*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
535*9880d681SAndroid Build Coastguard Worker;
536*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v8i16:
537*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
538*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm1, %eax
539*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movzwl %ax, %eax
540*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %eax, %xmm1
541*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw %xmm1, %xmm0
542*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
543*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <8 x i16> %b, <8 x i16> undef, <8 x i32> zeroinitializer
544*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, %splat
545*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatvar_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
549*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v16i8:
550*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
551*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
552*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
553*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,1,1]
554*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
555*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
556*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
557*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm3
558*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
559*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
560*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $4, %xmm0
561*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
562*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
563*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
564*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
565*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
566*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm3
567*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
568*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
569*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $2, %xmm0
570*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
571*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
572*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
573*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
574*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
575*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
576*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm2
577*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
578*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
579*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
580*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
581*9880d681SAndroid Build Coastguard Worker;
582*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v16i8:
583*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
584*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
585*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm0, %xmm0
586*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
587*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm1
588*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
589*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm3
590*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
591*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm4
592*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm4
593*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
594*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
595*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
596*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $2, %xmm1
597*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm1
598*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
599*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
600*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
601*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm1, %xmm1
602*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm3, %xmm3
603*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
604*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
605*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
606*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
607*9880d681SAndroid Build Coastguard Worker;
608*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v16i8:
609*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm2
614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm3
615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand {{.*}}(%rip), %xmm3, %xmm3
616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $2, %xmm0, %xmm1
618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand {{.*}}(%rip), %xmm1, %xmm1
619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm0, %xmm0, %xmm1
621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm2, %xmm2
622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
624*9880d681SAndroid Build Coastguard Worker;
625*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v16i8:
626*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
627*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastb %xmm1, %xmm1
628*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $5, %xmm1, %xmm1
629*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $4, %xmm0, %xmm2
630*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
632*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $2, %xmm0, %xmm2
633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
640*9880d681SAndroid Build Coastguard Worker;
641*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v16i8:
642*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
643*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
644*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
645*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
646*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
647*9880d681SAndroid Build Coastguard Worker;
648*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v16i8:
649*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
650*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1
651*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
652*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
653*9880d681SAndroid Build Coastguard Worker;
654*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v16i8:
655*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpbroadcastb %xmm1, %xmm1
657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $4, %xmm0, %xmm2
659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
660*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
661*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $2, %xmm0, %xmm2
662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
666*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
667*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
668*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
669*9880d681SAndroid Build Coastguard Worker;
670*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v16i8:
671*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
672*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
673*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
674*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,1,1]
675*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm2
676*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm1, %xmm1
677*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
678*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm3
679*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
680*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
681*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $4, %xmm0
682*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
683*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
684*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
685*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm2
686*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
687*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm3
688*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
689*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
690*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $2, %xmm0
691*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
692*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
693*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
694*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm2
695*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm1
696*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
697*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm2
698*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm0, %xmm0
699*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
700*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm2, %xmm0
701*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
702*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer
703*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i8> %a, %splat
704*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
705*9880d681SAndroid Build Coastguard Worker}
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Worker;
708*9880d681SAndroid Build Coastguard Worker; Constant Shifts
709*9880d681SAndroid Build Coastguard Worker;
710*9880d681SAndroid Build Coastguard Worker
711*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @constant_shift_v2i64(<2 x i64> %a) nounwind {
712*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v2i64:
713*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
714*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
715*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllq $7, %xmm1
716*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllq $1, %xmm0
717*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
718*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd %xmm1, %xmm0
719*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
720*9880d681SAndroid Build Coastguard Worker;
721*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v2i64:
722*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
723*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
724*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllq $7, %xmm1
725*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllq $1, %xmm0
726*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
727*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
728*9880d681SAndroid Build Coastguard Worker;
729*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v2i64:
730*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $7, %xmm0, %xmm1
732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $1, %xmm0, %xmm0
733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
735*9880d681SAndroid Build Coastguard Worker;
736*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v2i64:
737*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
738*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvq {{.*}}(%rip), %xmm0, %xmm0
739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
740*9880d681SAndroid Build Coastguard Worker;
741*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v2i64:
742*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
743*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq {{.*}}(%rip), %xmm0, %xmm0
744*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
745*9880d681SAndroid Build Coastguard Worker;
746*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v2i64:
747*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
748*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsllvq {{.*}}(%rip), %xmm0, %xmm0
749*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
750*9880d681SAndroid Build Coastguard Worker;
751*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v2i64:
752*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
753*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvq {{.*}}(%rip), %xmm0, %xmm0
754*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
755*9880d681SAndroid Build Coastguard Worker;
756*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v2i64:
757*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
758*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
759*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq $7, %xmm1
760*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq $1, %xmm0
761*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
762*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movapd %xmm1, %xmm0
763*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
764*9880d681SAndroid Build Coastguard Worker  %shift = shl <2 x i64> %a, <i64 1, i64 7>
765*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
766*9880d681SAndroid Build Coastguard Worker}
767*9880d681SAndroid Build Coastguard Worker
768*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @constant_shift_v4i32(<4 x i32> %a) nounwind {
769*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v4i32:
770*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
771*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [16,32,64,128]
772*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pmuludq %xmm1, %xmm0
774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pmuludq %xmm2, %xmm1
777*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
778*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
779*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
780*9880d681SAndroid Build Coastguard Worker;
781*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v4i32:
782*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
783*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmulld {{.*}}(%rip), %xmm0
784*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
785*9880d681SAndroid Build Coastguard Worker;
786*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v4i32:
787*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
788*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm0
789*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
790*9880d681SAndroid Build Coastguard Worker;
791*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v4i32:
792*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvd {{.*}}(%rip), %xmm0, %xmm0
794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
795*9880d681SAndroid Build Coastguard Worker;
796*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v4i32:
797*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
798*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld {{.*}}(%rip), %xmm0, %xmm0
799*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
800*9880d681SAndroid Build Coastguard Worker;
801*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v4i32:
802*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
803*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsllvd {{.*}}(%rip), %xmm0, %xmm0
804*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
805*9880d681SAndroid Build Coastguard Worker;
806*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v4i32:
807*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
808*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvd {{.*}}(%rip), %xmm0, %xmm0
809*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
810*9880d681SAndroid Build Coastguard Worker;
811*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v4i32:
812*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
813*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm1 = [16,32,64,128]
814*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
815*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pmuludq %xmm1, %xmm0
816*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
817*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
818*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pmuludq %xmm2, %xmm1
819*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
820*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
821*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
822*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i32> %a, <i32 4, i32 5, i32 6, i32 7>
823*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
824*9880d681SAndroid Build Coastguard Worker}
825*9880d681SAndroid Build Coastguard Worker
826*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @constant_shift_v8i16(<8 x i16> %a) nounwind {
827*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: constant_shift_v8i16:
828*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
829*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmullw {{.*}}(%rip), %xmm0
830*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
831*9880d681SAndroid Build Coastguard Worker;
832*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: constant_shift_v8i16:
833*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
834*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpmullw {{.*}}(%rip), %xmm0, %xmm0
835*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
836*9880d681SAndroid Build Coastguard Worker;
837*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v8i16:
838*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
839*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshlw {{.*}}(%rip), %xmm0, %xmm0
840*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
841*9880d681SAndroid Build Coastguard Worker;
842*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v8i16:
843*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
844*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7]
846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllvw %zmm1, %zmm0, %zmm0
847*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
848*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
849*9880d681SAndroid Build Coastguard Worker;
850*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v8i16:
851*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
852*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pmullw {{\.LCPI.*}}, %xmm0
853*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
854*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>
855*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
856*9880d681SAndroid Build Coastguard Worker}
857*9880d681SAndroid Build Coastguard Worker
858*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @constant_shift_v16i8(<16 x i8> %a) nounwind {
859*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v16i8:
860*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
861*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
862*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm2
863*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
864*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
865*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm3
866*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
867*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
868*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $4, %xmm0
869*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
870*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
871*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
872*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
873*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
874*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm3
875*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
876*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm4
877*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $2, %xmm0
878*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
879*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
880*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm0
881*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm2
882*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
883*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
884*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm2
885*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm0, %xmm0
886*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
887*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
888*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
889*9880d681SAndroid Build Coastguard Worker;
890*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v16i8:
891*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
892*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
893*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
894*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm0
895*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
896*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm2
897*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm2
898*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
899*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
900*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $2, %xmm2
901*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pand {{.*}}(%rip), %xmm2
902*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm0, %xmm0
903*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
904*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
905*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm2, %xmm2
906*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddb %xmm0, %xmm0
907*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
908*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
909*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
910*9880d681SAndroid Build Coastguard Worker;
911*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: constant_shift_v16i8:
912*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
913*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
914*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1
915*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $4, %xmm0, %xmm2
916*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
917*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
918*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $2, %xmm0, %xmm2
919*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
920*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
921*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
922*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
923*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
924*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
925*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
926*9880d681SAndroid Build Coastguard Worker;
927*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v16i8:
928*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
929*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshlb {{.*}}(%rip), %xmm0, %xmm0
930*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
931*9880d681SAndroid Build Coastguard Worker;
932*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v16i8:
933*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
934*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
935*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
936*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $4, %xmm0, %xmm2
937*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
938*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
939*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $2, %xmm0, %xmm2
940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm2, %xmm2
941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm0, %xmm0, %xmm2
944*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
945*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm0
946*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
947*9880d681SAndroid Build Coastguard Worker;
948*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v16i8:
949*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
950*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
951*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm2
952*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm1, %xmm1
953*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
954*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm3
955*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
956*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
957*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $4, %xmm0
958*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
959*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
960*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
961*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm2
962*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
963*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm3
964*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
965*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm4
966*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $2, %xmm0
967*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
968*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
969*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm0
970*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm2, %xmm2
971*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtb %xmm2, %xmm1
972*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
973*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm2
974*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddb %xmm0, %xmm0
975*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
976*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm2, %xmm0
977*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
978*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>
979*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
980*9880d681SAndroid Build Coastguard Worker}
981*9880d681SAndroid Build Coastguard Worker
982*9880d681SAndroid Build Coastguard Worker;
983*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts
984*9880d681SAndroid Build Coastguard Worker;
985*9880d681SAndroid Build Coastguard Worker
986*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatconstant_shift_v2i64(<2 x i64> %a) nounwind {
987*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v2i64:
988*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
989*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $7, %xmm0
990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
991*9880d681SAndroid Build Coastguard Worker;
992*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v2i64:
993*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
994*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllq $7, %xmm0, %xmm0
995*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
996*9880d681SAndroid Build Coastguard Worker;
997*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v2i64:
998*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
999*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsllq $7, %xmm0, %xmm0
1000*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1001*9880d681SAndroid Build Coastguard Worker;
1002*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v2i64:
1003*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1004*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $7, %xmm0, %xmm0
1005*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1006*9880d681SAndroid Build Coastguard Worker;
1007*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v2i64:
1008*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1009*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllq $7, %xmm0
1010*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1011*9880d681SAndroid Build Coastguard Worker  %shift = shl <2 x i64> %a, <i64 7, i64 7>
1012*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
1013*9880d681SAndroid Build Coastguard Worker}
1014*9880d681SAndroid Build Coastguard Worker
1015*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatconstant_shift_v4i32(<4 x i32> %a) nounwind {
1016*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v4i32:
1017*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1018*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $5, %xmm0
1019*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1020*9880d681SAndroid Build Coastguard Worker;
1021*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v4i32:
1022*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1023*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpslld $5, %xmm0, %xmm0
1024*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1025*9880d681SAndroid Build Coastguard Worker;
1026*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v4i32:
1027*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1028*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpslld $5, %xmm0, %xmm0
1029*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1030*9880d681SAndroid Build Coastguard Worker;
1031*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v4i32:
1032*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1033*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpslld $5, %xmm0, %xmm0
1034*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1035*9880d681SAndroid Build Coastguard Worker;
1036*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v4i32:
1037*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1038*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pslld $5, %xmm0
1039*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1040*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i32> %a, <i32 5, i32 5, i32 5, i32 5>
1041*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
1042*9880d681SAndroid Build Coastguard Worker}
1043*9880d681SAndroid Build Coastguard Worker
1044*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatconstant_shift_v8i16(<8 x i16> %a) nounwind {
1045*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v8i16:
1046*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1047*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllw $3, %xmm0
1048*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1049*9880d681SAndroid Build Coastguard Worker;
1050*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v8i16:
1051*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1052*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
1053*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1054*9880d681SAndroid Build Coastguard Worker;
1055*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v8i16:
1056*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1057*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsllw $3, %xmm0, %xmm0
1058*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1059*9880d681SAndroid Build Coastguard Worker;
1060*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v8i16:
1061*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1062*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm0
1063*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1064*9880d681SAndroid Build Coastguard Worker;
1065*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v8i16:
1066*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1067*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $3, %xmm0
1068*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1069*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1070*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
1071*9880d681SAndroid Build Coastguard Worker}
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatconstant_shift_v16i8(<16 x i8> %a) nounwind {
1074*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v16i8:
1075*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1076*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllw $3, %xmm0
1077*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
1078*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1079*9880d681SAndroid Build Coastguard Worker;
1080*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v16i8:
1081*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1082*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
1083*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1084*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1085*9880d681SAndroid Build Coastguard Worker;
1086*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v16i8:
1087*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1088*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshlb {{.*}}(%rip), %xmm0, %xmm0
1089*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1090*9880d681SAndroid Build Coastguard Worker;
1091*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v16i8:
1092*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1093*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $3, %xmm0, %xmm0
1094*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1095*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1096*9880d681SAndroid Build Coastguard Worker;
1097*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v16i8:
1098*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1099*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $3, %xmm0
1100*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
1101*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1102*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
1103*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
1104*9880d681SAndroid Build Coastguard Worker}
1105