xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shift-lshr-256.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=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
3*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
4*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
5*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
6*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
7*9880d681SAndroid Build Coastguard Worker;
8*9880d681SAndroid Build Coastguard Worker; Variable Shifts
9*9880d681SAndroid Build Coastguard Worker;
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @var_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
12*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v4i64:
13*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
14*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
15*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
16*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm4
17*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
18*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm2
19*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
20*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm3
21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
23*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]
24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v4i64:
28*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
29*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
30*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
31*9880d681SAndroid Build Coastguard Worker;
32*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v4i64:
33*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
34*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
35*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
36*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubq %xmm2, %xmm3, %xmm2
37*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
38*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm4, %xmm2
39*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubq %xmm1, %xmm3, %xmm1
40*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
41*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
42*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
43*9880d681SAndroid Build Coastguard Worker;
44*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v4i64:
45*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
46*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
47*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
48*9880d681SAndroid Build Coastguard Worker;
49*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v4i64:
50*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
51*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
52*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
53*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a, %b
54*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @var_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
58*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v8i32:
59*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
60*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
61*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
62*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
63*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm4, %xmm2, %xmm4
64*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm5
65*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm5, %xmm2, %xmm5
66*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7]
67*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
68*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm3[2],xmm5[2],xmm3[3],xmm5[3]
69*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm6, %xmm2, %xmm6
70*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero
71*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm3, %xmm2, %xmm2
72*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7]
73*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]
74*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
75*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm3, %xmm0, %xmm3
76*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm4
77*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm4, %xmm0, %xmm4
78*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]
79*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm5[2],xmm1[3],xmm5[3]
80*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm4, %xmm0, %xmm4
81*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
82*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm1, %xmm0, %xmm0
83*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]
84*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]
85*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
86*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
87*9880d681SAndroid Build Coastguard Worker;
88*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v8i32:
89*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
90*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
91*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
92*9880d681SAndroid Build Coastguard Worker;
93*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v8i32:
94*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
95*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
96*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
97*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubd %xmm2, %xmm3, %xmm2
98*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
99*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld %xmm2, %xmm4, %xmm2
100*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubd %xmm1, %xmm3, %xmm1
101*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld %xmm1, %xmm0, %xmm0
102*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
103*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
104*9880d681SAndroid Build Coastguard Worker;
105*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v8i32:
106*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
107*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
108*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
109*9880d681SAndroid Build Coastguard Worker;
110*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v8i32:
111*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
112*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
113*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
114*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a, %b
115*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @var_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
119*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v16i16:
120*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $12, %xmm2, %xmm3
123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm2, %xmm2
124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm3
126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm5
128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm4
130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm2, %xmm4
132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm2, %xmm4
135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $12, %xmm1, %xmm3
138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpor %xmm3, %xmm1, %xmm1
140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm3
141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm4
142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm1
144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm1
146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
148*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm1
149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
153*9880d681SAndroid Build Coastguard Worker;
154*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v16i16:
155*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm2, %ymm2
157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]
158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]
159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm3, %ymm4, %ymm3
160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11]
162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11]
163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
166*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
167*9880d681SAndroid Build Coastguard Worker;
168*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v16i16:
169*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
170*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
171*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
172*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubw %xmm2, %xmm3, %xmm2
173*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
174*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm4, %xmm2
175*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubw %xmm1, %xmm3, %xmm1
176*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
177*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
178*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
179*9880d681SAndroid Build Coastguard Worker;
180*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v16i16:
181*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
182*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
183*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
184*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubw %xmm2, %xmm3, %xmm2
185*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
186*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm4, %xmm2
187*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubw %xmm1, %xmm3, %xmm1
188*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
189*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
190*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
191*9880d681SAndroid Build Coastguard Worker;
192*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v16i16:
193*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def>
195*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def>
196*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0
197*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
198*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
199*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a, %b
200*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @var_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
204*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v32i8:
205*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
207*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm3
208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm5, %xmm5
212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm2, %xmm3
214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3
216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5
217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm2, %xmm3
219*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
220*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
221*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm5, %xmm5
222*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
223*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm3
224*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
225*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm3
228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3
229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm3
232*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
233*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm1
234*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
235*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
236*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker;
238*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v32i8:
239*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm2
242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
243*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
244*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $2, %ymm0, %ymm2
245*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
246*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
247*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $1, %ymm0, %ymm2
249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
251*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
253*9880d681SAndroid Build Coastguard Worker;
254*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v32i8:
255*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
256*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
257*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
258*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
259*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
260*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm2, %xmm4, %xmm2
261*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
262*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
263*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
264*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
265*9880d681SAndroid Build Coastguard Worker;
266*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v32i8:
267*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
268*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
269*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
270*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
271*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
272*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm4, %xmm2
273*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
274*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
275*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
276*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
277*9880d681SAndroid Build Coastguard Worker;
278*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v32i8:
279*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %ymm1, %ymm1
281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm2
282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
283*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
284*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $2, %ymm0, %ymm2
285*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
286*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
287*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
288*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $1, %ymm0, %ymm2
289*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
290*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
293*9880d681SAndroid Build Coastguard Worker  %shift = lshr <32 x i8> %a, %b
294*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %shift
295*9880d681SAndroid Build Coastguard Worker}
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker;
298*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
302*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v4i64:
303*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
309*9880d681SAndroid Build Coastguard Worker;
310*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v4i64:
311*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
314*9880d681SAndroid Build Coastguard Worker;
315*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v4i64:
316*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
317*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
318*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
319*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
320*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
321*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
322*9880d681SAndroid Build Coastguard Worker;
323*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v4i64:
324*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
325*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
326*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
327*9880d681SAndroid Build Coastguard Worker;
328*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v4i64:
329*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
332*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer
333*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a, %splat
334*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatvar_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
338*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v8i32:
339*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
343*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm1, %xmm2, %xmm2
344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld %xmm1, %xmm0, %xmm0
345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
346*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
347*9880d681SAndroid Build Coastguard Worker;
348*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v8i32:
349*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
351*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
352*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld %xmm1, %ymm0, %ymm0
353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
354*9880d681SAndroid Build Coastguard Worker;
355*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v8i32:
356*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
357*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
358*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
359*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
360*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrld %xmm1, %xmm2, %xmm2
361*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrld %xmm1, %xmm0, %xmm0
362*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
363*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
364*9880d681SAndroid Build Coastguard Worker;
365*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v8i32:
366*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
367*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
368*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
369*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrld %xmm1, %ymm0, %ymm0
370*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
371*9880d681SAndroid Build Coastguard Worker;
372*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v8i32:
373*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
374*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps %xmm2, %xmm2, %xmm2
375*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3]
376*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrld %xmm1, %ymm0, %ymm0
377*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
378*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer
379*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a, %splat
380*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
381*9880d681SAndroid Build Coastguard Worker}
382*9880d681SAndroid Build Coastguard Worker
383*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatvar_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
384*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v16i16:
385*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %xmm1, %eax
388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movzwl %ax, %eax
389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovd %eax, %xmm1
390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2
391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0
392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
394*9880d681SAndroid Build Coastguard Worker;
395*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v16i16:
396*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %xmm1, %eax
398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movzwl %ax, %eax
399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovd %eax, %xmm1
400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0
401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
402*9880d681SAndroid Build Coastguard Worker;
403*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v16i16:
404*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
405*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
406*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovd %xmm1, %eax
407*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    movzwl %ax, %eax
408*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vmovd %eax, %xmm1
409*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlw %xmm1, %xmm2, %xmm2
410*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0
411*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
412*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
413*9880d681SAndroid Build Coastguard Worker;
414*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v16i16:
415*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
416*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovd %xmm1, %eax
417*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    movzwl %ax, %eax
418*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vmovd %eax, %xmm1
419*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0
420*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
421*9880d681SAndroid Build Coastguard Worker;
422*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v16i16:
423*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %xmm1, %eax
425*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    movzwl %ax, %eax
426*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovd %eax, %xmm1
427*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0
428*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
429*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer
430*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a, %splat
431*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
432*9880d681SAndroid Build Coastguard Worker}
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatvar_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
435*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v32i8:
436*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
437*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
438*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
439*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
440*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm3
441*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm8 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
442*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
443*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
444*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm2, %xmm2
445*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm2, %xmm3
446*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
447*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm5, %xmm3, %xmm3
448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm1, %xmm6
449*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm6, %xmm3, %xmm2, %xmm2
450*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm2, %xmm3
451*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
452*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
453*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm4
454*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm4, %xmm3, %xmm2, %xmm2
455*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm3
456*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm8, %xmm3, %xmm3
457*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
458*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm1
459*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm5, %xmm1, %xmm1
460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm6, %xmm1, %xmm0, %xmm0
461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm1
462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm1, %xmm1
463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm4, %xmm1, %xmm0, %xmm0
464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
466*9880d681SAndroid Build Coastguard Worker;
467*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v32i8:
468*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
469*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1
470*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm2
471*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
472*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $2, %ymm0, %ymm2
475*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
476*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
477*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
478*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $1, %ymm0, %ymm2
479*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
480*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
483*9880d681SAndroid Build Coastguard Worker;
484*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v32i8:
485*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
486*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
487*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
488*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
489*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
490*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm2, %xmm2
491*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
492*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
493*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
494*9880d681SAndroid Build Coastguard Worker;
495*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v32i8:
496*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
497*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %ymm1
498*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
499*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
500*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
501*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
502*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm2, %xmm4, %xmm2
503*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
504*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
505*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
506*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
507*9880d681SAndroid Build Coastguard Worker;
508*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v32i8:
509*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpbroadcastb %xmm1, %ymm1
511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm2
512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %ymm1, %ymm1
514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $2, %ymm0, %ymm2
516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $1, %ymm0, %ymm2
520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
524*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer
525*9880d681SAndroid Build Coastguard Worker  %shift = lshr <32 x i8> %a, %splat
526*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %shift
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Worker;
530*9880d681SAndroid Build Coastguard Worker; Constant Shifts
531*9880d681SAndroid Build Coastguard Worker;
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @constant_shift_v4i64(<4 x i64> %a) nounwind {
534*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v4i64:
535*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $62, %xmm1, %xmm2
538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $31, %xmm1, %xmm1
539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm2
541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm0
542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
545*9880d681SAndroid Build Coastguard Worker;
546*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v4i64:
547*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq {{.*}}(%rip), %ymm0, %ymm0
549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
550*9880d681SAndroid Build Coastguard Worker;
551*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v4i64:
552*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
553*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
554*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm2
555*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
556*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq %xmm2, %xmm3, %xmm2
557*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm1
558*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlq %xmm1, %xmm0, %xmm0
559*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
560*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
561*9880d681SAndroid Build Coastguard Worker;
562*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v4i64:
563*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
564*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlvq {{.*}}(%rip), %ymm0, %ymm0
565*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
566*9880d681SAndroid Build Coastguard Worker;
567*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v4i64:
568*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
569*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvq {{.*}}(%rip), %ymm0, %ymm0
570*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
571*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a, <i64 1, i64 7, i64 31, i64 62>
572*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
573*9880d681SAndroid Build Coastguard Worker}
574*9880d681SAndroid Build Coastguard Worker
575*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @constant_shift_v8i32(<8 x i32> %a) nounwind {
576*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v8i32:
577*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $7, %xmm0, %xmm1
579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $5, %xmm0, %xmm2
580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $6, %xmm0, %xmm2
582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $4, %xmm0, %xmm3
583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]
585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $7, %xmm0, %xmm2
587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $9, %xmm0, %xmm3
588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $8, %xmm0, %xmm0
590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
591*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
592*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
593*9880d681SAndroid Build Coastguard Worker;
594*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v8i32:
595*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd {{.*}}(%rip), %ymm0, %ymm0
597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
598*9880d681SAndroid Build Coastguard Worker;
599*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v8i32:
600*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
601*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld {{.*}}(%rip), %xmm0, %xmm1
602*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
603*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshld {{.*}}(%rip), %xmm0, %xmm0
604*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
605*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
606*9880d681SAndroid Build Coastguard Worker;
607*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v8i32:
608*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
609*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlvd {{.*}}(%rip), %ymm0, %ymm0
610*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
611*9880d681SAndroid Build Coastguard Worker;
612*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v8i32:
613*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
614*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvd {{.*}}(%rip), %ymm0, %ymm0
615*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
616*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7>
617*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
618*9880d681SAndroid Build Coastguard Worker}
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @constant_shift_v16i16(<16 x i16> %a) nounwind {
621*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v16i16:
622*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm1
625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm2
626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm2
628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm2
630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm2
632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
633*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm2
634*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
635*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm2
636*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
639*9880d681SAndroid Build Coastguard Worker;
640*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v16i16:
641*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15]
645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]
646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm3, %ymm4, %ymm3
647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm1[0],ymm2[1],ymm1[1],ymm2[2],ymm1[2],ymm2[3],ymm1[3],ymm2[8],ymm1[8],ymm2[9],ymm1[9],ymm2[10],ymm1[10],ymm2[11],ymm1[11]
649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]
650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm2, %ymm0, %ymm0
651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
654*9880d681SAndroid Build Coastguard Worker;
655*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v16i16:
656*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
657*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
658*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubw {{.*}}(%rip), %xmm1, %xmm2
659*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
660*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlw %xmm2, %xmm3, %xmm2
661*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubw {{.*}}(%rip), %xmm1, %xmm1
662*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
663*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
664*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
665*9880d681SAndroid Build Coastguard Worker;
666*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v16i16:
667*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
668*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
669*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubw {{.*}}(%rip), %xmm1, %xmm2
670*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
671*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlw %xmm2, %xmm3, %xmm2
672*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubw {{.*}}(%rip), %xmm1, %xmm1
673*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlw %xmm1, %xmm0, %xmm0
674*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
675*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
676*9880d681SAndroid Build Coastguard Worker;
677*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v16i16:
678*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
679*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def>
680*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
681*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlvw %zmm1, %zmm0, %zmm0
682*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
684*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
685*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
686*9880d681SAndroid Build Coastguard Worker}
687*9880d681SAndroid Build Coastguard Worker
688*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @constant_shift_v32i8(<32 x i8> %a) nounwind {
689*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v32i8:
690*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm2
693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm8 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm8, %xmm2, %xmm2
695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $5, %xmm4, %xmm4
697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm4, %xmm2, %xmm1, %xmm1
698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm1, %xmm2
699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm5, %xmm2, %xmm2
701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm4, %xmm4, %xmm6
702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm6, %xmm2, %xmm1, %xmm1
703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm2
704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm6, %xmm6, %xmm3
707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm1, %xmm1
708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm2
709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm8, %xmm2, %xmm2
710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm4, %xmm2, %xmm0, %xmm0
711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm2
712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm5, %xmm2, %xmm2
713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm6, %xmm2, %xmm0, %xmm0
714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm2
715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm0
717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
719*9880d681SAndroid Build Coastguard Worker;
720*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v32i8:
721*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
722*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm2
725*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
726*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
727*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $2, %ymm0, %ymm2
728*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
729*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
730*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
731*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $1, %ymm0, %ymm2
732*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
733*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
734*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
735*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
736*9880d681SAndroid Build Coastguard Worker;
737*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v32i8:
738*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
739*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
740*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb {{.*}}(%rip), %xmm1, %xmm1
741*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
742*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm2, %xmm2
743*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
744*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
745*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
746*9880d681SAndroid Build Coastguard Worker;
747*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v32i8:
748*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
749*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
750*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsubb {{.*}}(%rip), %xmm1, %xmm1
751*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
752*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm2, %xmm2
753*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
754*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
755*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
756*9880d681SAndroid Build Coastguard Worker;
757*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v32i8:
758*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
759*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
760*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllw $5, %ymm1, %ymm1
761*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $4, %ymm0, %ymm2
762*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
763*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
764*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $2, %ymm0, %ymm2
765*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
766*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
767*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
768*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $1, %ymm0, %ymm2
769*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
770*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddb %ymm1, %ymm1, %ymm1
771*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
772*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
773*9880d681SAndroid Build Coastguard Worker  %shift = lshr <32 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, 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>
774*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %shift
775*9880d681SAndroid Build Coastguard Worker}
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Worker;
778*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts
779*9880d681SAndroid Build Coastguard Worker;
780*9880d681SAndroid Build Coastguard Worker
781*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind {
782*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v4i64:
783*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
784*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm1
785*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
786*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm0
787*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
788*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
789*9880d681SAndroid Build Coastguard Worker;
790*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v4i64:
791*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
794*9880d681SAndroid Build Coastguard Worker;
795*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v4i64:
796*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
797*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlq $7, %xmm0, %xmm1
798*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
799*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlq $7, %xmm0, %xmm0
800*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
801*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
802*9880d681SAndroid Build Coastguard Worker;
803*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v4i64:
804*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
805*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
806*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
807*9880d681SAndroid Build Coastguard Worker;
808*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v4i64:
809*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
810*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $7, %ymm0, %ymm0
811*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
812*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7>
813*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
814*9880d681SAndroid Build Coastguard Worker}
815*9880d681SAndroid Build Coastguard Worker
816*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatconstant_shift_v8i32(<8 x i32> %a) nounwind {
817*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v8i32:
818*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
819*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $5, %xmm0, %xmm1
820*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
821*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrld $5, %xmm0, %xmm0
822*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
823*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
824*9880d681SAndroid Build Coastguard Worker;
825*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v8i32:
826*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
827*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $5, %ymm0, %ymm0
828*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
829*9880d681SAndroid Build Coastguard Worker;
830*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v8i32:
831*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
832*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrld $5, %xmm0, %xmm1
833*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
834*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrld $5, %xmm0, %xmm0
835*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
836*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
837*9880d681SAndroid Build Coastguard Worker;
838*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v8i32:
839*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
840*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrld $5, %ymm0, %ymm0
841*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
842*9880d681SAndroid Build Coastguard Worker;
843*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v8i32:
844*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
845*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrld $5, %ymm0, %ymm0
846*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
847*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
848*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
849*9880d681SAndroid Build Coastguard Worker}
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatconstant_shift_v16i16(<16 x i16> %a) nounwind {
852*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v16i16:
853*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $3, %xmm0, %xmm1
855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $3, %xmm0, %xmm0
857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
859*9880d681SAndroid Build Coastguard Worker;
860*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v16i16:
861*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
862*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
863*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
864*9880d681SAndroid Build Coastguard Worker;
865*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v16i16:
866*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
867*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlw $3, %xmm0, %xmm1
868*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
869*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsrlw $3, %xmm0, %xmm0
870*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
871*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
872*9880d681SAndroid Build Coastguard Worker;
873*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v16i16:
874*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
875*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
876*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
877*9880d681SAndroid Build Coastguard Worker;
878*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v16i16:
879*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $3, %ymm0, %ymm0
881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
882*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
883*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
884*9880d681SAndroid Build Coastguard Worker}
885*9880d681SAndroid Build Coastguard Worker
886*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatconstant_shift_v32i8(<32 x i8> %a) nounwind {
887*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v32i8:
888*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $3, %xmm1, %xmm1
891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]
892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1
893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $3, %xmm0, %xmm0
894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
896*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
897*9880d681SAndroid Build Coastguard Worker;
898*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v32i8:
899*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
903*9880d681SAndroid Build Coastguard Worker;
904*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_shift_v32i8:
905*9880d681SAndroid Build Coastguard Worker; XOPAVX1:       # BB#0:
906*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
907*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpsubb {{.*}}(%rip), %xmm1, %xmm1
908*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
909*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm2, %xmm2
910*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vpshlb %xmm1, %xmm0, %xmm0
911*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
912*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT:    retq
913*9880d681SAndroid Build Coastguard Worker;
914*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_shift_v32i8:
915*9880d681SAndroid Build Coastguard Worker; XOPAVX2:       # BB#0:
916*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
917*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
918*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT:    retq
919*9880d681SAndroid Build Coastguard Worker;
920*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v32i8:
921*9880d681SAndroid Build Coastguard Worker; AVX512:       ## BB#0:
922*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlw $3, %ymm0, %ymm0
923*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
924*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
925*9880d681SAndroid Build Coastguard Worker  %shift = lshr <32 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, 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>
926*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %shift
927*9880d681SAndroid Build Coastguard Worker}
928