@@ -723,6 +723,59 @@ define <16 x i8> @test_buildvector_v16i8_register_zero_2(i8 %a2, i8 %a3, i8 %a6,
723
723
ret <16 x i8 > %ins15
724
724
}
725
725
726
+ ; TODO - PR46461 - reduceBuildVecExtToExtBuildVec is breaking the splat(zero_extend)
727
+ ; pattern, resulting in th BUILD_VECTOR lowering to individual insertions into zero vector.
728
+
729
+ define void @PR46461 (i16 %x , <16 x i32 >* %y ) {
730
+ ; SSE-LABEL: PR46461:
731
+ ; SSE: # %bb.0:
732
+ ; SSE-NEXT: shrl %edi
733
+ ; SSE-NEXT: andl $32767, %edi # imm = 0x7FFF
734
+ ; SSE-NEXT: movd %edi, %xmm0
735
+ ; SSE-NEXT: pinsrw $2, %edi, %xmm0
736
+ ; SSE-NEXT: pinsrw $4, %edi, %xmm0
737
+ ; SSE-NEXT: pinsrw $6, %edi, %xmm0
738
+ ; SSE-NEXT: movdqa %xmm0, 48(%rsi)
739
+ ; SSE-NEXT: movdqa %xmm0, 32(%rsi)
740
+ ; SSE-NEXT: movdqa %xmm0, 16(%rsi)
741
+ ; SSE-NEXT: movdqa %xmm0, (%rsi)
742
+ ; SSE-NEXT: retq
743
+ ;
744
+ ; AVX1-LABEL: PR46461:
745
+ ; AVX1: # %bb.0:
746
+ ; AVX1-NEXT: shrl %edi
747
+ ; AVX1-NEXT: andl $32767, %edi # imm = 0x7FFF
748
+ ; AVX1-NEXT: vmovd %edi, %xmm0
749
+ ; AVX1-NEXT: vpinsrw $2, %edi, %xmm0, %xmm0
750
+ ; AVX1-NEXT: vpinsrw $4, %edi, %xmm0, %xmm0
751
+ ; AVX1-NEXT: vpinsrw $6, %edi, %xmm0, %xmm0
752
+ ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
753
+ ; AVX1-NEXT: vmovaps %ymm0, 32(%rsi)
754
+ ; AVX1-NEXT: vmovaps %ymm0, (%rsi)
755
+ ; AVX1-NEXT: vzeroupper
756
+ ; AVX1-NEXT: retq
757
+ ;
758
+ ; AVX2-LABEL: PR46461:
759
+ ; AVX2: # %bb.0:
760
+ ; AVX2-NEXT: shrl %edi
761
+ ; AVX2-NEXT: andl $32767, %edi # imm = 0x7FFF
762
+ ; AVX2-NEXT: vmovd %edi, %xmm0
763
+ ; AVX2-NEXT: vpinsrw $2, %edi, %xmm0, %xmm0
764
+ ; AVX2-NEXT: vpinsrw $4, %edi, %xmm0, %xmm0
765
+ ; AVX2-NEXT: vpinsrw $6, %edi, %xmm0, %xmm0
766
+ ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
767
+ ; AVX2-NEXT: vmovdqa %ymm0, 32(%rsi)
768
+ ; AVX2-NEXT: vmovdqa %ymm0, (%rsi)
769
+ ; AVX2-NEXT: vzeroupper
770
+ ; AVX2-NEXT: retq
771
+ %z = lshr i16 %x , 1
772
+ %a = zext i16 %z to i32
773
+ %b = insertelement <16 x i32 > undef , i32 %a , i32 0
774
+ %c = shufflevector <16 x i32 > %b , <16 x i32 > undef , <16 x i32 > zeroinitializer
775
+ store <16 x i32 > %c , <16 x i32 >* %y
776
+ ret void
777
+ }
778
+
726
779
; OSS-Fuzz #5688
727
780
; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5688
728
781
define <4 x i32 > @ossfuzz5688 (i32 %a0 ) {
0 commit comments