Skip to content

Commit 450b580

Browse files
[fixup] Check return type of vector_extract
1 parent 34d0edc commit 450b580

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
@@ -20570,6 +20570,11 @@ static SDValue tryCombineWhileLo(SDNode *N,
2057020570
if (OffLo != 0 || OffHi != HalfSize)
2057120571
return SDValue();
2057220572

20573+
EVT HalfVec = Lo->getValueType(0);
20574+
if (HalfVec != Hi->getValueType(0) ||
20575+
HalfVec.getVectorMinNumElements() != HalfSize)
20576+
return SDValue();
20577+
2057320578
SelectionDAG &DAG = DCI.DAG;
2057420579
SDLoc DL(N);
2057520580
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)