llvm.org GIT mirror llvm / f86876e
[X86][AVX] createVariablePermute - scale v16i16 variable permutes to use v32i8 codegen XOP was already doing this, and now AVX performs v32i8 variable permutes as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327245 91177308-0d34-0410-b5e6-96231b3b80d8 Simon Pilgrim 2 years ago
2 changed file(s) with 104 addition(s) and 561 deletion(s). Raw diff Collapse all Expand all
80658065 case MVT::v16i16:
80668066 if (Subtarget.hasVLX() && Subtarget.hasBWI())
80678067 Opcode = X86ISD::VPERMV;
8068 else if (Subtarget.hasXOP()) {
8068 else if (Subtarget.hasAVX()) {
80698069 // Scale to v32i8 and perform as v32i8.
80708070 IndicesVec = ScaleIndices(IndicesVec, 2);
80718071 return DAG.getBitcast(
160160 ;
161161 ; AVX1-LABEL: var_shuffle_v16i16:
162162 ; AVX1: # %bb.0:
163 ; AVX1-NEXT: pushq %rbp
164 ; AVX1-NEXT: movq %rsp, %rbp
165 ; AVX1-NEXT: andq $-32, %rsp
166 ; AVX1-NEXT: subq $64, %rsp
167 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
168 ; AVX1-NEXT: vmovd %xmm2, %eax
169 ; AVX1-NEXT: vmovaps %ymm0, (%rsp)
170 ; AVX1-NEXT: andl $15, %eax
171 ; AVX1-NEXT: movzwl (%rsp,%rax,2), %eax
172 ; AVX1-NEXT: vmovd %eax, %xmm0
173 ; AVX1-NEXT: vpextrw $1, %xmm2, %eax
174 ; AVX1-NEXT: andl $15, %eax
175 ; AVX1-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm0, %xmm0
176 ; AVX1-NEXT: vpextrw $2, %xmm2, %eax
177 ; AVX1-NEXT: andl $15, %eax
178 ; AVX1-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm0, %xmm0
179 ; AVX1-NEXT: vpextrw $3, %xmm2, %eax
180 ; AVX1-NEXT: andl $15, %eax
181 ; AVX1-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm0, %xmm0
182 ; AVX1-NEXT: vpextrw $4, %xmm2, %eax
183 ; AVX1-NEXT: andl $15, %eax
184 ; AVX1-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm0, %xmm0
185 ; AVX1-NEXT: vpextrw $5, %xmm2, %eax
186 ; AVX1-NEXT: andl $15, %eax
187 ; AVX1-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm0, %xmm0
188 ; AVX1-NEXT: vpextrw $6, %xmm2, %eax
189 ; AVX1-NEXT: andl $15, %eax
190 ; AVX1-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm0, %xmm0
191 ; AVX1-NEXT: vpextrw $7, %xmm2, %eax
192 ; AVX1-NEXT: andl $15, %eax
193 ; AVX1-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm0, %xmm0
194 ; AVX1-NEXT: vmovd %xmm1, %eax
195 ; AVX1-NEXT: andl $15, %eax
196 ; AVX1-NEXT: movzwl (%rsp,%rax,2), %eax
197 ; AVX1-NEXT: vmovd %eax, %xmm2
198 ; AVX1-NEXT: vpextrw $1, %xmm1, %eax
199 ; AVX1-NEXT: andl $15, %eax
200 ; AVX1-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm2, %xmm2
201 ; AVX1-NEXT: vpextrw $2, %xmm1, %eax
202 ; AVX1-NEXT: andl $15, %eax
203 ; AVX1-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm2, %xmm2
204 ; AVX1-NEXT: vpextrw $3, %xmm1, %eax
205 ; AVX1-NEXT: andl $15, %eax
206 ; AVX1-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm2, %xmm2
207 ; AVX1-NEXT: vpextrw $4, %xmm1, %eax
208 ; AVX1-NEXT: andl $15, %eax
209 ; AVX1-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm2, %xmm2
210 ; AVX1-NEXT: vpextrw $5, %xmm1, %eax
211 ; AVX1-NEXT: andl $15, %eax
212 ; AVX1-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm2, %xmm2
213 ; AVX1-NEXT: vpextrw $6, %xmm1, %eax
214 ; AVX1-NEXT: andl $15, %eax
215 ; AVX1-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm2, %xmm2
216 ; AVX1-NEXT: vpextrw $7, %xmm1, %eax
217 ; AVX1-NEXT: andl $15, %eax
218 ; AVX1-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm2, %xmm1
219 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
220 ; AVX1-NEXT: movq %rbp, %rsp
221 ; AVX1-NEXT: popq %rbp
163 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [514,514,514,514,514,514,514,514]
164 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm3
165 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [256,256,256,256,256,256,256,256]
166 ; AVX1-NEXT: vpaddw %xmm4, %xmm3, %xmm3
167 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
168 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1
169 ; AVX1-NEXT: vpaddw %xmm4, %xmm1, %xmm1
170 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
171 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm4
172 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
173 ; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm6
174 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
175 ; AVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm1, %xmm1
176 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2
177 ; AVX1-NEXT: vpshufb %xmm3, %xmm5, %xmm4
178 ; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
179 ; AVX1-NEXT: vpblendvb %xmm2, %xmm4, %xmm0, %xmm0
180 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
222181 ; AVX1-NEXT: retq
223182 ;
224183 ; AVX2-LABEL: var_shuffle_v16i16:
225184 ; AVX2: # %bb.0:
226 ; AVX2-NEXT: pushq %rbp
227 ; AVX2-NEXT: movq %rsp, %rbp
228 ; AVX2-NEXT: andq $-32, %rsp
229 ; AVX2-NEXT: subq $64, %rsp
230 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
231 ; AVX2-NEXT: vmovd %xmm2, %eax
232 ; AVX2-NEXT: vmovaps %ymm0, (%rsp)
233 ; AVX2-NEXT: andl $15, %eax
234 ; AVX2-NEXT: movzwl (%rsp,%rax,2), %eax
235 ; AVX2-NEXT: vmovd %eax, %xmm0
236 ; AVX2-NEXT: vpextrw $1, %xmm2, %eax
237 ; AVX2-NEXT: andl $15, %eax
238 ; AVX2-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm0, %xmm0
239 ; AVX2-NEXT: vpextrw $2, %xmm2, %eax
240 ; AVX2-NEXT: andl $15, %eax
241 ; AVX2-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm0, %xmm0
242 ; AVX2-NEXT: vpextrw $3, %xmm2, %eax
243 ; AVX2-NEXT: andl $15, %eax
244 ; AVX2-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm0, %xmm0
245 ; AVX2-NEXT: vpextrw $4, %xmm2, %eax
246 ; AVX2-NEXT: andl $15, %eax
247 ; AVX2-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm0, %xmm0
248 ; AVX2-NEXT: vpextrw $5, %xmm2, %eax
249 ; AVX2-NEXT: andl $15, %eax
250 ; AVX2-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm0, %xmm0
251 ; AVX2-NEXT: vpextrw $6, %xmm2, %eax
252 ; AVX2-NEXT: andl $15, %eax
253 ; AVX2-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm0, %xmm0
254 ; AVX2-NEXT: vpextrw $7, %xmm2, %eax
255 ; AVX2-NEXT: andl $15, %eax
256 ; AVX2-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm0, %xmm0
257 ; AVX2-NEXT: vmovd %xmm1, %eax
258 ; AVX2-NEXT: andl $15, %eax
259 ; AVX2-NEXT: movzwl (%rsp,%rax,2), %eax
260 ; AVX2-NEXT: vmovd %eax, %xmm2
261 ; AVX2-NEXT: vpextrw $1, %xmm1, %eax
262 ; AVX2-NEXT: andl $15, %eax
263 ; AVX2-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm2, %xmm2
264 ; AVX2-NEXT: vpextrw $2, %xmm1, %eax
265 ; AVX2-NEXT: andl $15, %eax
266 ; AVX2-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm2, %xmm2
267 ; AVX2-NEXT: vpextrw $3, %xmm1, %eax
268 ; AVX2-NEXT: andl $15, %eax
269 ; AVX2-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm2, %xmm2
270 ; AVX2-NEXT: vpextrw $4, %xmm1, %eax
271 ; AVX2-NEXT: andl $15, %eax
272 ; AVX2-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm2, %xmm2
273 ; AVX2-NEXT: vpextrw $5, %xmm1, %eax
274 ; AVX2-NEXT: andl $15, %eax
275 ; AVX2-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm2, %xmm2
276 ; AVX2-NEXT: vpextrw $6, %xmm1, %eax
277 ; AVX2-NEXT: andl $15, %eax
278 ; AVX2-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm2, %xmm2
279 ; AVX2-NEXT: vpextrw $7, %xmm1, %eax
280 ; AVX2-NEXT: andl $15, %eax
281 ; AVX2-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm2, %xmm1
282 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
283 ; AVX2-NEXT: movq %rbp, %rsp
284 ; AVX2-NEXT: popq %rbp
185 ; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
186 ; AVX2-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
187 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
188 ; AVX2-NEXT: vpshufb %ymm1, %ymm2, %ymm2
189 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
190 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
191 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0
192 ; AVX2-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
193 ; AVX2-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
285194 ; AVX2-NEXT: retq
286195 ;
287196 ; AVX512F-LABEL: var_shuffle_v16i16:
288197 ; AVX512F: # %bb.0:
289 ; AVX512F-NEXT: pushq %rbp
290 ; AVX512F-NEXT: movq %rsp, %rbp
291 ; AVX512F-NEXT: andq $-32, %rsp
292 ; AVX512F-NEXT: subq $64, %rsp
293 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
294 ; AVX512F-NEXT: vmovd %xmm2, %eax
295 ; AVX512F-NEXT: vmovaps %ymm0, (%rsp)
296 ; AVX512F-NEXT: andl $15, %eax
297 ; AVX512F-NEXT: movzwl (%rsp,%rax,2), %eax
298 ; AVX512F-NEXT: vmovd %eax, %xmm0
299 ; AVX512F-NEXT: vpextrw $1, %xmm2, %eax
300 ; AVX512F-NEXT: andl $15, %eax
301 ; AVX512F-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm0, %xmm0
302 ; AVX512F-NEXT: vpextrw $2, %xmm2, %eax
303 ; AVX512F-NEXT: andl $15, %eax
304 ; AVX512F-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm0, %xmm0
305 ; AVX512F-NEXT: vpextrw $3, %xmm2, %eax
306 ; AVX512F-NEXT: andl $15, %eax
307 ; AVX512F-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm0, %xmm0
308 ; AVX512F-NEXT: vpextrw $4, %xmm2, %eax
309 ; AVX512F-NEXT: andl $15, %eax
310 ; AVX512F-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm0, %xmm0
311 ; AVX512F-NEXT: vpextrw $5, %xmm2, %eax
312 ; AVX512F-NEXT: andl $15, %eax
313 ; AVX512F-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm0, %xmm0
314 ; AVX512F-NEXT: vpextrw $6, %xmm2, %eax
315 ; AVX512F-NEXT: andl $15, %eax
316 ; AVX512F-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm0, %xmm0
317 ; AVX512F-NEXT: vpextrw $7, %xmm2, %eax
318 ; AVX512F-NEXT: andl $15, %eax
319 ; AVX512F-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm0, %xmm0
320 ; AVX512F-NEXT: vmovd %xmm1, %eax
321 ; AVX512F-NEXT: andl $15, %eax
322 ; AVX512F-NEXT: movzwl (%rsp,%rax,2), %eax
323 ; AVX512F-NEXT: vmovd %eax, %xmm2
324 ; AVX512F-NEXT: vpextrw $1, %xmm1, %eax
325 ; AVX512F-NEXT: andl $15, %eax
326 ; AVX512F-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm2, %xmm2
327 ; AVX512F-NEXT: vpextrw $2, %xmm1, %eax
328 ; AVX512F-NEXT: andl $15, %eax
329 ; AVX512F-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm2, %xmm2
330 ; AVX512F-NEXT: vpextrw $3, %xmm1, %eax
331 ; AVX512F-NEXT: andl $15, %eax
332 ; AVX512F-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm2, %xmm2
333 ; AVX512F-NEXT: vpextrw $4, %xmm1, %eax
334 ; AVX512F-NEXT: andl $15, %eax
335 ; AVX512F-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm2, %xmm2
336 ; AVX512F-NEXT: vpextrw $5, %xmm1, %eax
337 ; AVX512F-NEXT: andl $15, %eax
338 ; AVX512F-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm2, %xmm2
339 ; AVX512F-NEXT: vpextrw $6, %xmm1, %eax
340 ; AVX512F-NEXT: andl $15, %eax
341 ; AVX512F-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm2, %xmm2
342 ; AVX512F-NEXT: vpextrw $7, %xmm1, %eax
343 ; AVX512F-NEXT: andl $15, %eax
344 ; AVX512F-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm2, %xmm1
345 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
346 ; AVX512F-NEXT: movq %rbp, %rsp
347 ; AVX512F-NEXT: popq %rbp
198 ; AVX512F-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
199 ; AVX512F-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
200 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
201 ; AVX512F-NEXT: vpshufb %ymm1, %ymm2, %ymm2
202 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
203 ; AVX512F-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
204 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm0
205 ; AVX512F-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
206 ; AVX512F-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
348207 ; AVX512F-NEXT: retq
349208 ;
350209 ; AVX512DQ-LABEL: var_shuffle_v16i16:
351210 ; AVX512DQ: # %bb.0:
352 ; AVX512DQ-NEXT: pushq %rbp
353 ; AVX512DQ-NEXT: movq %rsp, %rbp
354 ; AVX512DQ-NEXT: andq $-32, %rsp
355 ; AVX512DQ-NEXT: subq $64, %rsp
356 ; AVX512DQ-NEXT: vextracti128 $1, %ymm1, %xmm2
357 ; AVX512DQ-NEXT: vmovd %xmm2, %eax
358 ; AVX512DQ-NEXT: vmovaps %ymm0, (%rsp)
359 ; AVX512DQ-NEXT: andl $15, %eax
360 ; AVX512DQ-NEXT: movzwl (%rsp,%rax,2), %eax
361 ; AVX512DQ-NEXT: vmovd %eax, %xmm0
362 ; AVX512DQ-NEXT: vpextrw $1, %xmm2, %eax
363 ; AVX512DQ-NEXT: andl $15, %eax
364 ; AVX512DQ-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm0, %xmm0
365 ; AVX512DQ-NEXT: vpextrw $2, %xmm2, %eax
366 ; AVX512DQ-NEXT: andl $15, %eax
367 ; AVX512DQ-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm0, %xmm0
368 ; AVX512DQ-NEXT: vpextrw $3, %xmm2, %eax
369 ; AVX512DQ-NEXT: andl $15, %eax
370 ; AVX512DQ-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm0, %xmm0
371 ; AVX512DQ-NEXT: vpextrw $4, %xmm2, %eax
372 ; AVX512DQ-NEXT: andl $15, %eax
373 ; AVX512DQ-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm0, %xmm0
374 ; AVX512DQ-NEXT: vpextrw $5, %xmm2, %eax
375 ; AVX512DQ-NEXT: andl $15, %eax
376 ; AVX512DQ-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm0, %xmm0
377 ; AVX512DQ-NEXT: vpextrw $6, %xmm2, %eax
378 ; AVX512DQ-NEXT: andl $15, %eax
379 ; AVX512DQ-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm0, %xmm0
380 ; AVX512DQ-NEXT: vpextrw $7, %xmm2, %eax
381 ; AVX512DQ-NEXT: andl $15, %eax
382 ; AVX512DQ-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm0, %xmm0
383 ; AVX512DQ-NEXT: vmovd %xmm1, %eax
384 ; AVX512DQ-NEXT: andl $15, %eax
385 ; AVX512DQ-NEXT: movzwl (%rsp,%rax,2), %eax
386 ; AVX512DQ-NEXT: vmovd %eax, %xmm2
387 ; AVX512DQ-NEXT: vpextrw $1, %xmm1, %eax
388 ; AVX512DQ-NEXT: andl $15, %eax
389 ; AVX512DQ-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm2, %xmm2
390 ; AVX512DQ-NEXT: vpextrw $2, %xmm1, %eax
391 ; AVX512DQ-NEXT: andl $15, %eax
392 ; AVX512DQ-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm2, %xmm2
393 ; AVX512DQ-NEXT: vpextrw $3, %xmm1, %eax
394 ; AVX512DQ-NEXT: andl $15, %eax
395 ; AVX512DQ-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm2, %xmm2
396 ; AVX512DQ-NEXT: vpextrw $4, %xmm1, %eax
397 ; AVX512DQ-NEXT: andl $15, %eax
398 ; AVX512DQ-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm2, %xmm2
399 ; AVX512DQ-NEXT: vpextrw $5, %xmm1, %eax
400 ; AVX512DQ-NEXT: andl $15, %eax
401 ; AVX512DQ-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm2, %xmm2
402 ; AVX512DQ-NEXT: vpextrw $6, %xmm1, %eax
403 ; AVX512DQ-NEXT: andl $15, %eax
404 ; AVX512DQ-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm2, %xmm2
405 ; AVX512DQ-NEXT: vpextrw $7, %xmm1, %eax
406 ; AVX512DQ-NEXT: andl $15, %eax
407 ; AVX512DQ-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm2, %xmm1
408 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
409 ; AVX512DQ-NEXT: movq %rbp, %rsp
410 ; AVX512DQ-NEXT: popq %rbp
211 ; AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
212 ; AVX512DQ-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
213 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
214 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm2, %ymm2
215 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm3
216 ; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
217 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm0
218 ; AVX512DQ-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
219 ; AVX512DQ-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
411220 ; AVX512DQ-NEXT: retq
412221 ;
413222 ; AVX512VL-LABEL: var_shuffle_v16i16:
414223 ; AVX512VL: # %bb.0:
415 ; AVX512VL-NEXT: pushq %rbp
416 ; AVX512VL-NEXT: movq %rsp, %rbp
417 ; AVX512VL-NEXT: andq $-32, %rsp
418 ; AVX512VL-NEXT: subq $64, %rsp
419 ; AVX512VL-NEXT: vextracti128 $1, %ymm1, %xmm2
420 ; AVX512VL-NEXT: vmovd %xmm2, %eax
421 ; AVX512VL-NEXT: vmovaps %ymm0, (%rsp)
422 ; AVX512VL-NEXT: andl $15, %eax
423 ; AVX512VL-NEXT: movzwl (%rsp,%rax,2), %eax
424 ; AVX512VL-NEXT: vmovd %eax, %xmm0
425 ; AVX512VL-NEXT: vpextrw $1, %xmm2, %eax
426 ; AVX512VL-NEXT: andl $15, %eax
427 ; AVX512VL-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm0, %xmm0
428 ; AVX512VL-NEXT: vpextrw $2, %xmm2, %eax
429 ; AVX512VL-NEXT: andl $15, %eax
430 ; AVX512VL-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm0, %xmm0
431 ; AVX512VL-NEXT: vpextrw $3, %xmm2, %eax
432 ; AVX512VL-NEXT: andl $15, %eax
433 ; AVX512VL-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm0, %xmm0
434 ; AVX512VL-NEXT: vpextrw $4, %xmm2, %eax
435 ; AVX512VL-NEXT: andl $15, %eax
436 ; AVX512VL-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm0, %xmm0
437 ; AVX512VL-NEXT: vpextrw $5, %xmm2, %eax
438 ; AVX512VL-NEXT: andl $15, %eax
439 ; AVX512VL-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm0, %xmm0
440 ; AVX512VL-NEXT: vpextrw $6, %xmm2, %eax
441 ; AVX512VL-NEXT: andl $15, %eax
442 ; AVX512VL-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm0, %xmm0
443 ; AVX512VL-NEXT: vpextrw $7, %xmm2, %eax
444 ; AVX512VL-NEXT: andl $15, %eax
445 ; AVX512VL-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm0, %xmm0
446 ; AVX512VL-NEXT: vmovd %xmm1, %eax
447 ; AVX512VL-NEXT: andl $15, %eax
448 ; AVX512VL-NEXT: movzwl (%rsp,%rax,2), %eax
449 ; AVX512VL-NEXT: vmovd %eax, %xmm2
450 ; AVX512VL-NEXT: vpextrw $1, %xmm1, %eax
451 ; AVX512VL-NEXT: andl $15, %eax
452 ; AVX512VL-NEXT: vpinsrw $1, (%rsp,%rax,2), %xmm2, %xmm2
453 ; AVX512VL-NEXT: vpextrw $2, %xmm1, %eax
454 ; AVX512VL-NEXT: andl $15, %eax
455 ; AVX512VL-NEXT: vpinsrw $2, (%rsp,%rax,2), %xmm2, %xmm2
456 ; AVX512VL-NEXT: vpextrw $3, %xmm1, %eax
457 ; AVX512VL-NEXT: andl $15, %eax
458 ; AVX512VL-NEXT: vpinsrw $3, (%rsp,%rax,2), %xmm2, %xmm2
459 ; AVX512VL-NEXT: vpextrw $4, %xmm1, %eax
460 ; AVX512VL-NEXT: andl $15, %eax
461 ; AVX512VL-NEXT: vpinsrw $4, (%rsp,%rax,2), %xmm2, %xmm2
462 ; AVX512VL-NEXT: vpextrw $5, %xmm1, %eax
463 ; AVX512VL-NEXT: andl $15, %eax
464 ; AVX512VL-NEXT: vpinsrw $5, (%rsp,%rax,2), %xmm2, %xmm2
465 ; AVX512VL-NEXT: vpextrw $6, %xmm1, %eax
466 ; AVX512VL-NEXT: andl $15, %eax
467 ; AVX512VL-NEXT: vpinsrw $6, (%rsp,%rax,2), %xmm2, %xmm2
468 ; AVX512VL-NEXT: vpextrw $7, %xmm1, %eax
469 ; AVX512VL-NEXT: andl $15, %eax
470 ; AVX512VL-NEXT: vpinsrw $7, (%rsp,%rax,2), %xmm2, %xmm1
471 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
472 ; AVX512VL-NEXT: movq %rbp, %rsp
473 ; AVX512VL-NEXT: popq %rbp
224 ; AVX512VL-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
225 ; AVX512VL-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
226 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
227 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm2, %ymm2
228 ; AVX512VL-NEXT: vextracti128 $1, %ymm0, %xmm3
229 ; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
230 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0
231 ; AVX512VL-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
232 ; AVX512VL-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
474233 ; AVX512VL-NEXT: retq
475234 ;
476235 ; AVX512VLBW-LABEL: var_shuffle_v16i16:
1001760 ;
1002761 ; AVX1-LABEL: var_shuffle_v16i16_from_v8i16:
1003762 ; AVX1: # %bb.0:
1004 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1005 ; AVX1-NEXT: vmovd %xmm2, %eax
1006 ; AVX1-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1007 ; AVX1-NEXT: andl $7, %eax
1008 ; AVX1-NEXT: movzwl -24(%rsp,%rax,2), %eax
1009 ; AVX1-NEXT: vmovd %eax, %xmm0
1010 ; AVX1-NEXT: vpextrw $1, %xmm2, %eax
1011 ; AVX1-NEXT: andl $7, %eax
1012 ; AVX1-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm0, %xmm0
1013 ; AVX1-NEXT: vpextrw $2, %xmm2, %eax
1014 ; AVX1-NEXT: andl $7, %eax
1015 ; AVX1-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm0, %xmm0
1016 ; AVX1-NEXT: vpextrw $3, %xmm2, %eax
1017 ; AVX1-NEXT: andl $7, %eax
1018 ; AVX1-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm0, %xmm0
1019 ; AVX1-NEXT: vpextrw $4, %xmm2, %eax
1020 ; AVX1-NEXT: andl $7, %eax
1021 ; AVX1-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm0, %xmm0
1022 ; AVX1-NEXT: vpextrw $5, %xmm2, %eax
1023 ; AVX1-NEXT: andl $7, %eax
1024 ; AVX1-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1025 ; AVX1-NEXT: vpextrw $6, %xmm2, %eax
1026 ; AVX1-NEXT: andl $7, %eax
1027 ; AVX1-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm0, %xmm0
1028 ; AVX1-NEXT: vpextrw $7, %xmm2, %eax
1029 ; AVX1-NEXT: andl $7, %eax
1030 ; AVX1-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm0, %xmm0
1031 ; AVX1-NEXT: vmovd %xmm1, %eax
1032 ; AVX1-NEXT: andl $7, %eax
1033 ; AVX1-NEXT: movzwl -24(%rsp,%rax,2), %eax
1034 ; AVX1-NEXT: vmovd %eax, %xmm2
1035 ; AVX1-NEXT: vpextrw $1, %xmm1, %eax
1036 ; AVX1-NEXT: andl $7, %eax
1037 ; AVX1-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm2, %xmm2
1038 ; AVX1-NEXT: vpextrw $2, %xmm1, %eax
1039 ; AVX1-NEXT: andl $7, %eax
1040 ; AVX1-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm2, %xmm2
1041 ; AVX1-NEXT: vpextrw $3, %xmm1, %eax
1042 ; AVX1-NEXT: andl $7, %eax
1043 ; AVX1-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm2, %xmm2
1044 ; AVX1-NEXT: vpextrw $4, %xmm1, %eax
1045 ; AVX1-NEXT: andl $7, %eax
1046 ; AVX1-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm2, %xmm2
1047 ; AVX1-NEXT: vpextrw $5, %xmm1, %eax
1048 ; AVX1-NEXT: andl $7, %eax
1049 ; AVX1-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm2, %xmm2
1050 ; AVX1-NEXT: vpextrw $6, %xmm1, %eax
1051 ; AVX1-NEXT: andl $7, %eax
1052 ; AVX1-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm2, %xmm2
1053 ; AVX1-NEXT: vpextrw $7, %xmm1, %eax
1054 ; AVX1-NEXT: andl $7, %eax
1055 ; AVX1-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm2, %xmm1
1056 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
763 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [514,514,514,514,514,514,514,514]
764 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm3
765 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [256,256,256,256,256,256,256,256]
766 ; AVX1-NEXT: vpaddw %xmm4, %xmm3, %xmm3
767 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
768 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1
769 ; AVX1-NEXT: vpaddw %xmm4, %xmm1, %xmm1
770 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
771 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm1, %xmm4
772 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm5
773 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
774 ; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm1, %xmm1
775 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm3, %xmm2
776 ; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm4
777 ; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
778 ; AVX1-NEXT: vpblendvb %xmm2, %xmm4, %xmm0, %xmm0
779 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1057780 ; AVX1-NEXT: retq
1058781 ;
1059782 ; AVX2-LABEL: var_shuffle_v16i16_from_v8i16:
1060783 ; AVX2: # %bb.0:
1061 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
1062 ; AVX2-NEXT: vmovd %xmm2, %eax
1063 ; AVX2-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1064 ; AVX2-NEXT: andl $7, %eax
1065 ; AVX2-NEXT: movzwl -24(%rsp,%rax,2), %eax
1066 ; AVX2-NEXT: vmovd %eax, %xmm0
1067 ; AVX2-NEXT: vpextrw $1, %xmm2, %eax
1068 ; AVX2-NEXT: andl $7, %eax
1069 ; AVX2-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm0, %xmm0
1070 ; AVX2-NEXT: vpextrw $2, %xmm2, %eax
1071 ; AVX2-NEXT: andl $7, %eax
1072 ; AVX2-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm0, %xmm0
1073 ; AVX2-NEXT: vpextrw $3, %xmm2, %eax
1074 ; AVX2-NEXT: andl $7, %eax
1075 ; AVX2-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm0, %xmm0
1076 ; AVX2-NEXT: vpextrw $4, %xmm2, %eax
1077 ; AVX2-NEXT: andl $7, %eax
1078 ; AVX2-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm0, %xmm0
1079 ; AVX2-NEXT: vpextrw $5, %xmm2, %eax
1080 ; AVX2-NEXT: andl $7, %eax
1081 ; AVX2-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1082 ; AVX2-NEXT: vpextrw $6, %xmm2, %eax
1083 ; AVX2-NEXT: andl $7, %eax
1084 ; AVX2-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm0, %xmm0
1085 ; AVX2-NEXT: vpextrw $7, %xmm2, %eax
1086 ; AVX2-NEXT: andl $7, %eax
1087 ; AVX2-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm0, %xmm0
1088 ; AVX2-NEXT: vmovd %xmm1, %eax
1089 ; AVX2-NEXT: andl $7, %eax
1090 ; AVX2-NEXT: movzwl -24(%rsp,%rax,2), %eax
1091 ; AVX2-NEXT: vmovd %eax, %xmm2
1092 ; AVX2-NEXT: vpextrw $1, %xmm1, %eax
1093 ; AVX2-NEXT: andl $7, %eax
1094 ; AVX2-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm2, %xmm2
1095 ; AVX2-NEXT: vpextrw $2, %xmm1, %eax
1096 ; AVX2-NEXT: andl $7, %eax
1097 ; AVX2-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm2, %xmm2
1098 ; AVX2-NEXT: vpextrw $3, %xmm1, %eax
1099 ; AVX2-NEXT: andl $7, %eax
1100 ; AVX2-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm2, %xmm2
1101 ; AVX2-NEXT: vpextrw $4, %xmm1, %eax
1102 ; AVX2-NEXT: andl $7, %eax
1103 ; AVX2-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm2, %xmm2
1104 ; AVX2-NEXT: vpextrw $5, %xmm1, %eax
1105 ; AVX2-NEXT: andl $7, %eax
1106 ; AVX2-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm2, %xmm2
1107 ; AVX2-NEXT: vpextrw $6, %xmm1, %eax
1108 ; AVX2-NEXT: andl $7, %eax
1109 ; AVX2-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm2, %xmm2
1110 ; AVX2-NEXT: vpextrw $7, %xmm1, %eax
1111 ; AVX2-NEXT: andl $7, %eax
1112 ; AVX2-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm2, %xmm1
1113 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
784 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
785 ; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
786 ; AVX2-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
787 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm2
788 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
789 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0
790 ; AVX2-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
791 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
1114792 ; AVX2-NEXT: retq
1115793 ;
1116794 ; AVX512F-LABEL: var_shuffle_v16i16_from_v8i16:
1117795 ; AVX512F: # %bb.0:
1118 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
1119 ; AVX512F-NEXT: vmovd %xmm2, %eax
1120 ; AVX512F-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1121 ; AVX512F-NEXT: andl $7, %eax
1122 ; AVX512F-NEXT: movzwl -24(%rsp,%rax,2), %eax
1123 ; AVX512F-NEXT: vmovd %eax, %xmm0
1124 ; AVX512F-NEXT: vpextrw $1, %xmm2, %eax
1125 ; AVX512F-NEXT: andl $7, %eax
1126 ; AVX512F-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm0, %xmm0
1127 ; AVX512F-NEXT: vpextrw $2, %xmm2, %eax
1128 ; AVX512F-NEXT: andl $7, %eax
1129 ; AVX512F-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm0, %xmm0
1130 ; AVX512F-NEXT: vpextrw $3, %xmm2, %eax
1131 ; AVX512F-NEXT: andl $7, %eax
1132 ; AVX512F-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm0, %xmm0
1133 ; AVX512F-NEXT: vpextrw $4, %xmm2, %eax
1134 ; AVX512F-NEXT: andl $7, %eax
1135 ; AVX512F-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm0, %xmm0
1136 ; AVX512F-NEXT: vpextrw $5, %xmm2, %eax
1137 ; AVX512F-NEXT: andl $7, %eax
1138 ; AVX512F-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1139 ; AVX512F-NEXT: vpextrw $6, %xmm2, %eax
1140 ; AVX512F-NEXT: andl $7, %eax
1141 ; AVX512F-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm0, %xmm0
1142 ; AVX512F-NEXT: vpextrw $7, %xmm2, %eax
1143 ; AVX512F-NEXT: andl $7, %eax
1144 ; AVX512F-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm0, %xmm0
1145 ; AVX512F-NEXT: vmovd %xmm1, %eax
1146 ; AVX512F-NEXT: andl $7, %eax
1147 ; AVX512F-NEXT: movzwl -24(%rsp,%rax,2), %eax
1148 ; AVX512F-NEXT: vmovd %eax, %xmm2
1149 ; AVX512F-NEXT: vpextrw $1, %xmm1, %eax
1150 ; AVX512F-NEXT: andl $7, %eax
1151 ; AVX512F-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm2, %xmm2
1152 ; AVX512F-NEXT: vpextrw $2, %xmm1, %eax
1153 ; AVX512F-NEXT: andl $7, %eax
1154 ; AVX512F-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm2, %xmm2
1155 ; AVX512F-NEXT: vpextrw $3, %xmm1, %eax
1156 ; AVX512F-NEXT: andl $7, %eax
1157 ; AVX512F-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm2, %xmm2
1158 ; AVX512F-NEXT: vpextrw $4, %xmm1, %eax
1159 ; AVX512F-NEXT: andl $7, %eax
1160 ; AVX512F-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm2, %xmm2
1161 ; AVX512F-NEXT: vpextrw $5, %xmm1, %eax
1162 ; AVX512F-NEXT: andl $7, %eax
1163 ; AVX512F-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm2, %xmm2
1164 ; AVX512F-NEXT: vpextrw $6, %xmm1, %eax
1165 ; AVX512F-NEXT: andl $7, %eax
1166 ; AVX512F-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm2, %xmm2
1167 ; AVX512F-NEXT: vpextrw $7, %xmm1, %eax
1168 ; AVX512F-NEXT: andl $7, %eax
1169 ; AVX512F-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm2, %xmm1
1170 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
796 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
797 ; AVX512F-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
798 ; AVX512F-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
799 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm2
800 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
801 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm0
802 ; AVX512F-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
803 ; AVX512F-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
1171804 ; AVX512F-NEXT: retq
1172805 ;
1173806 ; AVX512DQ-LABEL: var_shuffle_v16i16_from_v8i16:
1174807 ; AVX512DQ: # %bb.0:
1175 ; AVX512DQ-NEXT: vextracti128 $1, %ymm1, %xmm2
1176 ; AVX512DQ-NEXT: vmovd %xmm2, %eax
1177 ; AVX512DQ-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1178 ; AVX512DQ-NEXT: andl $7, %eax
1179 ; AVX512DQ-NEXT: movzwl -24(%rsp,%rax,2), %eax
1180 ; AVX512DQ-NEXT: vmovd %eax, %xmm0
1181 ; AVX512DQ-NEXT: vpextrw $1, %xmm2, %eax
1182 ; AVX512DQ-NEXT: andl $7, %eax
1183 ; AVX512DQ-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm0, %xmm0
1184 ; AVX512DQ-NEXT: vpextrw $2, %xmm2, %eax
1185 ; AVX512DQ-NEXT: andl $7, %eax
1186 ; AVX512DQ-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm0, %xmm0
1187 ; AVX512DQ-NEXT: vpextrw $3, %xmm2, %eax
1188 ; AVX512DQ-NEXT: andl $7, %eax
1189 ; AVX512DQ-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm0, %xmm0
1190 ; AVX512DQ-NEXT: vpextrw $4, %xmm2, %eax
1191 ; AVX512DQ-NEXT: andl $7, %eax
1192 ; AVX512DQ-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm0, %xmm0
1193 ; AVX512DQ-NEXT: vpextrw $5, %xmm2, %eax
1194 ; AVX512DQ-NEXT: andl $7, %eax
1195 ; AVX512DQ-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1196 ; AVX512DQ-NEXT: vpextrw $6, %xmm2, %eax
1197 ; AVX512DQ-NEXT: andl $7, %eax
1198 ; AVX512DQ-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm0, %xmm0
1199 ; AVX512DQ-NEXT: vpextrw $7, %xmm2, %eax
1200 ; AVX512DQ-NEXT: andl $7, %eax
1201 ; AVX512DQ-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm0, %xmm0
1202 ; AVX512DQ-NEXT: vmovd %xmm1, %eax
1203 ; AVX512DQ-NEXT: andl $7, %eax
1204 ; AVX512DQ-NEXT: movzwl -24(%rsp,%rax,2), %eax
1205 ; AVX512DQ-NEXT: vmovd %eax, %xmm2
1206 ; AVX512DQ-NEXT: vpextrw $1, %xmm1, %eax
1207 ; AVX512DQ-NEXT: andl $7, %eax
1208 ; AVX512DQ-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm2, %xmm2
1209 ; AVX512DQ-NEXT: vpextrw $2, %xmm1, %eax
1210 ; AVX512DQ-NEXT: andl $7, %eax
1211 ; AVX512DQ-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm2, %xmm2
1212 ; AVX512DQ-NEXT: vpextrw $3, %xmm1, %eax
1213 ; AVX512DQ-NEXT: andl $7, %eax
1214 ; AVX512DQ-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm2, %xmm2
1215 ; AVX512DQ-NEXT: vpextrw $4, %xmm1, %eax
1216 ; AVX512DQ-NEXT: andl $7, %eax
1217 ; AVX512DQ-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm2, %xmm2
1218 ; AVX512DQ-NEXT: vpextrw $5, %xmm1, %eax
1219 ; AVX512DQ-NEXT: andl $7, %eax
1220 ; AVX512DQ-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm2, %xmm2
1221 ; AVX512DQ-NEXT: vpextrw $6, %xmm1, %eax
1222 ; AVX512DQ-NEXT: andl $7, %eax
1223 ; AVX512DQ-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm2, %xmm2
1224 ; AVX512DQ-NEXT: vpextrw $7, %xmm1, %eax
1225 ; AVX512DQ-NEXT: andl $7, %eax
1226 ; AVX512DQ-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm2, %xmm1
1227 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
808 ; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
809 ; AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
810 ; AVX512DQ-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
811 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm2
812 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
813 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm0
814 ; AVX512DQ-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
815 ; AVX512DQ-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
1228816 ; AVX512DQ-NEXT: retq
1229817 ;
1230818 ; AVX512VL-LABEL: var_shuffle_v16i16_from_v8i16:
1231819 ; AVX512VL: # %bb.0:
1232 ; AVX512VL-NEXT: vextracti128 $1, %ymm1, %xmm2
1233 ; AVX512VL-NEXT: vmovd %xmm2, %eax
1234 ; AVX512VL-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1235 ; AVX512VL-NEXT: andl $7, %eax
1236 ; AVX512VL-NEXT: movzwl -24(%rsp,%rax,2), %eax
1237 ; AVX512VL-NEXT: vmovd %eax, %xmm0
1238 ; AVX512VL-NEXT: vpextrw $1, %xmm2, %eax
1239 ; AVX512VL-NEXT: andl $7, %eax
1240 ; AVX512VL-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm0, %xmm0
1241 ; AVX512VL-NEXT: vpextrw $2, %xmm2, %eax
1242 ; AVX512VL-NEXT: andl $7, %eax
1243 ; AVX512VL-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm0, %xmm0
1244 ; AVX512VL-NEXT: vpextrw $3, %xmm2, %eax
1245 ; AVX512VL-NEXT: andl $7, %eax
1246 ; AVX512VL-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm0, %xmm0
1247 ; AVX512VL-NEXT: vpextrw $4, %xmm2, %eax
1248 ; AVX512VL-NEXT: andl $7, %eax
1249 ; AVX512VL-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm0, %xmm0
1250 ; AVX512VL-NEXT: vpextrw $5, %xmm2, %eax
1251 ; AVX512VL-NEXT: andl $7, %eax
1252 ; AVX512VL-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm0, %xmm0
1253 ; AVX512VL-NEXT: vpextrw $6, %xmm2, %eax
1254 ; AVX512VL-NEXT: andl $7, %eax
1255 ; AVX512VL-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm0, %xmm0
1256 ; AVX512VL-NEXT: vpextrw $7, %xmm2, %eax
1257 ; AVX512VL-NEXT: andl $7, %eax
1258 ; AVX512VL-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm0, %xmm0
1259 ; AVX512VL-NEXT: vmovd %xmm1, %eax
1260 ; AVX512VL-NEXT: andl $7, %eax
1261 ; AVX512VL-NEXT: movzwl -24(%rsp,%rax,2), %eax
1262 ; AVX512VL-NEXT: vmovd %eax, %xmm2
1263 ; AVX512VL-NEXT: vpextrw $1, %xmm1, %eax
1264 ; AVX512VL-NEXT: andl $7, %eax
1265 ; AVX512VL-NEXT: vpinsrw $1, -24(%rsp,%rax,2), %xmm2, %xmm2
1266 ; AVX512VL-NEXT: vpextrw $2, %xmm1, %eax
1267 ; AVX512VL-NEXT: andl $7, %eax
1268 ; AVX512VL-NEXT: vpinsrw $2, -24(%rsp,%rax,2), %xmm2, %xmm2
1269 ; AVX512VL-NEXT: vpextrw $3, %xmm1, %eax
1270 ; AVX512VL-NEXT: andl $7, %eax
1271 ; AVX512VL-NEXT: vpinsrw $3, -24(%rsp,%rax,2), %xmm2, %xmm2
1272 ; AVX512VL-NEXT: vpextrw $4, %xmm1, %eax
1273 ; AVX512VL-NEXT: andl $7, %eax
1274 ; AVX512VL-NEXT: vpinsrw $4, -24(%rsp,%rax,2), %xmm2, %xmm2
1275 ; AVX512VL-NEXT: vpextrw $5, %xmm1, %eax
1276 ; AVX512VL-NEXT: andl $7, %eax
1277 ; AVX512VL-NEXT: vpinsrw $5, -24(%rsp,%rax,2), %xmm2, %xmm2
1278 ; AVX512VL-NEXT: vpextrw $6, %xmm1, %eax
1279 ; AVX512VL-NEXT: andl $7, %eax
1280 ; AVX512VL-NEXT: vpinsrw $6, -24(%rsp,%rax,2), %xmm2, %xmm2
1281 ; AVX512VL-NEXT: vpextrw $7, %xmm1, %eax
1282 ; AVX512VL-NEXT: andl $7, %eax
1283 ; AVX512VL-NEXT: vpinsrw $7, -24(%rsp,%rax,2), %xmm2, %xmm1
1284 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
820 ; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
821 ; AVX512VL-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
822 ; AVX512VL-NEXT: vpaddw {{.*}}(%rip), %ymm1, %ymm1
823 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm2
824 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
825 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0
826 ; AVX512VL-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
827 ; AVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
1285828 ; AVX512VL-NEXT: retq
1286829 ;
1287830 ; AVX512VLBW-LABEL: var_shuffle_v16i16_from_v8i16: