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