1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
6 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
12 define <4 x i64> @var_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
13 ; AVX1-LABEL: var_shift_v4i64:
15 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
16 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
17 ; AVX1-NEXT: vpsllq %xmm2, %xmm3, %xmm4
18 ; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
19 ; AVX1-NEXT: vpsllq %xmm2, %xmm3, %xmm2
20 ; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
21 ; AVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm3
22 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
23 ; AVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm0
24 ; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]
25 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
28 ; AVX2-LABEL: var_shift_v4i64:
30 ; AVX2-NEXT: vpsllvq %ymm1, %ymm0, %ymm0
33 ; XOPAVX1-LABEL: var_shift_v4i64:
35 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
36 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
37 ; XOPAVX1-NEXT: vpshlq %xmm2, %xmm3, %xmm2
38 ; XOPAVX1-NEXT: vpshlq %xmm1, %xmm0, %xmm0
39 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
42 ; XOPAVX2-LABEL: var_shift_v4i64:
44 ; XOPAVX2-NEXT: vpsllvq %ymm1, %ymm0, %ymm0
47 ; AVX512-LABEL: var_shift_v4i64:
49 ; AVX512-NEXT: vpsllvq %ymm1, %ymm0, %ymm0
51 %shift = shl <4 x i64> %a, %b
55 define <8 x i32> @var_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
56 ; AVX1-LABEL: var_shift_v8i32:
58 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
59 ; AVX1-NEXT: vpslld $23, %xmm2, %xmm2
60 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]
61 ; AVX1-NEXT: vpaddd %xmm3, %xmm2, %xmm2
62 ; AVX1-NEXT: vcvttps2dq %xmm2, %xmm2
63 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
64 ; AVX1-NEXT: vpmulld %xmm4, %xmm2, %xmm2
65 ; AVX1-NEXT: vpslld $23, %xmm1, %xmm1
66 ; AVX1-NEXT: vpaddd %xmm3, %xmm1, %xmm1
67 ; AVX1-NEXT: vcvttps2dq %xmm1, %xmm1
68 ; AVX1-NEXT: vpmulld %xmm0, %xmm1, %xmm0
69 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
72 ; AVX2-LABEL: var_shift_v8i32:
74 ; AVX2-NEXT: vpsllvd %ymm1, %ymm0, %ymm0
77 ; XOPAVX1-LABEL: var_shift_v8i32:
79 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
80 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
81 ; XOPAVX1-NEXT: vpshld %xmm2, %xmm3, %xmm2
82 ; XOPAVX1-NEXT: vpshld %xmm1, %xmm0, %xmm0
83 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
86 ; XOPAVX2-LABEL: var_shift_v8i32:
88 ; XOPAVX2-NEXT: vpsllvd %ymm1, %ymm0, %ymm0
91 ; AVX512-LABEL: var_shift_v8i32:
93 ; AVX512-NEXT: vpsllvd %ymm1, %ymm0, %ymm0
95 %shift = shl <8 x i32> %a, %b
99 define <16 x i16> @var_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
100 ; AVX1-LABEL: var_shift_v16i16:
102 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
103 ; AVX1-NEXT: vpsllw $12, %xmm2, %xmm3
104 ; AVX1-NEXT: vpsllw $4, %xmm2, %xmm2
105 ; AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2
106 ; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm3
107 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
108 ; AVX1-NEXT: vpsllw $8, %xmm4, %xmm5
109 ; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
110 ; AVX1-NEXT: vpsllw $4, %xmm2, %xmm4
111 ; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
112 ; AVX1-NEXT: vpsllw $2, %xmm2, %xmm4
113 ; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3
114 ; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
115 ; AVX1-NEXT: vpsllw $1, %xmm2, %xmm4
116 ; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3
117 ; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
118 ; AVX1-NEXT: vpsllw $12, %xmm1, %xmm3
119 ; AVX1-NEXT: vpsllw $4, %xmm1, %xmm1
120 ; AVX1-NEXT: vpor %xmm3, %xmm1, %xmm1
121 ; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm3
122 ; AVX1-NEXT: vpsllw $8, %xmm0, %xmm4
123 ; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
124 ; AVX1-NEXT: vpsllw $4, %xmm0, %xmm1
125 ; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
126 ; AVX1-NEXT: vpsllw $2, %xmm0, %xmm1
127 ; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3
128 ; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
129 ; AVX1-NEXT: vpsllw $1, %xmm0, %xmm1
130 ; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm3
131 ; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
132 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
135 ; AVX2-LABEL: var_shift_v16i16:
137 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
138 ; 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]
139 ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm0[4,4,5,5,6,6,7,7,12,12,13,13,14,14,15,15]
140 ; AVX2-NEXT: vpsllvd %ymm3, %ymm4, %ymm3
141 ; AVX2-NEXT: vpsrld $16, %ymm3, %ymm3
142 ; 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]
143 ; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,8,8,9,9,10,10,11,11]
144 ; AVX2-NEXT: vpsllvd %ymm1, %ymm0, %ymm0
145 ; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0
146 ; AVX2-NEXT: vpackusdw %ymm3, %ymm0, %ymm0
149 ; XOPAVX1-LABEL: var_shift_v16i16:
151 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
152 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
153 ; XOPAVX1-NEXT: vpshlw %xmm2, %xmm3, %xmm2
154 ; XOPAVX1-NEXT: vpshlw %xmm1, %xmm0, %xmm0
155 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
158 ; XOPAVX2-LABEL: var_shift_v16i16:
160 ; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
161 ; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
162 ; XOPAVX2-NEXT: vpshlw %xmm2, %xmm3, %xmm2
163 ; XOPAVX2-NEXT: vpshlw %xmm1, %xmm0, %xmm0
164 ; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
167 ; AVX512-LABEL: var_shift_v16i16:
169 ; AVX512-NEXT: vpsllvw %zmm1, %zmm0, %zmm0
171 %shift = shl <16 x i16> %a, %b
172 ret <16 x i16> %shift
175 define <32 x i8> @var_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
176 ; AVX1-LABEL: var_shift_v32i8:
178 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
179 ; AVX1-NEXT: vpsllw $4, %xmm2, %xmm3
180 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
181 ; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3
182 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
183 ; AVX1-NEXT: vpsllw $5, %xmm5, %xmm5
184 ; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
185 ; AVX1-NEXT: vpsllw $2, %xmm2, %xmm3
186 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
187 ; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
188 ; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5
189 ; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
190 ; AVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm3
191 ; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5
192 ; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
193 ; AVX1-NEXT: vpsllw $4, %xmm0, %xmm3
194 ; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3
195 ; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1
196 ; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
197 ; AVX1-NEXT: vpsllw $2, %xmm0, %xmm3
198 ; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
199 ; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1
200 ; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
201 ; AVX1-NEXT: vpaddb %xmm0, %xmm0, %xmm3
202 ; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1
203 ; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
204 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
207 ; AVX2-LABEL: var_shift_v32i8:
209 ; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1
210 ; AVX2-NEXT: vpsllw $4, %ymm0, %ymm2
211 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
212 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
213 ; AVX2-NEXT: vpsllw $2, %ymm0, %ymm2
214 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
215 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
216 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
217 ; AVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm2
218 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
219 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
222 ; XOPAVX1-LABEL: var_shift_v32i8:
224 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
225 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
226 ; XOPAVX1-NEXT: vpshlb %xmm2, %xmm3, %xmm2
227 ; XOPAVX1-NEXT: vpshlb %xmm1, %xmm0, %xmm0
228 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
231 ; XOPAVX2-LABEL: var_shift_v32i8:
233 ; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
234 ; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
235 ; XOPAVX2-NEXT: vpshlb %xmm2, %xmm3, %xmm2
236 ; XOPAVX2-NEXT: vpshlb %xmm1, %xmm0, %xmm0
237 ; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
240 ; AVX512-LABEL: var_shift_v32i8:
242 ; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1
243 ; AVX512-NEXT: vpsllw $4, %ymm0, %ymm2
244 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
245 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
246 ; AVX512-NEXT: vpsllw $2, %ymm0, %ymm2
247 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
248 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
249 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
250 ; AVX512-NEXT: vpaddb %ymm0, %ymm0, %ymm2
251 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
252 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
254 %shift = shl <32 x i8> %a, %b
259 ; Uniform Variable Shifts
262 define <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
263 ; AVX1-LABEL: splatvar_shift_v4i64:
265 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
266 ; AVX1-NEXT: vpsllq %xmm1, %xmm2, %xmm2
267 ; AVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm0
268 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
271 ; AVX2-LABEL: splatvar_shift_v4i64:
273 ; AVX2-NEXT: vpsllq %xmm1, %ymm0, %ymm0
276 ; XOPAVX1-LABEL: splatvar_shift_v4i64:
278 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
279 ; XOPAVX1-NEXT: vpsllq %xmm1, %xmm2, %xmm2
280 ; XOPAVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm0
281 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
284 ; XOPAVX2-LABEL: splatvar_shift_v4i64:
286 ; XOPAVX2-NEXT: vpsllq %xmm1, %ymm0, %ymm0
289 ; AVX512-LABEL: splatvar_shift_v4i64:
291 ; AVX512-NEXT: vpsllq %xmm1, %ymm0, %ymm0
293 %splat = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer
294 %shift = shl <4 x i64> %a, %splat
298 define <8 x i32> @splatvar_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
299 ; AVX1-LABEL: splatvar_shift_v8i32:
301 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
302 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
303 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
304 ; AVX1-NEXT: vpslld %xmm1, %xmm2, %xmm2
305 ; AVX1-NEXT: vpslld %xmm1, %xmm0, %xmm0
306 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
309 ; AVX2-LABEL: splatvar_shift_v8i32:
311 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
312 ; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
313 ; AVX2-NEXT: vpslld %xmm1, %ymm0, %ymm0
316 ; XOPAVX1-LABEL: splatvar_shift_v8i32:
318 ; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
319 ; XOPAVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
320 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
321 ; XOPAVX1-NEXT: vpslld %xmm1, %xmm2, %xmm2
322 ; XOPAVX1-NEXT: vpslld %xmm1, %xmm0, %xmm0
323 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
326 ; XOPAVX2-LABEL: splatvar_shift_v8i32:
328 ; XOPAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
329 ; XOPAVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7]
330 ; XOPAVX2-NEXT: vpslld %xmm1, %ymm0, %ymm0
333 ; AVX512-LABEL: splatvar_shift_v8i32:
335 ; AVX512-NEXT: vxorps %xmm2, %xmm2, %xmm2
336 ; AVX512-NEXT: vmovss %xmm1, %xmm2, %xmm1
337 ; AVX512-NEXT: vpslld %xmm1, %ymm0, %ymm0
339 %splat = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer
340 %shift = shl <8 x i32> %a, %splat
344 define <16 x i16> @splatvar_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
345 ; AVX1-LABEL: splatvar_shift_v16i16:
347 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
348 ; AVX1-NEXT: vmovd %xmm1, %eax
349 ; AVX1-NEXT: movzwl %ax, %eax
350 ; AVX1-NEXT: vmovd %eax, %xmm1
351 ; AVX1-NEXT: vpsllw %xmm1, %xmm2, %xmm2
352 ; AVX1-NEXT: vpsllw %xmm1, %xmm0, %xmm0
353 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
356 ; AVX2-LABEL: splatvar_shift_v16i16:
358 ; AVX2-NEXT: vmovd %xmm1, %eax
359 ; AVX2-NEXT: movzwl %ax, %eax
360 ; AVX2-NEXT: vmovd %eax, %xmm1
361 ; AVX2-NEXT: vpsllw %xmm1, %ymm0, %ymm0
364 ; XOPAVX1-LABEL: splatvar_shift_v16i16:
366 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
367 ; XOPAVX1-NEXT: vmovd %xmm1, %eax
368 ; XOPAVX1-NEXT: movzwl %ax, %eax
369 ; XOPAVX1-NEXT: vmovd %eax, %xmm1
370 ; XOPAVX1-NEXT: vpsllw %xmm1, %xmm2, %xmm2
371 ; XOPAVX1-NEXT: vpsllw %xmm1, %xmm0, %xmm0
372 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
375 ; XOPAVX2-LABEL: splatvar_shift_v16i16:
377 ; XOPAVX2-NEXT: vmovd %xmm1, %eax
378 ; XOPAVX2-NEXT: movzwl %ax, %eax
379 ; XOPAVX2-NEXT: vmovd %eax, %xmm1
380 ; XOPAVX2-NEXT: vpsllw %xmm1, %ymm0, %ymm0
383 ; AVX512-LABEL: splatvar_shift_v16i16:
385 ; AVX512-NEXT: vmovd %xmm1, %eax
386 ; AVX512-NEXT: movzwl %ax, %eax
387 ; AVX512-NEXT: vmovd %eax, %xmm1
388 ; AVX512-NEXT: vpsllw %xmm1, %ymm0, %ymm0
390 %splat = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer
391 %shift = shl <16 x i16> %a, %splat
392 ret <16 x i16> %shift
395 define <32 x i8> @splatvar_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
396 ; AVX1-LABEL: splatvar_shift_v32i8:
398 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
399 ; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
400 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
401 ; AVX1-NEXT: vpsllw $4, %xmm2, %xmm3
402 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
403 ; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3
404 ; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1
405 ; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm2, %xmm2
406 ; AVX1-NEXT: vpsllw $2, %xmm2, %xmm3
407 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
408 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
409 ; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm6
410 ; AVX1-NEXT: vpblendvb %xmm6, %xmm3, %xmm2, %xmm2
411 ; AVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm3
412 ; AVX1-NEXT: vpaddb %xmm6, %xmm6, %xmm7
413 ; AVX1-NEXT: vpblendvb %xmm7, %xmm3, %xmm2, %xmm2
414 ; AVX1-NEXT: vpsllw $4, %xmm0, %xmm3
415 ; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3
416 ; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
417 ; AVX1-NEXT: vpsllw $2, %xmm0, %xmm1
418 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
419 ; AVX1-NEXT: vpblendvb %xmm6, %xmm1, %xmm0, %xmm0
420 ; AVX1-NEXT: vpaddb %xmm0, %xmm0, %xmm1
421 ; AVX1-NEXT: vpblendvb %xmm7, %xmm1, %xmm0, %xmm0
422 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
425 ; AVX2-LABEL: splatvar_shift_v32i8:
427 ; AVX2-NEXT: vpbroadcastb %xmm1, %ymm1
428 ; AVX2-NEXT: vpsllw $4, %ymm0, %ymm2
429 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
430 ; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1
431 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
432 ; AVX2-NEXT: vpsllw $2, %ymm0, %ymm2
433 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
434 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
435 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
436 ; AVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm2
437 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
438 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
441 ; XOPAVX1-LABEL: splatvar_shift_v32i8:
443 ; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
444 ; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
445 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
446 ; XOPAVX1-NEXT: vpshlb %xmm1, %xmm2, %xmm2
447 ; XOPAVX1-NEXT: vpshlb %xmm1, %xmm0, %xmm0
448 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
451 ; XOPAVX2-LABEL: splatvar_shift_v32i8:
453 ; XOPAVX2-NEXT: vpbroadcastb %xmm1, %ymm1
454 ; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
455 ; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
456 ; XOPAVX2-NEXT: vpshlb %xmm3, %xmm2, %xmm2
457 ; XOPAVX2-NEXT: vpshlb %xmm1, %xmm0, %xmm0
458 ; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
461 ; AVX512-LABEL: splatvar_shift_v32i8:
463 ; AVX512-NEXT: vpbroadcastb %xmm1, %ymm1
464 ; AVX512-NEXT: vpsllw $4, %ymm0, %ymm2
465 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
466 ; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1
467 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
468 ; AVX512-NEXT: vpsllw $2, %ymm0, %ymm2
469 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
470 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
471 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
472 ; AVX512-NEXT: vpaddb %ymm0, %ymm0, %ymm2
473 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
474 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
476 %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer
477 %shift = shl <32 x i8> %a, %splat
485 define <4 x i64> @constant_shift_v4i64(<4 x i64> %a) nounwind {
486 ; AVX1-LABEL: constant_shift_v4i64:
488 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
489 ; AVX1-NEXT: vpsllq $62, %xmm1, %xmm2
490 ; AVX1-NEXT: vpsllq $31, %xmm1, %xmm1
491 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
492 ; AVX1-NEXT: vpsllq $7, %xmm0, %xmm2
493 ; AVX1-NEXT: vpsllq $1, %xmm0, %xmm0
494 ; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
495 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
498 ; AVX2-LABEL: constant_shift_v4i64:
500 ; AVX2-NEXT: vpsllvq {{.*}}(%rip), %ymm0, %ymm0
503 ; XOPAVX1-LABEL: constant_shift_v4i64:
505 ; XOPAVX1-NEXT: vpshlq {{.*}}(%rip), %xmm0, %xmm1
506 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
507 ; XOPAVX1-NEXT: vpshlq {{.*}}(%rip), %xmm0, %xmm0
508 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
511 ; XOPAVX2-LABEL: constant_shift_v4i64:
513 ; XOPAVX2-NEXT: vpsllvq {{.*}}(%rip), %ymm0, %ymm0
516 ; AVX512-LABEL: constant_shift_v4i64:
518 ; AVX512-NEXT: vpsllvq {{.*}}(%rip), %ymm0, %ymm0
520 %shift = shl <4 x i64> %a, <i64 1, i64 7, i64 31, i64 62>
524 define <8 x i32> @constant_shift_v8i32(<8 x i32> %a) nounwind {
525 ; AVX1-LABEL: constant_shift_v8i32:
527 ; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm1
528 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
529 ; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
530 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
533 ; AVX2-LABEL: constant_shift_v8i32:
535 ; AVX2-NEXT: vpsllvd {{.*}}(%rip), %ymm0, %ymm0
538 ; XOPAVX1-LABEL: constant_shift_v8i32:
540 ; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm0, %xmm1
541 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
542 ; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm0, %xmm0
543 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
546 ; XOPAVX2-LABEL: constant_shift_v8i32:
548 ; XOPAVX2-NEXT: vpsllvd {{.*}}(%rip), %ymm0, %ymm0
551 ; AVX512-LABEL: constant_shift_v8i32:
553 ; AVX512-NEXT: vpsllvd {{.*}}(%rip), %ymm0, %ymm0
555 %shift = shl <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7>
559 define <16 x i16> @constant_shift_v16i16(<16 x i16> %a) nounwind {
560 ; AVX1-LABEL: constant_shift_v16i16:
562 ; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm1
563 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
564 ; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
565 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
568 ; AVX2-LABEL: constant_shift_v16i16:
570 ; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
573 ; XOPAVX1-LABEL: constant_shift_v16i16:
575 ; XOPAVX1-NEXT: vpshlw {{.*}}(%rip), %xmm0, %xmm1
576 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
577 ; XOPAVX1-NEXT: vpshlw {{.*}}(%rip), %xmm0, %xmm0
578 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
581 ; XOPAVX2-LABEL: constant_shift_v16i16:
583 ; XOPAVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
586 ; AVX512-LABEL: constant_shift_v16i16:
588 ; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
589 ; AVX512-NEXT: vpsllvw %zmm1, %zmm0, %zmm0
591 %shift = shl <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>
592 ret <16 x i16> %shift
595 define <32 x i8> @constant_shift_v32i8(<32 x i8> %a) nounwind {
596 ; AVX1-LABEL: constant_shift_v32i8:
598 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
599 ; AVX1-NEXT: vpsllw $4, %xmm1, %xmm2
600 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
601 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
602 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
603 ; AVX1-NEXT: vpsllw $5, %xmm4, %xmm4
604 ; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm1, %xmm1
605 ; AVX1-NEXT: vpsllw $2, %xmm1, %xmm2
606 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
607 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
608 ; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm6
609 ; AVX1-NEXT: vpblendvb %xmm6, %xmm2, %xmm1, %xmm1
610 ; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm2
611 ; AVX1-NEXT: vpaddb %xmm6, %xmm6, %xmm7
612 ; AVX1-NEXT: vpblendvb %xmm7, %xmm2, %xmm1, %xmm1
613 ; AVX1-NEXT: vpsllw $4, %xmm0, %xmm2
614 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
615 ; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm0, %xmm0
616 ; AVX1-NEXT: vpsllw $2, %xmm0, %xmm2
617 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
618 ; AVX1-NEXT: vpblendvb %xmm6, %xmm2, %xmm0, %xmm0
619 ; AVX1-NEXT: vpaddb %xmm0, %xmm0, %xmm2
620 ; AVX1-NEXT: vpblendvb %xmm7, %xmm2, %xmm0, %xmm0
621 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
624 ; AVX2-LABEL: constant_shift_v32i8:
626 ; 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]
627 ; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1
628 ; AVX2-NEXT: vpsllw $4, %ymm0, %ymm2
629 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
630 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
631 ; AVX2-NEXT: vpsllw $2, %ymm0, %ymm2
632 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
633 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
634 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
635 ; AVX2-NEXT: vpaddb %ymm0, %ymm0, %ymm2
636 ; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1
637 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
640 ; XOPAVX1-LABEL: constant_shift_v32i8:
642 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
643 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
644 ; XOPAVX1-NEXT: vpshlb %xmm2, %xmm1, %xmm1
645 ; XOPAVX1-NEXT: vpshlb %xmm2, %xmm0, %xmm0
646 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
649 ; XOPAVX2-LABEL: constant_shift_v32i8:
651 ; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
652 ; XOPAVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
653 ; XOPAVX2-NEXT: vpshlb %xmm2, %xmm1, %xmm1
654 ; XOPAVX2-NEXT: vpshlb %xmm2, %xmm0, %xmm0
655 ; XOPAVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
658 ; AVX512-LABEL: constant_shift_v32i8:
660 ; 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]
661 ; AVX512-NEXT: vpsllw $5, %ymm1, %ymm1
662 ; AVX512-NEXT: vpsllw $4, %ymm0, %ymm2
663 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
664 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
665 ; AVX512-NEXT: vpsllw $2, %ymm0, %ymm2
666 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
667 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
668 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
669 ; AVX512-NEXT: vpaddb %ymm0, %ymm0, %ymm2
670 ; AVX512-NEXT: vpaddb %ymm1, %ymm1, %ymm1
671 ; AVX512-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
673 %shift = shl <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>
678 ; Uniform Constant Shifts
681 define <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind {
682 ; AVX1-LABEL: splatconstant_shift_v4i64:
684 ; AVX1-NEXT: vpsllq $7, %xmm0, %xmm1
685 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
686 ; AVX1-NEXT: vpsllq $7, %xmm0, %xmm0
687 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
690 ; AVX2-LABEL: splatconstant_shift_v4i64:
692 ; AVX2-NEXT: vpsllq $7, %ymm0, %ymm0
695 ; XOPAVX1-LABEL: splatconstant_shift_v4i64:
697 ; XOPAVX1-NEXT: vpsllq $7, %xmm0, %xmm1
698 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
699 ; XOPAVX1-NEXT: vpsllq $7, %xmm0, %xmm0
700 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
703 ; XOPAVX2-LABEL: splatconstant_shift_v4i64:
705 ; XOPAVX2-NEXT: vpsllq $7, %ymm0, %ymm0
708 ; AVX512-LABEL: splatconstant_shift_v4i64:
710 ; AVX512-NEXT: vpsllq $7, %ymm0, %ymm0
712 %shift = shl <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7>
716 define <8 x i32> @splatconstant_shift_v8i32(<8 x i32> %a) nounwind {
717 ; AVX1-LABEL: splatconstant_shift_v8i32:
719 ; AVX1-NEXT: vpslld $5, %xmm0, %xmm1
720 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
721 ; AVX1-NEXT: vpslld $5, %xmm0, %xmm0
722 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
725 ; AVX2-LABEL: splatconstant_shift_v8i32:
727 ; AVX2-NEXT: vpslld $5, %ymm0, %ymm0
730 ; XOPAVX1-LABEL: splatconstant_shift_v8i32:
732 ; XOPAVX1-NEXT: vpslld $5, %xmm0, %xmm1
733 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
734 ; XOPAVX1-NEXT: vpslld $5, %xmm0, %xmm0
735 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
738 ; XOPAVX2-LABEL: splatconstant_shift_v8i32:
740 ; XOPAVX2-NEXT: vpslld $5, %ymm0, %ymm0
743 ; AVX512-LABEL: splatconstant_shift_v8i32:
745 ; AVX512-NEXT: vpslld $5, %ymm0, %ymm0
747 %shift = shl <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
751 define <16 x i16> @splatconstant_shift_v16i16(<16 x i16> %a) nounwind {
752 ; AVX1-LABEL: splatconstant_shift_v16i16:
754 ; AVX1-NEXT: vpsllw $3, %xmm0, %xmm1
755 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
756 ; AVX1-NEXT: vpsllw $3, %xmm0, %xmm0
757 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
760 ; AVX2-LABEL: splatconstant_shift_v16i16:
762 ; AVX2-NEXT: vpsllw $3, %ymm0, %ymm0
765 ; XOPAVX1-LABEL: splatconstant_shift_v16i16:
767 ; XOPAVX1-NEXT: vpsllw $3, %xmm0, %xmm1
768 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
769 ; XOPAVX1-NEXT: vpsllw $3, %xmm0, %xmm0
770 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
773 ; XOPAVX2-LABEL: splatconstant_shift_v16i16:
775 ; XOPAVX2-NEXT: vpsllw $3, %ymm0, %ymm0
778 ; AVX512-LABEL: splatconstant_shift_v16i16:
780 ; AVX512-NEXT: vpsllw $3, %ymm0, %ymm0
782 %shift = shl <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>
783 ret <16 x i16> %shift
786 define <32 x i8> @splatconstant_shift_v32i8(<32 x i8> %a) nounwind {
787 ; AVX1-LABEL: splatconstant_shift_v32i8:
789 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
790 ; AVX1-NEXT: vpsllw $3, %xmm1, %xmm1
791 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248]
792 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm1
793 ; AVX1-NEXT: vpsllw $3, %xmm0, %xmm0
794 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
795 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
798 ; AVX2-LABEL: splatconstant_shift_v32i8:
800 ; AVX2-NEXT: vpsllw $3, %ymm0, %ymm0
801 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
804 ; XOPAVX1-LABEL: splatconstant_shift_v32i8:
806 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
807 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
808 ; XOPAVX1-NEXT: vpshlb %xmm2, %xmm1, %xmm1
809 ; XOPAVX1-NEXT: vpshlb %xmm2, %xmm0, %xmm0
810 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
813 ; XOPAVX2-LABEL: splatconstant_shift_v32i8:
815 ; XOPAVX2-NEXT: vpsllw $3, %ymm0, %ymm0
816 ; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
819 ; AVX512-LABEL: splatconstant_shift_v32i8:
821 ; AVX512-NEXT: vpsllw $3, %ymm0, %ymm0
822 ; AVX512-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
824 %shift = shl <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>