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