@@ -537,3 +537,62 @@ define <64 x i8> @pr42355_v64i8(i1 %c, <64 x i8> %x, <64 x i8> %y) {
537
537
ret <64 x i8 > %a
538
538
}
539
539
540
+ ; This would crash because AVX512 has legal vector select
541
+ ; condition values that are not 256/512-bit vectors.
542
+
543
+ define <16 x i64 > @narrowExtractedVectorSelect_crash (<16 x i64 > %arg , <16 x i16 > %arg1 ) #0 {
544
+ ; X86-AVX512F-LABEL: narrowExtractedVectorSelect_crash:
545
+ ; X86-AVX512F: # %bb.0:
546
+ ; X86-AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
547
+ ; X86-AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
548
+ ; X86-AVX512F-NEXT: kunpckbw %k0, %k1, %k1
549
+ ; X86-AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
550
+ ; X86-AVX512F-NEXT: vpmovdw %zmm0, %ymm0
551
+ ; X86-AVX512F-NEXT: vpand %ymm2, %ymm0, %ymm1
552
+ ; X86-AVX512F-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
553
+ ; X86-AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm1
554
+ ; X86-AVX512F-NEXT: vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
555
+ ; X86-AVX512F-NEXT: retl
556
+ ;
557
+ ; X64-AVX512F-LABEL: narrowExtractedVectorSelect_crash:
558
+ ; X64-AVX512F: # %bb.0:
559
+ ; X64-AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
560
+ ; X64-AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1
561
+ ; X64-AVX512F-NEXT: kunpckbw %k0, %k1, %k1
562
+ ; X64-AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
563
+ ; X64-AVX512F-NEXT: vpmovdw %zmm0, %ymm0
564
+ ; X64-AVX512F-NEXT: vpand %ymm2, %ymm0, %ymm1
565
+ ; X64-AVX512F-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
566
+ ; X64-AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm1
567
+ ; X64-AVX512F-NEXT: vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
568
+ ; X64-AVX512F-NEXT: retq
569
+ ;
570
+ ; X86-AVX512BW-LABEL: narrowExtractedVectorSelect_crash:
571
+ ; X86-AVX512BW: # %bb.0:
572
+ ; X86-AVX512BW-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2
573
+ ; X86-AVX512BW-NEXT: vptestmq %zmm0, %zmm0, %k0
574
+ ; X86-AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k1
575
+ ; X86-AVX512BW-NEXT: kunpckbw %k0, %k1, %k1
576
+ ; X86-AVX512BW-NEXT: vmovdqu16 %zmm2, %zmm1 {%k1} {z}
577
+ ; X86-AVX512BW-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
578
+ ; X86-AVX512BW-NEXT: vextracti128 $1, %ymm1, %xmm1
579
+ ; X86-AVX512BW-NEXT: vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
580
+ ; X86-AVX512BW-NEXT: retl
581
+ ;
582
+ ; X64-AVX512BW-LABEL: narrowExtractedVectorSelect_crash:
583
+ ; X64-AVX512BW: # %bb.0:
584
+ ; X64-AVX512BW-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2
585
+ ; X64-AVX512BW-NEXT: vptestmq %zmm0, %zmm0, %k0
586
+ ; X64-AVX512BW-NEXT: vptestmq %zmm1, %zmm1, %k1
587
+ ; X64-AVX512BW-NEXT: kunpckbw %k0, %k1, %k1
588
+ ; X64-AVX512BW-NEXT: vmovdqu16 %zmm2, %zmm1 {%k1} {z}
589
+ ; X64-AVX512BW-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
590
+ ; X64-AVX512BW-NEXT: vextracti128 $1, %ymm1, %xmm1
591
+ ; X64-AVX512BW-NEXT: vpmovzxwq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero
592
+ ; X64-AVX512BW-NEXT: retq
593
+ %tmp = icmp ne <16 x i64 > %arg , zeroinitializer
594
+ %tmp2 = select <16 x i1 > %tmp , <16 x i16 > %arg1 , <16 x i16 > zeroinitializer
595
+ %tmp3 = zext <16 x i16 > %tmp2 to <16 x i64 >
596
+ ret <16 x i64 > %tmp3
597
+ }
598
+
0 commit comments