[llvm] ARM: Mark cpsr def dead in FastISel integer extends (PR #227705)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 30 06:19:50 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-arm
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Co-authored-by: Claude Opus 5 <noreply@<!-- -->anthropic.com>
---
Full diff: https://github.com/llvm/llvm-project/pull/227705.diff
2 Files Affected:
- (modified) llvm/lib/Target/ARM/ARMFastISel.cpp (+1-1)
- (added) llvm/test/CodeGen/ARM/fast-isel-ext-dead-cpsr.ll (+19)
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMFastISel.cpp b/llvm/lib/Target/ARM/ARMFastISel.cpp
index 88ee3156ee339..e79f8d6557abb 100644
--- a/llvm/lib/Target/ARM/ARMFastISel.cpp
+++ b/llvm/lib/Target/ARM/ARMFastISel.cpp
@@ -2803,7 +2803,7 @@ Register ARMFastISel::ARMEmitIntExt(MVT SrcVT, Register SrcReg, MVT DestVT,
MachineInstrBuilder MIB = BuildMI(
*FuncInfo.MBB, FuncInfo.InsertPt, MIMD, TII.get(Opcode), ResultReg);
if (setsCPSR)
- MIB.addReg(ARM::CPSR, RegState::Define);
+ MIB.addReg(ARM::CPSR, RegState::Define | RegState::Dead);
SrcReg = constrainOperandRegClass(TII.get(Opcode), SrcReg, 1 + setsCPSR);
MIB.addReg(SrcReg, getKillRegState(isKill))
.addImm(ImmEnc)
diff --git a/llvm/test/CodeGen/ARM/fast-isel-ext-dead-cpsr.ll b/llvm/test/CodeGen/ARM/fast-isel-ext-dead-cpsr.ll
new file mode 100644
index 0000000000000..30b8534c9ba33
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/fast-isel-ext-dead-cpsr.ll
@@ -0,0 +1,19 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -O0 -fast-isel-abort=1 -mtriple=thumbv7-apple-ios -stop-after=finalize-isel -o - %s | FileCheck %s
+
+; The flags set by the 16-bit Thumb shifts used to extend are dead.
+
+define i32 @sext_1_32(i1 %a) nounwind ssp {
+ ; CHECK-LABEL: name: sext_1_32
+ ; CHECK: bb.0 (%ir-block.0):
+ ; CHECK-NEXT: liveins: $r0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $r0
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:tgpr = COPY [[COPY]]
+ ; CHECK-NEXT: %3:tgpr, dead $cpsr = tLSLri [[COPY1]], 31, 14 /* CC::al */, $noreg
+ ; CHECK-NEXT: %4:tgpr, dead $cpsr = tASRri killed %3, 31, 14 /* CC::al */, $noreg
+ ; CHECK-NEXT: $r0 = COPY %4
+ ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
+ %r = sext i1 %a to i32
+ ret i32 %r
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/227705
More information about the llvm-commits
mailing list