[llvm] ARM: Fix losing subregisters in convertToThreeAddress (PR #141662)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 27 12:56:36 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-arm
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
No test since there appears to be disabled by default and there
is no test coverage using -enable-arm-3-addr-conv
---
Full diff: https://github.com/llvm/llvm-project/pull/141662.diff
1 Files Affected:
- (modified) llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp (+12-12)
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
index 69bc84a6733c0..beac0610ca4d7 100644
--- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -227,7 +227,7 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
return nullptr;
UpdateMI = BuildMI(MF, MI.getDebugLoc(),
get(isSub ? ARM::SUBri : ARM::ADDri), WBReg)
- .addReg(BaseReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
.addImm(Amt)
.add(predOps(Pred))
.add(condCodeOp());
@@ -236,8 +236,8 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
unsigned SOOpc = ARM_AM::getSORegOpc(ShOpc, Amt);
UpdateMI = BuildMI(MF, MI.getDebugLoc(),
get(isSub ? ARM::SUBrsi : ARM::ADDrsi), WBReg)
- .addReg(BaseReg)
- .addReg(OffReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
+ .addReg(OffReg, 0, Offset.getSubReg())
.addReg(0)
.addImm(SOOpc)
.add(predOps(Pred))
@@ -245,8 +245,8 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
} else
UpdateMI = BuildMI(MF, MI.getDebugLoc(),
get(isSub ? ARM::SUBrr : ARM::ADDrr), WBReg)
- .addReg(BaseReg)
- .addReg(OffReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
+ .addReg(OffReg, 0, Offset.getSubReg())
.add(predOps(Pred))
.add(condCodeOp());
break;
@@ -258,15 +258,15 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
// Immediate is 8-bits. It's guaranteed to fit in a so_imm operand.
UpdateMI = BuildMI(MF, MI.getDebugLoc(),
get(isSub ? ARM::SUBri : ARM::ADDri), WBReg)
- .addReg(BaseReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
.addImm(Amt)
.add(predOps(Pred))
.add(condCodeOp());
else
UpdateMI = BuildMI(MF, MI.getDebugLoc(),
get(isSub ? ARM::SUBrr : ARM::ADDrr), WBReg)
- .addReg(BaseReg)
- .addReg(OffReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
+ .addReg(OffReg, 0, Offset.getSubReg())
.add(predOps(Pred))
.add(condCodeOp());
break;
@@ -278,13 +278,13 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
if (isLoad)
MemMI =
BuildMI(MF, MI.getDebugLoc(), get(MemOpc), MI.getOperand(0).getReg())
- .addReg(WBReg)
+ .addReg(WBReg, 0, WB.getSubReg())
.addImm(0)
.addImm(Pred);
else
MemMI = BuildMI(MF, MI.getDebugLoc(), get(MemOpc))
.addReg(MI.getOperand(1).getReg())
- .addReg(WBReg)
+ .addReg(WBReg, 0, WB.getSubReg())
.addReg(0)
.addImm(0)
.addImm(Pred);
@@ -294,13 +294,13 @@ ARMBaseInstrInfo::convertToThreeAddress(MachineInstr &MI, LiveVariables *LV,
if (isLoad)
MemMI =
BuildMI(MF, MI.getDebugLoc(), get(MemOpc), MI.getOperand(0).getReg())
- .addReg(BaseReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
.addImm(0)
.addImm(Pred);
else
MemMI = BuildMI(MF, MI.getDebugLoc(), get(MemOpc))
.addReg(MI.getOperand(1).getReg())
- .addReg(BaseReg)
+ .addReg(BaseReg, 0, Base.getSubReg())
.addReg(0)
.addImm(0)
.addImm(Pred);
``````````
</details>
https://github.com/llvm/llvm-project/pull/141662
More information about the llvm-commits
mailing list