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