Skip to content

Commit 6c2e26a

Browse files
[LLVM][CodeGen] Ensure optimizeIncrementingWhile only accepts scalable vectors. (#148351)
Fixes #148347
1 parent 70bc7d1 commit 6c2e26a

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5512,7 +5512,8 @@ static SDValue optimizeIncrementingWhile(SDNode *N, SelectionDAG &DAG,
55125512
unsigned Op0 = N->getOpcode() == ISD::INTRINSIC_WO_CHAIN ? 1 : 0;
55135513
unsigned Op1 = N->getOpcode() == ISD::INTRINSIC_WO_CHAIN ? 2 : 1;
55145514

5515-
if (!isa<ConstantSDNode>(N->getOperand(Op1)))
5515+
if (!N->getValueType(0).isScalableVector() ||
5516+
!isa<ConstantSDNode>(N->getOperand(Op1)))
55165517
return SDValue();
55175518

55185519
SDLoc DL(N);

llvm/test/CodeGen/AArch64/active_lane_mask.ll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,18 @@ entry:
460460
ret <vscale x 16 x i1> %active.lane.mask
461461
}
462462

463+
define <8 x i1> @lane_mask_v8i1_imm3() {
464+
; CHECK-LABEL: lane_mask_v8i1_imm3:
465+
; CHECK: // %bb.0: // %entry
466+
; CHECK-NEXT: ptrue p0.b, vl3
467+
; CHECK-NEXT: mov z0.b, p0/z, #-1 // =0xffffffffffffffff
468+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
469+
; CHECK-NEXT: ret
470+
entry:
471+
%active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i64(i64 0, i64 3)
472+
ret <8 x i1> %active.lane.mask
473+
}
474+
463475
declare <vscale x 32 x i1> @llvm.get.active.lane.mask.nxv32i1.i32(i32, i32)
464476
declare <vscale x 16 x i1> @llvm.get.active.lane.mask.nxv16i1.i32(i32, i32)
465477
declare <vscale x 8 x i1> @llvm.get.active.lane.mask.nxv8i1.i32(i32, i32)

0 commit comments

Comments
 (0)