[llvm] [LLVM][CodeGen] Ensure optimizeIncrementingWhile only accepts scalable vectors. (PR #148351)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 12 02:51:59 PDT 2025
https://github.com/paulwalker-arm created https://github.com/llvm/llvm-project/pull/148351
Fixes https://github.com/llvm/llvm-project/issues/148347
>From dfc89f557d358612648b16aee664d7b6f4ed6c3a Mon Sep 17 00:00:00 2001
From: Paul Walker <paul.walker at arm.com>
Date: Sat, 12 Jul 2025 10:45:29 +0100
Subject: [PATCH] [LLVM][CodeGen] Ensure optimizeIncrementingWhile only accepts
scalable vectors.
Fixes https://github.com/llvm/llvm-project/issues/148347
---
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 3 ++-
llvm/test/CodeGen/AArch64/active_lane_mask.ll | 12 ++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 01be10be433fd..733cecf403c43 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -5509,7 +5509,8 @@ static SDValue optimizeIncrementingWhile(SDNode *N, SelectionDAG &DAG,
unsigned Op0 = N->getOpcode() == ISD::INTRINSIC_WO_CHAIN ? 1 : 0;
unsigned Op1 = N->getOpcode() == ISD::INTRINSIC_WO_CHAIN ? 2 : 1;
- if (!isa<ConstantSDNode>(N->getOperand(Op1)))
+ if (!N->getValueType(0).isScalableVector() ||
+ !isa<ConstantSDNode>(N->getOperand(Op1)))
return SDValue();
SDLoc DL(N);
diff --git a/llvm/test/CodeGen/AArch64/active_lane_mask.ll b/llvm/test/CodeGen/AArch64/active_lane_mask.ll
index cc05836d3d156..879dd4c12c0ba 100644
--- a/llvm/test/CodeGen/AArch64/active_lane_mask.ll
+++ b/llvm/test/CodeGen/AArch64/active_lane_mask.ll
@@ -460,6 +460,18 @@ entry:
ret <vscale x 16 x i1> %active.lane.mask
}
+define <8 x i1> @lane_mask_v8i1_imm3() {
+; CHECK-LABEL: lane_mask_v8i1_imm3:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: ptrue p0.b, vl3
+; CHECK-NEXT: mov z0.b, p0/z, #-1 // =0xffffffffffffffff
+; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
+; CHECK-NEXT: ret
+entry:
+ %active.lane.mask = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i64(i64 0, i64 3)
+ ret <8 x i1> %active.lane.mask
+}
+
declare <vscale x 32 x i1> @llvm.get.active.lane.mask.nxv32i1.i32(i32, i32)
declare <vscale x 16 x i1> @llvm.get.active.lane.mask.nxv16i1.i32(i32, i32)
declare <vscale x 8 x i1> @llvm.get.active.lane.mask.nxv8i1.i32(i32, i32)
More information about the llvm-commits
mailing list