Skip to content

Commit 878a24d

Browse files
committed
[X86] Add PR46461 test case
1 parent 5883f6f commit 878a24d

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

llvm/test/CodeGen/X86/buildvec-insertvec.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,59 @@ define <16 x i8> @test_buildvector_v16i8_register_zero_2(i8 %a2, i8 %a3, i8 %a6,
723723
ret <16 x i8> %ins15
724724
}
725725

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+
726779
; OSS-Fuzz #5688
727780
; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5688
728781
define <4 x i32> @ossfuzz5688(i32 %a0) {

0 commit comments

Comments
 (0)