Skip to content

Commit cb97c37

Browse files
[fixup] Check return type of vector_extract
1 parent 2447ede commit cb97c37

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20557,6 +20557,11 @@ static SDValue tryCombineWhileLo(SDNode *N,
2055720557
if (OffLo != 0 || OffHi != HalfSize)
2055820558
return SDValue();
2055920559

20560+
EVT HalfVec = Lo->getValueType(0);
20561+
if (HalfVec != Hi->getValueType(0) ||
20562+
HalfVec.getVectorMinNumElements() != HalfSize)
20563+
return SDValue();
20564+
2056020565
SelectionDAG &DAG = DCI.DAG;
2056120566
SDLoc DL(N);
2056220567
SDValue ID =

llvm/test/CodeGen/AArch64/get-active-lane-mask-extract.ll

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,32 @@ define void @test_boring_case_2x2bit_mask(i64 %i, i64 %n) #0 {
8585
ret void
8686
}
8787

88+
89+
define void @test_partial_extract(i64 %i, i64 %n) #0 {
90+
; CHECK-SVE-LABEL: test_partial_extract:
91+
; CHECK-SVE: // %bb.0:
92+
; CHECK-SVE-NEXT: whilelo p0.h, x0, x1
93+
; CHECK-SVE-NEXT: punpklo p1.h, p0.b
94+
; CHECK-SVE-NEXT: punpkhi p2.h, p0.b
95+
; CHECK-SVE-NEXT: punpklo p0.h, p1.b
96+
; CHECK-SVE-NEXT: punpklo p1.h, p2.b
97+
; CHECK-SVE-NEXT: b use
98+
;
99+
; CHECK-SVE2p1-LABEL: test_partial_extract:
100+
; CHECK-SVE2p1: // %bb.0:
101+
; CHECK-SVE2p1-NEXT: whilelo p0.h, x0, x1
102+
; CHECK-SVE2p1-NEXT: punpklo p1.h, p0.b
103+
; CHECK-SVE2p1-NEXT: punpkhi p2.h, p0.b
104+
; CHECK-SVE2p1-NEXT: punpklo p0.h, p1.b
105+
; CHECK-SVE2p1-NEXT: punpklo p1.h, p2.b
106+
; CHECK-SVE2p1-NEXT: b use
107+
%r = call <vscale x 8 x i1> @llvm.get.active.lane.mask.nxv8i1.i64(i64 %i, i64 %n)
108+
%v0 = call <vscale x 2 x i1> @llvm.vector.extract.nxv2i1.nxv8i1.i64(<vscale x 8 x i1> %r, i64 0)
109+
%v1 = call <vscale x 2 x i1> @llvm.vector.extract.nxv2i1.nxv8i1.i64(<vscale x 8 x i1> %r, i64 4)
110+
tail call void @use(<vscale x 2 x i1> %v0, <vscale x 2 x i1> %v1)
111+
ret void
112+
}
113+
88114
declare void @use(...)
89115

90116
attributes #0 = { nounwind }

0 commit comments

Comments
 (0)