Make utils/update_llc_test_checks.py note that the assertions are
[oota-llvm.git] / test / CodeGen / X86 / vector-shift-lshr-512.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; TODO: Add AVX512BW shift support
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512DQ
4
5 ;
6 ; Variable Shifts
7 ;
8
9 define <8 x i64> @var_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind {
10 ; ALL-LABEL: var_shift_v8i64:
11 ; ALL:       ## BB#0:
12 ; ALL-NEXT:    vpsrlvq %zmm1, %zmm0, %zmm0
13 ; ALL-NEXT:    retq
14   %shift = lshr <8 x i64> %a, %b
15   ret <8 x i64> %shift
16 }
17
18 define <16 x i32> @var_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind {
19 ; ALL-LABEL: var_shift_v16i32:
20 ; ALL:       ## BB#0:
21 ; ALL-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm0
22 ; ALL-NEXT:    retq
23   %shift = lshr <16 x i32> %a, %b
24   ret <16 x i32> %shift
25 }
26
27 define <32 x i16> @var_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind {
28 ; ALL-LABEL: var_shift_v32i16:
29 ; ALL:       ## BB#0:
30 ; ALL-NEXT:    vpxor %ymm4, %ymm4, %ymm4
31 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm4[4],ymm2[5],ymm4[5],ymm2[6],ymm4[6],ymm2[7],ymm4[7],ymm2[12],ymm4[12],ymm2[13],ymm4[13],ymm2[14],ymm4[14],ymm2[15],ymm4[15]
32 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm6 = ymm0[4,4,5,5,6,6,7,7,12,12,13,13,14,14,15,15]
33 ; ALL-NEXT:    vpsrlvd %ymm5, %ymm6, %ymm5
34 ; ALL-NEXT:    vpsrld $16, %ymm5, %ymm5
35 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm4[0],ymm2[1],ymm4[1],ymm2[2],ymm4[2],ymm2[3],ymm4[3],ymm2[8],ymm4[8],ymm2[9],ymm4[9],ymm2[10],ymm4[10],ymm2[11],ymm4[11]
36 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,8,8,9,9,10,10,11,11]
37 ; ALL-NEXT:    vpsrlvd %ymm2, %ymm0, %ymm0
38 ; ALL-NEXT:    vpsrld $16, %ymm0, %ymm0
39 ; ALL-NEXT:    vpackusdw %ymm5, %ymm0, %ymm0
40 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm2 = ymm3[4],ymm4[4],ymm3[5],ymm4[5],ymm3[6],ymm4[6],ymm3[7],ymm4[7],ymm3[12],ymm4[12],ymm3[13],ymm4[13],ymm3[14],ymm4[14],ymm3[15],ymm4[15]
41 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm1[4,4,5,5,6,6,7,7,12,12,13,13,14,14,15,15]
42 ; ALL-NEXT:    vpsrlvd %ymm2, %ymm5, %ymm2
43 ; ALL-NEXT:    vpsrld $16, %ymm2, %ymm2
44 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm3 = ymm3[0],ymm4[0],ymm3[1],ymm4[1],ymm3[2],ymm4[2],ymm3[3],ymm4[3],ymm3[8],ymm4[8],ymm3[9],ymm4[9],ymm3[10],ymm4[10],ymm3[11],ymm4[11]
45 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,8,8,9,9,10,10,11,11]
46 ; ALL-NEXT:    vpsrlvd %ymm3, %ymm1, %ymm1
47 ; ALL-NEXT:    vpsrld $16, %ymm1, %ymm1
48 ; ALL-NEXT:    vpackusdw %ymm2, %ymm1, %ymm1
49 ; ALL-NEXT:    retq
50   %shift = lshr <32 x i16> %a, %b
51   ret <32 x i16> %shift
52 }
53
54 define <64 x i8> @var_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {
55 ; ALL-LABEL: var_shift_v64i8:
56 ; ALL:       ## BB#0:
57 ; ALL-NEXT:    vpsrlw $4, %ymm0, %ymm4
58 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
59 ; ALL-NEXT:    vpand %ymm5, %ymm4, %ymm4
60 ; ALL-NEXT:    vpsllw $5, %ymm2, %ymm2
61 ; ALL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0
62 ; ALL-NEXT:    vpsrlw $2, %ymm0, %ymm4
63 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm6 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
64 ; ALL-NEXT:    vpand %ymm6, %ymm4, %ymm4
65 ; ALL-NEXT:    vpaddb %ymm2, %ymm2, %ymm2
66 ; ALL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0
67 ; ALL-NEXT:    vpsrlw $1, %ymm0, %ymm4
68 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
69 ; ALL-NEXT:    vpand %ymm7, %ymm4, %ymm4
70 ; ALL-NEXT:    vpaddb %ymm2, %ymm2, %ymm2
71 ; ALL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm0, %ymm0
72 ; ALL-NEXT:    vpsrlw $4, %ymm1, %ymm2
73 ; ALL-NEXT:    vpand %ymm5, %ymm2, %ymm2
74 ; ALL-NEXT:    vpsllw $5, %ymm3, %ymm3
75 ; ALL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm1
76 ; ALL-NEXT:    vpsrlw $2, %ymm1, %ymm2
77 ; ALL-NEXT:    vpand %ymm6, %ymm2, %ymm2
78 ; ALL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3
79 ; ALL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm1
80 ; ALL-NEXT:    vpsrlw $1, %ymm1, %ymm2
81 ; ALL-NEXT:    vpand %ymm7, %ymm2, %ymm2
82 ; ALL-NEXT:    vpaddb %ymm3, %ymm3, %ymm3
83 ; ALL-NEXT:    vpblendvb %ymm3, %ymm2, %ymm1, %ymm1
84 ; ALL-NEXT:    retq
85   %shift = lshr <64 x i8> %a, %b
86   ret <64 x i8> %shift
87 }
88
89 ;
90 ; Uniform Variable Shifts
91 ;
92
93 define <8 x i64> @splatvar_shift_v8i64(<8 x i64> %a, <8 x i64> %b) nounwind {
94 ; ALL-LABEL: splatvar_shift_v8i64:
95 ; ALL:       ## BB#0:
96 ; ALL-NEXT:    vpsrlq %xmm1, %zmm0, %zmm0
97 ; ALL-NEXT:    retq
98   %splat = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer
99   %shift = lshr <8 x i64> %a, %splat
100   ret <8 x i64> %shift
101 }
102
103 define <16 x i32> @splatvar_shift_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind {
104 ; ALL-LABEL: splatvar_shift_v16i32:
105 ; ALL:       ## BB#0:
106 ; ALL-NEXT:    vxorps %xmm2, %xmm2, %xmm2
107 ; ALL-NEXT:    vmovss %xmm1, %xmm2, %xmm1
108 ; ALL-NEXT:    vpsrld %xmm1, %zmm0, %zmm0
109 ; ALL-NEXT:    retq
110   %splat = shufflevector <16 x i32> %b, <16 x i32> undef, <16 x i32> zeroinitializer
111   %shift = lshr <16 x i32> %a, %splat
112   ret <16 x i32> %shift
113 }
114
115 define <32 x i16> @splatvar_shift_v32i16(<32 x i16> %a, <32 x i16> %b) nounwind {
116 ; ALL-LABEL: splatvar_shift_v32i16:
117 ; ALL:       ## BB#0:
118 ; ALL-NEXT:    vmovd %xmm2, %eax
119 ; ALL-NEXT:    movzwl %ax, %eax
120 ; ALL-NEXT:    vmovd %eax, %xmm2
121 ; ALL-NEXT:    vpsrlw %xmm2, %ymm0, %ymm0
122 ; ALL-NEXT:    vpsrlw %xmm2, %ymm1, %ymm1
123 ; ALL-NEXT:    retq
124   %splat = shufflevector <32 x i16> %b, <32 x i16> undef, <32 x i32> zeroinitializer
125   %shift = lshr <32 x i16> %a, %splat
126   ret <32 x i16> %shift
127 }
128
129 define <64 x i8> @splatvar_shift_v64i8(<64 x i8> %a, <64 x i8> %b) nounwind {
130 ; ALL-LABEL: splatvar_shift_v64i8:
131 ; ALL:       ## BB#0:
132 ; ALL-NEXT:    vpbroadcastb %xmm2, %ymm2
133 ; ALL-NEXT:    vpsrlw $4, %ymm0, %ymm3
134 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
135 ; ALL-NEXT:    vpand %ymm4, %ymm3, %ymm3
136 ; ALL-NEXT:    vpsllw $5, %ymm2, %ymm2
137 ; ALL-NEXT:    vpblendvb %ymm2, %ymm3, %ymm0, %ymm0
138 ; ALL-NEXT:    vpsrlw $2, %ymm0, %ymm3
139 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
140 ; ALL-NEXT:    vpand %ymm5, %ymm3, %ymm3
141 ; ALL-NEXT:    vpaddb %ymm2, %ymm2, %ymm6
142 ; ALL-NEXT:    vpblendvb %ymm6, %ymm3, %ymm0, %ymm0
143 ; ALL-NEXT:    vpsrlw $1, %ymm0, %ymm3
144 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
145 ; ALL-NEXT:    vpand %ymm7, %ymm3, %ymm3
146 ; ALL-NEXT:    vpaddb %ymm6, %ymm6, %ymm8
147 ; ALL-NEXT:    vpblendvb %ymm8, %ymm3, %ymm0, %ymm0
148 ; ALL-NEXT:    vpsrlw $4, %ymm1, %ymm3
149 ; ALL-NEXT:    vpand %ymm4, %ymm3, %ymm3
150 ; ALL-NEXT:    vpblendvb %ymm2, %ymm3, %ymm1, %ymm1
151 ; ALL-NEXT:    vpsrlw $2, %ymm1, %ymm2
152 ; ALL-NEXT:    vpand %ymm5, %ymm2, %ymm2
153 ; ALL-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1
154 ; ALL-NEXT:    vpsrlw $1, %ymm1, %ymm2
155 ; ALL-NEXT:    vpand %ymm7, %ymm2, %ymm2
156 ; ALL-NEXT:    vpblendvb %ymm8, %ymm2, %ymm1, %ymm1
157 ; ALL-NEXT:    retq
158   %splat = shufflevector <64 x i8> %b, <64 x i8> undef, <64 x i32> zeroinitializer
159   %shift = lshr <64 x i8> %a, %splat
160   ret <64 x i8> %shift
161 }
162
163 ;
164 ; Constant Shifts
165 ;
166
167 define <8 x i64> @constant_shift_v8i64(<8 x i64> %a) nounwind {
168 ; ALL-LABEL: constant_shift_v8i64:
169 ; ALL:       ## BB#0:
170 ; ALL-NEXT:    vpsrlvq {{.*}}(%rip), %zmm0, %zmm0
171 ; ALL-NEXT:    retq
172   %shift = lshr <8 x i64> %a, <i64 1, i64 7, i64 31, i64 62, i64 1, i64 7, i64 31, i64 62>
173   ret <8 x i64> %shift
174 }
175
176 define <16 x i32> @constant_shift_v16i32(<16 x i32> %a) nounwind {
177 ; ALL-LABEL: constant_shift_v16i32:
178 ; ALL:       ## BB#0:
179 ; ALL-NEXT:    vpsrlvd {{.*}}(%rip), %zmm0, %zmm0
180 ; ALL-NEXT:    retq
181   %shift = lshr <16 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7>
182   ret <16 x i32> %shift
183 }
184
185 define <32 x i16> @constant_shift_v32i16(<32 x i16> %a) nounwind {
186 ; ALL-LABEL: constant_shift_v32i16:
187 ; ALL:       ## BB#0:
188 ; ALL-NEXT:    vpxor %ymm2, %ymm2, %ymm2
189 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
190 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15]
191 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm5 = ymm0[4,4,5,5,6,6,7,7,12,12,13,13,14,14,15,15]
192 ; ALL-NEXT:    vpsrlvd %ymm4, %ymm5, %ymm5
193 ; ALL-NEXT:    vpsrld $16, %ymm5, %ymm5
194 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm3[0],ymm2[0],ymm3[1],ymm2[1],ymm3[2],ymm2[2],ymm3[3],ymm2[3],ymm3[8],ymm2[8],ymm3[9],ymm2[9],ymm3[10],ymm2[10],ymm3[11],ymm2[11]
195 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,8,8,9,9,10,10,11,11]
196 ; ALL-NEXT:    vpsrlvd %ymm2, %ymm0, %ymm0
197 ; ALL-NEXT:    vpsrld $16, %ymm0, %ymm0
198 ; ALL-NEXT:    vpackusdw %ymm5, %ymm0, %ymm0
199 ; ALL-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4,4,5,5,6,6,7,7,12,12,13,13,14,14,15,15]
200 ; ALL-NEXT:    vpsrlvd %ymm4, %ymm3, %ymm3
201 ; ALL-NEXT:    vpsrld $16, %ymm3, %ymm3
202 ; ALL-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0,0,1,1,2,2,3,3,8,8,9,9,10,10,11,11]
203 ; ALL-NEXT:    vpsrlvd %ymm2, %ymm1, %ymm1
204 ; ALL-NEXT:    vpsrld $16, %ymm1, %ymm1
205 ; ALL-NEXT:    vpackusdw %ymm3, %ymm1, %ymm1
206 ; ALL-NEXT:    retq
207   %shift = lshr <32 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, 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>
208   ret <32 x i16> %shift
209 }
210
211 define <64 x i8> @constant_shift_v64i8(<64 x i8> %a) nounwind {
212 ; ALL-LABEL: constant_shift_v64i8:
213 ; ALL:       ## BB#0:
214 ; ALL-NEXT:    vpsrlw $4, %ymm0, %ymm2
215 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
216 ; ALL-NEXT:    vpand %ymm3, %ymm2, %ymm2
217 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm4 = [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]
218 ; ALL-NEXT:    vpsllw $5, %ymm4, %ymm4
219 ; ALL-NEXT:    vpblendvb %ymm4, %ymm2, %ymm0, %ymm0
220 ; ALL-NEXT:    vpsrlw $2, %ymm0, %ymm2
221 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm5 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
222 ; ALL-NEXT:    vpand %ymm5, %ymm2, %ymm2
223 ; ALL-NEXT:    vpaddb %ymm4, %ymm4, %ymm6
224 ; ALL-NEXT:    vpblendvb %ymm6, %ymm2, %ymm0, %ymm0
225 ; ALL-NEXT:    vpsrlw $1, %ymm0, %ymm2
226 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
227 ; ALL-NEXT:    vpand %ymm7, %ymm2, %ymm2
228 ; ALL-NEXT:    vpaddb %ymm6, %ymm6, %ymm8
229 ; ALL-NEXT:    vpblendvb %ymm8, %ymm2, %ymm0, %ymm0
230 ; ALL-NEXT:    vpsrlw $4, %ymm1, %ymm2
231 ; ALL-NEXT:    vpand %ymm3, %ymm2, %ymm2
232 ; ALL-NEXT:    vpblendvb %ymm4, %ymm2, %ymm1, %ymm1
233 ; ALL-NEXT:    vpsrlw $2, %ymm1, %ymm2
234 ; ALL-NEXT:    vpand %ymm5, %ymm2, %ymm2
235 ; ALL-NEXT:    vpblendvb %ymm6, %ymm2, %ymm1, %ymm1
236 ; ALL-NEXT:    vpsrlw $1, %ymm1, %ymm2
237 ; ALL-NEXT:    vpand %ymm7, %ymm2, %ymm2
238 ; ALL-NEXT:    vpblendvb %ymm8, %ymm2, %ymm1, %ymm1
239 ; ALL-NEXT:    retq
240   %shift = lshr <64 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, 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>
241   ret <64 x i8> %shift
242 }
243
244 ;
245 ; Uniform Constant Shifts
246 ;
247
248 define <8 x i64> @splatconstant_shift_v8i64(<8 x i64> %a) nounwind {
249 ; ALL-LABEL: splatconstant_shift_v8i64:
250 ; ALL:       ## BB#0:
251 ; ALL-NEXT:    vpsrlq $7, %zmm0, %zmm0
252 ; ALL-NEXT:    retq
253   %shift = lshr <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7>
254   ret <8 x i64> %shift
255 }
256
257 define <16 x i32> @splatconstant_shift_v16i32(<16 x i32> %a) nounwind {
258 ; ALL-LABEL: splatconstant_shift_v16i32:
259 ; ALL:       ## BB#0:
260 ; ALL-NEXT:    vpsrld $5, %zmm0, %zmm0
261 ; ALL-NEXT:    retq
262   %shift = lshr <16 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
263   ret <16 x i32> %shift
264 }
265
266 define <32 x i16> @splatconstant_shift_v32i16(<32 x i16> %a) nounwind {
267 ; ALL-LABEL: splatconstant_shift_v32i16:
268 ; ALL:       ## BB#0:
269 ; ALL-NEXT:    vpsrlw $3, %ymm0, %ymm0
270 ; ALL-NEXT:    vpsrlw $3, %ymm1, %ymm1
271 ; ALL-NEXT:    retq
272   %shift = lshr <32 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, 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>
273   ret <32 x i16> %shift
274 }
275
276 define <64 x i8> @splatconstant_shift_v64i8(<64 x i8> %a) nounwind {
277 ; ALL-LABEL: splatconstant_shift_v64i8:
278 ; ALL:       ## BB#0:
279 ; ALL-NEXT:    vpsrlw $3, %ymm0, %ymm0
280 ; ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]
281 ; ALL-NEXT:    vpand %ymm2, %ymm0, %ymm0
282 ; ALL-NEXT:    vpsrlw $3, %ymm1, %ymm1
283 ; ALL-NEXT:    vpand %ymm2, %ymm1, %ymm1
284 ; ALL-NEXT:    retq
285   %shift = lshr <64 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, 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>
286   ret <64 x i8> %shift
287 }