xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shift-ashr-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;
11*9880d681SAndroid Build Coastguard Worker; Just one 32-bit run to make sure we do reasonable things for i64 shifts.
12*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
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker; Variable Shifts
16*9880d681SAndroid Build Coastguard Worker;
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @var_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
19*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v2i64:
20*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]
22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq %xmm3, %xmm4
25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq %xmm1, %xmm2
26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm2[0],xmm4[1]
27*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
28*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq %xmm3, %xmm2
29*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq %xmm1, %xmm0
30*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1]
31*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm4, %xmm2
32*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubq %xmm4, %xmm2
33*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm0
34*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
35*9880d681SAndroid Build Coastguard Worker;
36*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v2i64:
37*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
38*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
39*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm3
40*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq %xmm1, %xmm3
41*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
42*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq %xmm4, %xmm2
43*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
44*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
45*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq %xmm1, %xmm3
46*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq %xmm4, %xmm0
47*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]
48*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm0
49*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psubq %xmm2, %xmm0
50*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
51*9880d681SAndroid Build Coastguard Worker;
52*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v2i64:
53*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
54*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
55*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm3
56*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
57*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm4, %xmm2, %xmm2
58*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
59*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm1
60*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm4, %xmm0, %xmm0
61*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
62*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
63*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
64*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
65*9880d681SAndroid Build Coastguard Worker;
66*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v2i64:
67*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
68*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
69*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq %xmm1, %xmm2, %xmm3
70*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
71*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq %xmm1, %xmm0, %xmm0
72*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
73*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker;
75*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v2i64:
76*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
77*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
78*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
79*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
80*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
81*9880d681SAndroid Build Coastguard Worker;
82*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v2i64:
83*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
84*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
85*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvq %xmm1, %xmm2, %xmm3
86*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm2, %xmm0, %xmm0
87*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvq %xmm1, %xmm0, %xmm0
88*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
89*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
90*9880d681SAndroid Build Coastguard Worker;
91*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v2i64:
92*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
93*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,0,1]
94*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [0,2147483648,0,2147483648]
95*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm4
96*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm2, %xmm4
97*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movq {{.*#+}} xmm5 = xmm1[0],zero
98*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm5, %xmm3
99*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm4 = xmm3[0],xmm4[1]
100*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
101*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm2, %xmm1
102*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm5, %xmm0
103*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
104*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorpd %xmm4, %xmm1
105*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psubq %xmm4, %xmm1
106*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
107*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
108*9880d681SAndroid Build Coastguard Worker  %shift = ashr <2 x i64> %a, %b
109*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @var_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
113*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v4i32:
114*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
116*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
117*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm3
118*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad %xmm2, %xmm3
119*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
120*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $32, %xmm2
121*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
122*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad %xmm2, %xmm4
123*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1]
124*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,3,2,3]
125*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
126*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
127*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
128*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm5
129*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad %xmm4, %xmm5
130*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
131*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad %xmm1, %xmm0
132*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm5 = xmm0[0],xmm5[1]
133*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3]
134*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
135*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
136*9880d681SAndroid Build Coastguard Worker;
137*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v4i32:
138*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
139*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
140*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
141*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
142*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad %xmm2, %xmm3
143*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
144*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq $32, %xmm2
145*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm4
146*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad %xmm2, %xmm4
147*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm3[4,5,6,7]
148*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
149*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm3 = xmm1[0],zero,xmm1[1],zero
150*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]
151*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
152*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad %xmm1, %xmm2
153*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad %xmm3, %xmm0
154*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
155*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3],xmm0[4,5],xmm4[6,7]
156*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker;
158*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v4i32:
159*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
160*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
161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad %xmm2, %xmm0, %xmm2
162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm3
163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad %xmm3, %xmm0, %xmm3
164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]
167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad %xmm3, %xmm0, %xmm3
168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]
171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
173*9880d681SAndroid Build Coastguard Worker;
174*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v4i32:
175*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd %xmm1, %xmm0, %xmm0
177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
178*9880d681SAndroid Build Coastguard Worker;
179*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v4i32:
180*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
181*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
182*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubd %xmm1, %xmm2, %xmm1
183*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshad %xmm1, %xmm0, %xmm0
184*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
185*9880d681SAndroid Build Coastguard Worker;
186*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v4i32:
187*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
188*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsravd %xmm1, %xmm0, %xmm0
189*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
190*9880d681SAndroid Build Coastguard Worker;
191*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v4i32:
192*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsravd %xmm1, %xmm0, %xmm0
194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
195*9880d681SAndroid Build Coastguard Worker;
196*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v4i32:
197*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
198*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
199*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
200*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm3
201*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad %xmm2, %xmm3
202*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
203*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $32, %xmm2
204*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm4
205*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad %xmm2, %xmm4
206*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1]
207*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,3,2,3]
208*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
209*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm4
210*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
211*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm5
212*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad %xmm4, %xmm5
213*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
214*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad %xmm1, %xmm0
215*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm5 = xmm0[0],xmm5[1]
216*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3]
217*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
218*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
219*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i32> %a, %b
220*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @var_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
224*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v8i16:
225*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $12, %xmm1
227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $8, %xmm0
232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm0
240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
243*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
244*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
245*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
246*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
247*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm0
248*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
249*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
250*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
251*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm1
252*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
253*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm2
254*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm0
255*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
256*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
257*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
258*9880d681SAndroid Build Coastguard Worker;
259*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v8i16:
260*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
261*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
262*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
263*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $12, %xmm0
264*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $4, %xmm1
265*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    por %xmm0, %xmm1
266*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
267*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
268*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
269*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $8, %xmm4
270*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
271*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
272*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
273*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm1
274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
276*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
277*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm1
278*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
279*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
280*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
281*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm1
282*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm1
283*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm3, %xmm3
284*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
285*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm2
286*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
287*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
288*9880d681SAndroid Build Coastguard Worker;
289*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v8i16:
290*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $12, %xmm1, %xmm2
292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm2, %xmm1, %xmm1
294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm2
295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $8, %xmm0, %xmm3
296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm1
298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
306*9880d681SAndroid Build Coastguard Worker;
307*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v8i16:
308*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
309*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
310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm0
311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
312*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
313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
317*9880d681SAndroid Build Coastguard Worker;
318*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v8i16:
319*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
320*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
321*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubw %xmm1, %xmm2, %xmm1
322*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
323*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
324*9880d681SAndroid Build Coastguard Worker;
325*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v8i16:
326*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
327*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM1<def> %XMM1<kill> %ZMM1<def>
328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
332*9880d681SAndroid Build Coastguard Worker;
333*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v8i16:
334*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
335*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $12, %xmm1
336*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
337*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
338*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
339*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
340*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $8, %xmm0
341*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
342*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
343*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
344*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
345*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
346*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
347*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
348*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm0
349*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
350*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
351*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
352*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
353*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm2
354*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
355*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
356*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm0
357*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
358*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
359*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
360*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $15, %xmm1
361*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
362*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm2
363*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm0
364*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm1, %xmm0
365*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm2, %xmm0
366*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
367*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a, %b
368*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
369*9880d681SAndroid Build Coastguard Worker}
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @var_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
372*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v16i8:
373*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]
375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm1
376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15]
377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm6
382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm2
383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm2
384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm2
385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm6
390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm2
391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm2
392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm2
393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm4
397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm4
398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm2
399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm2
400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm2
401*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm2
402*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
403*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]
404*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
405*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm1, %xmm4
406*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
407*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
408*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm0
409*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
410*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
411*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
412*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
413*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm1, %xmm4
414*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
415*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
416*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm0
417*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
418*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
419*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm1
420*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm1, %xmm3
421*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm1
422*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm1
423*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm0
424*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm3, %xmm0
425*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
426*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm0
427*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm2, %xmm0
428*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
429*9880d681SAndroid Build Coastguard Worker;
430*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v16i8:
431*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
432*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
433*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm1
434*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
435*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
436*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
437*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm4
438*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
439*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
440*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm4
441*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
442*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
443*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
444*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm4
445*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
446*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
447*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm3
448*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
449*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
450*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
451*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm2
452*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
453*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
454*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm2
455*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
456*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
457*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
458*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm2
459*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
460*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
461*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm1
462*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    packuswb %xmm3, %xmm1
463*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
464*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
465*9880d681SAndroid Build Coastguard Worker;
466*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shift_v16i8:
467*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
468*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1
469*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
470*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
471*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $4, %xmm3, %xmm4
472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $2, %xmm3, %xmm4
474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
476*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $1, %xmm3, %xmm4
477*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
478*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
479*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm2, %xmm2
480*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
481*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
482*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $4, %xmm0, %xmm3
483*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
484*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $2, %xmm0, %xmm3
485*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
486*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
487*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $1, %xmm0, %xmm3
488*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
489*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
490*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
491*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
492*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
493*9880d681SAndroid Build Coastguard Worker;
494*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v16i8:
495*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
496*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
497*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
498*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshab %xmm1, %xmm0, %xmm0
499*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
500*9880d681SAndroid Build Coastguard Worker;
501*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v16i8:
502*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm3, %xmm4
507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm3, %xmm4
509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm3, %xmm4
512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm2, %xmm2
515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm0, %xmm3
518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm0, %xmm3
520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm0, %xmm3
523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
524*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
525*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm0
526*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
527*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker;
529*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v16i8:
530*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
531*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]
532*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm1
533*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15]
534*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm3, %xmm3
535*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
536*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
537*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
538*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm2, %xmm6
539*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm2
540*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm2
541*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm2
542*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
543*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
544*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
545*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
546*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm2, %xmm6
547*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm2
548*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm2
549*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm2
550*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
551*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
552*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
553*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm4
554*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm2, %xmm4
555*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm2
556*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm2
557*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm2
558*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm2
559*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
560*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]
561*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
562*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm1, %xmm4
563*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
564*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
565*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm0
566*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
567*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
568*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
569*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
570*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm1, %xmm4
571*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
572*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
573*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm0
574*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
575*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
576*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm1, %xmm1
577*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm1, %xmm3
578*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm3, %xmm1
579*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm1
580*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm0
581*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm3, %xmm0
582*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm1, %xmm0
583*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm0
584*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    packuswb %xmm2, %xmm0
585*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
586*9880d681SAndroid Build Coastguard Worker  %shift = ashr <16 x i8> %a, %b
587*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
588*9880d681SAndroid Build Coastguard Worker}
589*9880d681SAndroid Build Coastguard Worker
590*9880d681SAndroid Build Coastguard Worker;
591*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts
592*9880d681SAndroid Build Coastguard Worker;
593*9880d681SAndroid Build Coastguard Worker
594*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatvar_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
595*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatvar_shift_v2i64:
596*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
597*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
598*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq %xmm1, %xmm2
599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq %xmm1, %xmm0
600*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm2, %xmm0
601*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm2, %xmm0
602*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
603*9880d681SAndroid Build Coastguard Worker;
604*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v2i64:
605*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
606*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
607*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
608*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
609*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
610*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
611*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
612*9880d681SAndroid Build Coastguard Worker;
613*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v2i64:
614*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
615*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]
616*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
617*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
618*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
619*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
620*9880d681SAndroid Build Coastguard Worker;
621*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v2i64:
622*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
623*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpbroadcastq %xmm1, %xmm1
624*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
625*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
626*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
627*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
628*9880d681SAndroid Build Coastguard Worker;
629*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v2i64:
630*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
631*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
632*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
633*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
634*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm2, %xmm0, %xmm0
635*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
636*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
637*9880d681SAndroid Build Coastguard Worker;
638*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v2i64:
639*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
640*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movq {{.*#+}} xmm1 = xmm1[0],zero
641*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,2147483648,0,2147483648]
642*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm1, %xmm2
643*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq %xmm1, %xmm0
644*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm0
645*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psubq %xmm2, %xmm0
646*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
647*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <2 x i64> %b, <2 x i64> undef, <2 x i32> zeroinitializer
648*9880d681SAndroid Build Coastguard Worker  %shift = ashr <2 x i64> %a, %splat
649*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
650*9880d681SAndroid Build Coastguard Worker}
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatvar_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
653*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v4i32:
654*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
655*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorps %xmm2, %xmm2
656*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
657*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad %xmm2, %xmm0
658*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
659*9880d681SAndroid Build Coastguard Worker;
660*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v4i32:
661*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
662*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
663*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
664*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad %xmm2, %xmm0
665*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker;
667*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v4i32:
668*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
669*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
670*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
671*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
672*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
673*9880d681SAndroid Build Coastguard Worker;
674*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v4i32:
675*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
676*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
677*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
678*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
679*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
680*9880d681SAndroid Build Coastguard Worker;
681*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v4i32:
682*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps %xmm2, %xmm2, %xmm2
684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3]
685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
687*9880d681SAndroid Build Coastguard Worker;
688*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v4i32:
689*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
690*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorps %xmm2, %xmm2
691*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
692*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad %xmm2, %xmm0
693*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
694*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> zeroinitializer
695*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i32> %a, %splat
696*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
697*9880d681SAndroid Build Coastguard Worker}
698*9880d681SAndroid Build Coastguard Worker
699*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatvar_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
700*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v8i16:
701*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
702*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %xmm1, %eax
703*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movzwl %ax, %eax
704*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
705*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw %xmm1, %xmm0
706*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
707*9880d681SAndroid Build Coastguard Worker;
708*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v8i16:
709*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
710*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
711*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7]
712*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw %xmm2, %xmm0
713*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
714*9880d681SAndroid Build Coastguard Worker;
715*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v8i16:
716*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
717*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
718*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
719*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
720*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
721*9880d681SAndroid Build Coastguard Worker;
722*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v8i16:
723*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
724*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm2, %xmm2, %xmm2
725*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
726*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
727*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
728*9880d681SAndroid Build Coastguard Worker;
729*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v8i16:
730*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
731*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
732*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7]
733*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
734*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
735*9880d681SAndroid Build Coastguard Worker;
736*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v8i16:
737*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
738*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %xmm1, %eax
739*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movzwl %ax, %eax
740*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movd %eax, %xmm1
741*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw %xmm1, %xmm0
742*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
743*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <8 x i16> %b, <8 x i16> undef, <8 x i32> zeroinitializer
744*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a, %splat
745*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
746*9880d681SAndroid Build Coastguard Worker}
747*9880d681SAndroid Build Coastguard Worker
748*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatvar_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
749*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v16i8:
750*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
751*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]
752*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
753*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,1,1]
754*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
755*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm3
756*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]
757*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm2
758*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
759*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
760*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
761*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm6
762*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm1
763*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
764*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
765*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
766*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
767*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
768*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
769*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm6
770*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm1
771*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
772*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm4
777*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm4
778*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm1
779*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
780*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
781*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm1
782*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
783*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
784*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
785*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
786*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
787*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
788*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm0
789*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
790*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
791*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm3, %xmm3
792*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
793*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
794*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
795*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
796*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm0
797*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
798*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
799*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm3, %xmm3
800*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
801*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
802*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
803*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm0
804*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
805*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
806*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm0
807*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm1, %xmm0
808*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
809*9880d681SAndroid Build Coastguard Worker;
810*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v16i8:
811*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
812*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
813*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm0, %xmm0
814*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pshufb %xmm0, %xmm1
815*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm1
816*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
817*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
818*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
819*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm4
820*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
821*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
822*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm4
823*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
824*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
825*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm4
826*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm4
827*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
828*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm3
829*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm3
830*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
831*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
832*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
833*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm2
834*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
835*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
836*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm2
837*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
838*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
839*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
840*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm2
841*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
842*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm2, %xmm1
843*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm1
844*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    packuswb %xmm3, %xmm1
845*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
846*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
847*9880d681SAndroid Build Coastguard Worker;
848*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v16i8:
849*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
850*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
851*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
852*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
853*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $4, %xmm3, %xmm4
856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $2, %xmm3, %xmm4
858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $1, %xmm3, %xmm4
861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm3
867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm3
869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm3
872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
877*9880d681SAndroid Build Coastguard Worker;
878*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v16i8:
879*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
880*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastb %xmm1, %xmm1
881*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $5, %xmm1, %xmm1
882*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
883*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
884*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $4, %xmm3, %xmm4
885*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
886*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $2, %xmm3, %xmm4
887*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
888*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
889*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $1, %xmm3, %xmm4
890*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $8, %xmm2, %xmm2
893*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
894*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
895*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $4, %xmm0, %xmm3
896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $2, %xmm0, %xmm3
898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $1, %xmm0, %xmm3
901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
906*9880d681SAndroid Build Coastguard Worker;
907*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v16i8:
908*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
909*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
910*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
911*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
912*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshab %xmm1, %xmm0, %xmm0
913*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
914*9880d681SAndroid Build Coastguard Worker;
915*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v16i8:
916*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
917*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1
918*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
919*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
920*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshab %xmm1, %xmm0, %xmm0
921*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
922*9880d681SAndroid Build Coastguard Worker;
923*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v16i8:
924*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
925*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpbroadcastb %xmm1, %xmm1
926*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
927*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
928*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
929*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm3, %xmm4
930*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
931*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm3, %xmm4
932*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
933*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
934*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm3, %xmm4
935*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
936*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
937*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm2, %xmm2
938*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
939*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm0, %xmm3
941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm0, %xmm3
943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
944*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
945*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm0, %xmm3
946*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
947*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
948*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm0
949*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
950*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
951*9880d681SAndroid Build Coastguard Worker;
952*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v16i8:
953*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
954*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]
955*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
956*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,1,1]
957*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
958*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm3
959*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]
960*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
961*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
962*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
963*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
964*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm6
965*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm1
966*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
967*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm1
968*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
969*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
970*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
971*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
972*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm6
973*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm1
974*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
975*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm1
976*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
977*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
978*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
979*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm4
980*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm4
981*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm1
982*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
983*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm1
984*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm1
985*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
986*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
987*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
988*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm4
989*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
990*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
991*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm0
992*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
993*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
994*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm3, %xmm3
995*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
996*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm4
997*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
998*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
999*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm0
1000*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
1001*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
1002*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm3, %xmm3
1003*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm2
1004*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
1005*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
1006*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm0
1007*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
1008*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
1009*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm0
1010*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    packuswb %xmm1, %xmm0
1011*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1012*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer
1013*9880d681SAndroid Build Coastguard Worker  %shift = ashr <16 x i8> %a, %splat
1014*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
1015*9880d681SAndroid Build Coastguard Worker}
1016*9880d681SAndroid Build Coastguard Worker
1017*9880d681SAndroid Build Coastguard Worker;
1018*9880d681SAndroid Build Coastguard Worker; Constant Shifts
1019*9880d681SAndroid Build Coastguard Worker;
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @constant_shift_v2i64(<2 x i64> %a) nounwind {
1022*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v2i64:
1023*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1024*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
1025*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $7, %xmm1
1026*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $1, %xmm0
1027*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1028*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movapd {{.*#+}} xmm0 = [4611686018427387904,72057594037927936]
1029*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm0, %xmm1
1030*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psubq %xmm0, %xmm1
1031*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm0
1032*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1033*9880d681SAndroid Build Coastguard Worker;
1034*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v2i64:
1035*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1036*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1037*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq $7, %xmm1
1038*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq $1, %xmm0
1039*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1040*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936]
1041*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm0
1042*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psubq %xmm1, %xmm0
1043*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1044*9880d681SAndroid Build Coastguard Worker;
1045*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v2i64:
1046*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm1
1048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm0
1049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936]
1051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm0, %xmm0
1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1054*9880d681SAndroid Build Coastguard Worker;
1055*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v2i64:
1056*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq {{.*}}(%rip), %xmm0, %xmm0
1058*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936]
1059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %xmm1, %xmm0, %xmm0
1061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1062*9880d681SAndroid Build Coastguard Worker;
1063*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v2i64:
1064*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1065*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1066*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm1
1067*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
1068*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1069*9880d681SAndroid Build Coastguard Worker;
1070*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v2i64:
1071*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1072*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvq {{.*}}(%rip), %xmm0, %xmm0
1073*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936]
1074*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1075*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %xmm1, %xmm0, %xmm0
1076*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1077*9880d681SAndroid Build Coastguard Worker;
1078*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v2i64:
1079*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1080*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648]
1081*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm2
1082*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $7, %xmm2
1083*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $1, %xmm1
1084*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
1085*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1086*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $7, %xmm1
1087*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $1, %xmm0
1088*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1089*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    xorpd %xmm2, %xmm1
1090*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psubq %xmm2, %xmm1
1091*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm1, %xmm0
1092*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1093*9880d681SAndroid Build Coastguard Worker  %shift = ashr <2 x i64> %a, <i64 1, i64 7>
1094*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
1095*9880d681SAndroid Build Coastguard Worker}
1096*9880d681SAndroid Build Coastguard Worker
1097*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @constant_shift_v4i32(<4 x i32> %a) nounwind {
1098*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v4i32:
1099*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1100*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
1101*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $7, %xmm1
1102*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1103*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $5, %xmm2
1104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
1105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
1106*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
1107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $6, %xmm2
1108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $4, %xmm0
1109*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1]
1110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
1111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1112*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1113*9880d681SAndroid Build Coastguard Worker;
1114*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v4i32:
1115*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1116*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1117*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad $7, %xmm1
1118*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm2
1119*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad $5, %xmm2
1120*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7]
1121*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1122*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad $6, %xmm1
1123*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad $4, %xmm0
1124*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1125*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
1126*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1127*9880d681SAndroid Build Coastguard Worker;
1128*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v4i32:
1129*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $7, %xmm0, %xmm1
1131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $5, %xmm0, %xmm2
1132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
1133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $6, %xmm0, %xmm2
1134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $4, %xmm0, %xmm0
1135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
1136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
1137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1138*9880d681SAndroid Build Coastguard Worker;
1139*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v4i32:
1140*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd {{.*}}(%rip), %xmm0, %xmm0
1142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1143*9880d681SAndroid Build Coastguard Worker;
1144*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v4i32:
1145*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
1146*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshad {{.*}}(%rip), %xmm0, %xmm0
1147*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
1148*9880d681SAndroid Build Coastguard Worker;
1149*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v4i32:
1150*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
1151*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsravd {{.*}}(%rip), %xmm0, %xmm0
1152*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
1153*9880d681SAndroid Build Coastguard Worker;
1154*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v4i32:
1155*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1156*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsravd {{.*}}(%rip), %xmm0, %xmm0
1157*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1158*9880d681SAndroid Build Coastguard Worker;
1159*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v4i32:
1160*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1161*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1162*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $7, %xmm1
1163*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm2
1164*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $5, %xmm2
1165*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
1166*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
1167*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm2
1168*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $6, %xmm2
1169*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $4, %xmm0
1170*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1]
1171*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
1172*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1173*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1174*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i32> %a, <i32 4, i32 5, i32 6, i32 7>
1175*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
1176*9880d681SAndroid Build Coastguard Worker}
1177*9880d681SAndroid Build Coastguard Worker
1178*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @constant_shift_v8i16(<8 x i16> %a) nounwind {
1179*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v8i16:
1180*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
1182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm1
1183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1184*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
1185*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm1
1186*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3]
1187*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
1188*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [65535,0,65535,0,65535,0,65535,0]
1189*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm1
1190*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm0, %xmm1
1191*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm2
1192*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm0
1193*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
1194*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1195*9880d681SAndroid Build Coastguard Worker;
1196*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v8i16:
1197*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1198*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1199*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm1
1200*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1201*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm2
1202*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm2
1203*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
1204*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm0
1205*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm0
1206*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1],xmm2[2],xmm0[3],xmm2[4],xmm0[5],xmm2[6],xmm0[7]
1207*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1208*9880d681SAndroid Build Coastguard Worker;
1209*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v8i16:
1210*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm1
1212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
1214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
1215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
1216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]
1217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1218*9880d681SAndroid Build Coastguard Worker;
1219*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v8i16:
1220*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm0
1222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd {{.*}}(%rip), %ymm0, %ymm0
1223*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
1224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1228*9880d681SAndroid Build Coastguard Worker;
1229*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v8i16:
1230*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1231*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1232*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubw {{.*}}(%rip), %xmm1, %xmm1
1233*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
1234*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1235*9880d681SAndroid Build Coastguard Worker;
1236*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v8i16:
1237*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1238*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def>
1239*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7]
1240*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
1241*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
1242*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1243*9880d681SAndroid Build Coastguard Worker;
1244*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v8i16:
1245*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1246*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1247*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm1
1248*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1249*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
1250*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm1
1251*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3]
1252*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
1253*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm0 = [65535,0,65535,0,65535,0,65535,0]
1254*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm1
1255*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm0, %xmm1
1256*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm2
1257*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm2, %xmm0
1258*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm1, %xmm0
1259*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1260*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>
1261*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
1262*9880d681SAndroid Build Coastguard Worker}
1263*9880d681SAndroid Build Coastguard Worker
1264*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @constant_shift_v16i8(<16 x i8> %a) nounwind {
1265*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v16i8:
1266*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1267*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
1268*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psllw $5, %xmm3
1270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]
1271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm2
1272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
1273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
1274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
1275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm6
1276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm1
1277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
1278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
1279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
1280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
1281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
1282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm6
1283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm6
1284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm1
1285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
1286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm6, %xmm1
1287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm4, %xmm4
1288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm5, %xmm5
1289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm4, %xmm5
1290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm5, %xmm4
1291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm1, %xmm4
1292*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm1
1293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
1294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm4, %xmm1
1295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm1
1296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
1299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
1300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
1301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
1302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $4, %xmm0
1303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
1304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
1305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm3, %xmm3
1306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm4
1307*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
1308*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm4, %xmm5
1309*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm5
1310*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $2, %xmm0
1311*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm4, %xmm0
1312*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm0
1313*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm3, %xmm3
1314*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
1315*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm3
1316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm0, %xmm3
1317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $1, %xmm0
1318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
1319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm3, %xmm0
1320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlw $8, %xmm0
1321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    packuswb %xmm1, %xmm0
1322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1323*9880d681SAndroid Build Coastguard Worker;
1324*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v16i8:
1325*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1327*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psllw $5, %xmm3
1329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
1330*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
1331*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
1332*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm4
1333*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
1334*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
1335*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm4
1336*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
1337*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
1338*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm2, %xmm4
1339*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm4
1340*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
1341*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm4, %xmm2
1342*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm2
1343*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1344*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1345*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
1346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $4, %xmm3
1347*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm1
1348*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
1349*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $2, %xmm3
1350*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
1351*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm1
1352*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm3
1353*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psraw $1, %xmm3
1354*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    paddw %xmm0, %xmm0
1355*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm3, %xmm1
1356*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlw $8, %xmm1
1357*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    packuswb %xmm2, %xmm1
1358*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm1, %xmm0
1359*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1360*9880d681SAndroid Build Coastguard Worker;
1361*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: constant_shift_v16i8:
1362*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1363*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1364*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsllw $5, %xmm1, %xmm1
1365*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
1366*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1367*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $4, %xmm3, %xmm4
1368*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
1369*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $2, %xmm3, %xmm4
1370*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
1371*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
1372*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $1, %xmm3, %xmm4
1373*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
1374*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
1375*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm2, %xmm2
1376*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1377*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1378*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $4, %xmm0, %xmm3
1379*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1380*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $2, %xmm0, %xmm3
1381*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
1382*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1383*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $1, %xmm0, %xmm3
1384*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
1385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
1387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
1388*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1389*9880d681SAndroid Build Coastguard Worker;
1390*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v16i8:
1391*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1392*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1393*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubb {{.*}}(%rip), %xmm1, %xmm1
1394*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshab %xmm1, %xmm0, %xmm0
1395*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1396*9880d681SAndroid Build Coastguard Worker;
1397*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v16i8:
1398*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1399*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1400*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %xmm1, %xmm1
1401*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
1402*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1403*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm3, %xmm4
1404*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
1405*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm3, %xmm4
1406*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
1407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm3
1408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm3, %xmm4
1409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
1410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm2, %xmm4, %xmm3, %xmm2
1411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm2, %xmm2
1412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $4, %xmm0, %xmm3
1415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $2, %xmm0, %xmm3
1417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
1418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $1, %xmm0, %xmm3
1420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
1421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
1422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm0
1423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
1424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1425*9880d681SAndroid Build Coastguard Worker;
1426*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v16i8:
1427*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1428*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
1429*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1430*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psllw $5, %xmm3
1431*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15]
1432*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm2, %xmm2
1433*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
1434*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
1435*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
1436*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm6
1437*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm1
1438*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
1439*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm1
1440*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
1441*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
1442*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
1443*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm6
1444*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm6
1445*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm1
1446*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
1447*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm6, %xmm1
1448*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm4, %xmm4
1449*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm5, %xmm5
1450*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm4, %xmm5
1451*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm5, %xmm4
1452*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm1, %xmm4
1453*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm1
1454*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm5, %xmm1
1455*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm4, %xmm1
1456*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm1
1457*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1458*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1459*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
1460*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm4
1461*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
1462*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
1463*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $4, %xmm0
1464*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
1465*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
1466*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm3, %xmm3
1467*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm4, %xmm4
1468*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm4
1469*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm4, %xmm5
1470*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm5
1471*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $2, %xmm0
1472*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm4, %xmm0
1473*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm5, %xmm0
1474*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    paddw %xmm3, %xmm3
1475*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pcmpgtw %xmm3, %xmm2
1476*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm2, %xmm3
1477*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pandn %xmm0, %xmm3
1478*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $1, %xmm0
1479*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand %xmm2, %xmm0
1480*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    por %xmm3, %xmm0
1481*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $8, %xmm0
1482*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    packuswb %xmm1, %xmm0
1483*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1484*9880d681SAndroid Build Coastguard Worker  %shift = ashr <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>
1485*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
1486*9880d681SAndroid Build Coastguard Worker}
1487*9880d681SAndroid Build Coastguard Worker
1488*9880d681SAndroid Build Coastguard Worker;
1489*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts
1490*9880d681SAndroid Build Coastguard Worker;
1491*9880d681SAndroid Build Coastguard Worker
1492*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatconstant_shift_v2i64(<2 x i64> %a) nounwind {
1493*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatconstant_shift_v2i64:
1494*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
1495*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
1496*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $7, %xmm1
1497*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
1498*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrlq $7, %xmm0
1499*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1500*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1501*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
1502*9880d681SAndroid Build Coastguard Worker;
1503*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatconstant_shift_v2i64:
1504*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
1505*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm1
1506*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrad $7, %xmm1
1507*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    psrlq $7, %xmm0
1508*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
1509*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
1510*9880d681SAndroid Build Coastguard Worker;
1511*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v2i64:
1512*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1513*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $7, %xmm0, %xmm1
1514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm0
1515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
1516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1517*9880d681SAndroid Build Coastguard Worker;
1518*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v2i64:
1519*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1520*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $7, %xmm0, %xmm1
1521*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $7, %xmm0, %xmm0
1522*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
1523*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1524*9880d681SAndroid Build Coastguard Worker;
1525*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v2i64:
1526*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1527*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1528*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm1
1529*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
1530*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1531*9880d681SAndroid Build Coastguard Worker;
1532*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v2i64:
1533*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1534*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrad $7, %xmm0, %xmm1
1535*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $7, %xmm0, %xmm0
1536*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
1537*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1538*9880d681SAndroid Build Coastguard Worker;
1539*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v2i64:
1540*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1541*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa %xmm0, %xmm1
1542*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $7, %xmm1
1543*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
1544*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlq $7, %xmm0
1545*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1546*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1547*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1548*9880d681SAndroid Build Coastguard Worker  %shift = ashr <2 x i64> %a, <i64 7, i64 7>
1549*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
1550*9880d681SAndroid Build Coastguard Worker}
1551*9880d681SAndroid Build Coastguard Worker
1552*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatconstant_shift_v4i32(<4 x i32> %a) nounwind {
1553*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v4i32:
1554*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1555*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $5, %xmm0
1556*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1557*9880d681SAndroid Build Coastguard Worker;
1558*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v4i32:
1559*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1560*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrad $5, %xmm0, %xmm0
1561*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1562*9880d681SAndroid Build Coastguard Worker;
1563*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v4i32:
1564*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1565*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsrad $5, %xmm0, %xmm0
1566*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1567*9880d681SAndroid Build Coastguard Worker;
1568*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v4i32:
1569*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1570*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrad $5, %xmm0, %xmm0
1571*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1572*9880d681SAndroid Build Coastguard Worker;
1573*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v4i32:
1574*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1575*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrad $5, %xmm0
1576*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1577*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i32> %a, <i32 5, i32 5, i32 5, i32 5>
1578*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
1579*9880d681SAndroid Build Coastguard Worker}
1580*9880d681SAndroid Build Coastguard Worker
1581*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatconstant_shift_v8i16(<8 x i16> %a) nounwind {
1582*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v8i16:
1583*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psraw $3, %xmm0
1585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1586*9880d681SAndroid Build Coastguard Worker;
1587*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v8i16:
1588*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1589*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsraw $3, %xmm0, %xmm0
1590*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1591*9880d681SAndroid Build Coastguard Worker;
1592*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v8i16:
1593*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1594*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsraw $3, %xmm0, %xmm0
1595*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1596*9880d681SAndroid Build Coastguard Worker;
1597*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v8i16:
1598*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsraw $3, %xmm0, %xmm0
1600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1601*9880d681SAndroid Build Coastguard Worker;
1602*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v8i16:
1603*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1604*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psraw $3, %xmm0
1605*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1606*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1607*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
1608*9880d681SAndroid Build Coastguard Worker}
1609*9880d681SAndroid Build Coastguard Worker
1610*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatconstant_shift_v16i8(<16 x i8> %a) nounwind {
1611*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v16i8:
1612*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlw $3, %xmm0
1614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
1615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm1, %xmm0
1617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubb %xmm1, %xmm0
1618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1619*9880d681SAndroid Build Coastguard Worker;
1620*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v16i8:
1621*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
1622*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
1623*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1624*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1625*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1626*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
1627*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
1628*9880d681SAndroid Build Coastguard Worker;
1629*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v16i8:
1630*9880d681SAndroid Build Coastguard Worker; XOP:       # BB#0:
1631*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1632*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpsubb {{.*}}(%rip), %xmm1, %xmm1
1633*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    vpshab %xmm1, %xmm0, %xmm0
1634*9880d681SAndroid Build Coastguard Worker; XOP-NEXT:    retq
1635*9880d681SAndroid Build Coastguard Worker;
1636*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v16i8:
1637*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
1638*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $3, %xmm0, %xmm0
1639*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1640*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1641*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1642*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
1643*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1644*9880d681SAndroid Build Coastguard Worker;
1645*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v16i8:
1646*9880d681SAndroid Build Coastguard Worker; X32-SSE:       # BB#0:
1647*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psrlw $3, %xmm0
1648*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pand {{\.LCPI.*}}, %xmm0
1649*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    movdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
1650*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    pxor %xmm1, %xmm0
1651*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    psubb %xmm1, %xmm0
1652*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT:    retl
1653*9880d681SAndroid Build Coastguard Worker  %shift = ashr <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>
1654*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shift
1655*9880d681SAndroid Build Coastguard Worker}
1656