Lines Matching refs:AVX512F
2 …RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512F
7 ; AVX512F-LABEL: shuf2i1_1_0:
8 ; AVX512F: # %bb.0:
9 ; AVX512F-NEXT: vpsllq $63, %xmm0, %xmm0
10 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
11 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
12 ; AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
13 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
14 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
15 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
16 ; AVX512F-NEXT: vzeroupper
17 ; AVX512F-NEXT: retq
44 ; AVX512F-LABEL: shuf2i1_1_2:
45 ; AVX512F: # %bb.0:
46 ; AVX512F-NEXT: vpsllq $63, %xmm0, %xmm0
47 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
48 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
49 ; AVX512F-NEXT: vmovdqa {{.*#+}} xmm1 = [18446744073709551615,0]
50 ; AVX512F-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
51 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
52 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
53 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
54 ; AVX512F-NEXT: vzeroupper
55 ; AVX512F-NEXT: retq
85 ; AVX512F-LABEL: shuf4i1_3_2_10:
86 ; AVX512F: # %bb.0:
87 ; AVX512F-NEXT: vpslld $31, %xmm0, %xmm0
88 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1
89 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
90 ; AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
91 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1
92 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
93 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
94 ; AVX512F-NEXT: vzeroupper
95 ; AVX512F-NEXT: retq
122 ; AVX512F-LABEL: shuf8i1_3_6_1_0_3_7_7_0:
123 ; AVX512F: # %bb.0:
124 ; AVX512F-NEXT: vpcmpeqq %zmm2, %zmm0, %k1
125 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
126 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [3,6,1,0,3,7,7,0]
127 ; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
128 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
129 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
130 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
131 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
132 ; AVX512F-NEXT: vzeroupper
133 ; AVX512F-NEXT: retq
165 ; AVX512F-LABEL: shuf16i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:
166 ; AVX512F: # %bb.0:
167 ; AVX512F-NEXT: vpcmpeqd %zmm2, %zmm0, %k1
168 ; AVX512F-NEXT: vpcmpeqd %zmm3, %zmm1, %k2
169 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
170 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
171 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
172 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm1, %zmm2
173 ; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k1
174 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
175 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
176 ; AVX512F-NEXT: vzeroupper
177 ; AVX512F-NEXT: retq
212 ; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0:
213 ; AVX512F: # %bb.0:
214 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm1
215 ; AVX512F-NEXT: vpslld $31, %zmm1, %zmm1
216 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k1
217 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
218 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
219 ; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
220 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k2
221 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
222 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
223 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
224 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm1, %zmm2
225 ; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k1
226 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
227 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
228 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
229 ; AVX512F-NEXT: retq
266 ; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_i…
267 ; AVX512F: # %bb.0:
268 ; AVX512F-NEXT: vpxor %xmm3, %xmm3, %xmm3
269 ; AVX512F-NEXT: vpcmpeqw %ymm3, %ymm0, %ymm4
270 ; AVX512F-NEXT: vpmovsxwd %ymm4, %zmm4
271 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k1
272 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm0
273 ; AVX512F-NEXT: vpcmpeqw %ymm3, %ymm0, %ymm0
274 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0
275 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k2
276 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
277 ; AVX512F-NEXT: vpternlogd $255, %zmm3, %zmm3, %zmm3 {%k1} {z}
278 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
279 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm3, %zmm4
280 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k1
281 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
282 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
283 ; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0
284 ; AVX512F-NEXT: vpternlogq $202, %zmm2, %zmm1, %zmm0
285 ; AVX512F-NEXT: retq
325 ; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_i…
326 ; AVX512F: # %bb.0:
327 ; AVX512F-NEXT: vpxor %xmm3, %xmm3, %xmm3
328 ; AVX512F-NEXT: vpcmpeqb %ymm3, %ymm0, %ymm0
329 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm3
330 ; AVX512F-NEXT: vptestmd %zmm3, %zmm3, %k1
331 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
332 ; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
333 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k2
334 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
335 ; AVX512F-NEXT: vpternlogd $255, %zmm3, %zmm3, %zmm3 {%k1} {z}
336 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
337 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm3, %zmm4
338 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k1
339 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
340 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
341 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
342 ; AVX512F-NEXT: vpblendvb %ymm0, %ymm1, %ymm2, %ymm0
343 ; AVX512F-NEXT: retq
382 ; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_i…
383 ; AVX512F: # %bb.0:
384 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k1
385 ; AVX512F-NEXT: vptestnmd %zmm1, %zmm1, %k2
386 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
387 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
388 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
389 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm1, %zmm4
390 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k1
391 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
392 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
393 ; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0
394 ; AVX512F-NEXT: vpternlogq $202, %zmm3, %zmm2, %zmm0
395 ; AVX512F-NEXT: retq
433 ; AVX512F-LABEL: shuf32i1_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_3_6_22_12_3_7_7_0_3_6_1_13_3_21_7_0_i…
434 ; AVX512F: # %bb.0:
435 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k1
436 ; AVX512F-NEXT: vptestnmd %zmm1, %zmm1, %k2
437 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
438 ; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
439 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm4 = [3,6,22,12,3,7,7,0,3,6,1,13,3,21,7,0]
440 ; AVX512F-NEXT: vpermi2d %zmm0, %zmm1, %zmm4
441 ; AVX512F-NEXT: vptestmd %zmm4, %zmm4, %k1
442 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
443 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
444 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
445 ; AVX512F-NEXT: vpblendvb %ymm0, %ymm2, %ymm3, %ymm0
446 ; AVX512F-NEXT: retq
484 ; AVX512F-LABEL: shuf8i1_u_2_u_u_2_u_2_u:
485 ; AVX512F: # %bb.0:
486 ; AVX512F-NEXT: kmovw %edi, %k1
487 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
488 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
489 ; AVX512F-NEXT: vpbroadcastq %xmm0, %zmm0
490 ; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm0
491 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
492 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
493 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
494 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
495 ; AVX512F-NEXT: vzeroupper
496 ; AVX512F-NEXT: retq
528 ; AVX512F-LABEL: shuf8i1_10_2_9_u_3_u_2_u:
529 ; AVX512F: # %bb.0:
530 ; AVX512F-NEXT: kmovw %edi, %k1
531 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
532 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
533 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = <8,2,10,u,3,u,2,u>
534 ; AVX512F-NEXT: vpermi2q %zmm1, %zmm0, %zmm2
535 ; AVX512F-NEXT: vpsllq $63, %zmm2, %zmm0
536 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
537 ; AVX512F-NEXT: kmovw %k0, %eax
538 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
539 ; AVX512F-NEXT: vzeroupper
540 ; AVX512F-NEXT: retq
576 ; AVX512F-LABEL: shuf8i1_0_1_4_5_u_u_u_u:
577 ; AVX512F: # %bb.0:
578 ; AVX512F-NEXT: kmovw %edi, %k1
579 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
580 ; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5,0,1,0,1]
581 ; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm0
582 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
583 ; AVX512F-NEXT: kmovw %k0, %eax
584 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
585 ; AVX512F-NEXT: vzeroupper
586 ; AVX512F-NEXT: retq
618 ; AVX512F-LABEL: shuf8i1_9_6_1_0_3_7_7_0:
619 ; AVX512F: # %bb.0:
620 ; AVX512F-NEXT: kmovw %edi, %k1
621 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
622 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
623 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [8,6,1,0,3,7,7,0]
624 ; AVX512F-NEXT: vpermi2q %zmm1, %zmm0, %zmm2
625 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k0
626 ; AVX512F-NEXT: kmovw %k0, %eax
627 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
628 ; AVX512F-NEXT: vzeroupper
629 ; AVX512F-NEXT: retq
664 ; AVX512F-LABEL: shuf8i1_9_6_1_10_3_7_7_0:
665 ; AVX512F: # %bb.0:
666 ; AVX512F-NEXT: kmovw %edi, %k1
667 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
668 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [9,1,2,10,4,5,6,7]
669 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
670 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
671 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k0
672 ; AVX512F-NEXT: kmovw %k0, %eax
673 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
674 ; AVX512F-NEXT: vzeroupper
675 ; AVX512F-NEXT: retq
706 ; AVX512F-LABEL: shuf8i1__9_6_1_10_3_7_7_1:
707 ; AVX512F: # %bb.0:
708 ; AVX512F-NEXT: kmovw %edi, %k1
709 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
710 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [9,6,1,0,3,7,7,1]
711 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [18446744073709551615,18446744073709551615,0,0,0,0,0,0]
712 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
713 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k0
714 ; AVX512F-NEXT: kmovw %k0, %eax
715 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
716 ; AVX512F-NEXT: vzeroupper
717 ; AVX512F-NEXT: retq
750 ; AVX512F-LABEL: shuf8i1_9_6_1_10_3_7_7_0_all_ones:
751 ; AVX512F: # %bb.0:
752 ; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm0
753 ; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm0
754 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
755 ; AVX512F-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
756 ; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm1 = [9,1,2,3,4,5,6,7]
757 ; AVX512F-NEXT: vpternlogd $255, %zmm2, %zmm2, %zmm2
758 ; AVX512F-NEXT: vpermt2q %zmm0, %zmm1, %zmm2
759 ; AVX512F-NEXT: vptestmq %zmm2, %zmm2, %k0
760 ; AVX512F-NEXT: kmovw %k0, %eax
761 ; AVX512F-NEXT: # kill: def $al killed $al killed $eax
762 ; AVX512F-NEXT: vzeroupper
763 ; AVX512F-NEXT: retq
799 ; AVX512F-LABEL: shuf16i1_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:
800 ; AVX512F: # %bb.0:
801 ; AVX512F-NEXT: kmovw %edi, %k1
802 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
803 ; AVX512F-NEXT: vpbroadcastd %xmm0, %zmm0
804 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
805 ; AVX512F-NEXT: kmovw %k0, %eax
806 ; AVX512F-NEXT: # kill: def $ax killed $ax killed $eax
807 ; AVX512F-NEXT: vzeroupper
808 ; AVX512F-NEXT: retq
838 ; AVX512F-LABEL: shuf64i1_zero:
839 ; AVX512F: # %bb.0:
840 ; AVX512F-NEXT: kmovw %edi, %k1
841 ; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
842 ; AVX512F-NEXT: vpbroadcastd %xmm0, %zmm0
843 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
844 ; AVX512F-NEXT: kmovw %k0, %eax
845 ; AVX512F-NEXT: kmovw %k0, %ecx
846 ; AVX512F-NEXT: shll $16, %ecx
847 ; AVX512F-NEXT: orl %eax, %ecx
848 ; AVX512F-NEXT: movq %rcx, %rax
849 ; AVX512F-NEXT: shlq $32, %rax
850 ; AVX512F-NEXT: orq %rcx, %rax
851 ; AVX512F-NEXT: vzeroupper
852 ; AVX512F-NEXT: retq