[llvm] a13c6ea - [CodeGen] Simplify ExpandPostRA::LowerSubregToReg. NFC. (#179634)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 4 04:06:46 PST 2026
Author: Jay Foad
Date: 2026-02-04T12:06:41Z
New Revision: a13c6ea80dbd4c0a26ad290595aaf79f25f8ffa9
URL: https://github.com/llvm/llvm-project/commit/a13c6ea80dbd4c0a26ad290595aaf79f25f8ffa9
DIFF: https://github.com/llvm/llvm-project/commit/a13c6ea80dbd4c0a26ad290595aaf79f25f8ffa9.diff
LOG: [CodeGen] Simplify ExpandPostRA::LowerSubregToReg. NFC. (#179634)
SUBREG_TO_REG always has a non-zero subreg index so DstSubReg can never
be the same as DstReg.
Added:
Modified:
llvm/lib/CodeGen/ExpandPostRAPseudos.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/ExpandPostRAPseudos.cpp b/llvm/lib/CodeGen/ExpandPostRAPseudos.cpp
index a94b609532c82..9692420c7020b 100644
--- a/llvm/lib/CodeGen/ExpandPostRAPseudos.cpp
+++ b/llvm/lib/CodeGen/ExpandPostRAPseudos.cpp
@@ -95,7 +95,11 @@ bool ExpandPostRA::LowerSubregToReg(MachineInstr *MI) {
LLVM_DEBUG(dbgs() << "subreg: CONVERTING: " << *MI);
- if (MI->allDefsAreDead()) {
+ if (MI->allDefsAreDead() || DstSubReg == InsReg) {
+ // No need to insert an identity copy instruction.
+ // Watch out for case like this:
+ // %rax = SUBREG_TO_REG 0, killed %eax, 3
+ // We must leave %rax live.
MI->setDesc(TII->get(TargetOpcode::KILL));
MI->removeOperand(3); // SubIdx
MI->removeOperand(1); // Imm
@@ -103,31 +107,15 @@ bool ExpandPostRA::LowerSubregToReg(MachineInstr *MI) {
return true;
}
- if (DstSubReg == InsReg) {
- // No need to insert an identity copy instruction.
- // Watch out for case like this:
- // %rax = SUBREG_TO_REG 0, killed %eax, 3
- // We must leave %rax live.
- if (DstReg != InsReg) {
- MI->setDesc(TII->get(TargetOpcode::KILL));
- MI->removeOperand(3); // SubIdx
- MI->removeOperand(1); // Imm
- LLVM_DEBUG(dbgs() << "subreg: replace by: " << *MI);
- return true;
- }
- LLVM_DEBUG(dbgs() << "subreg: eliminated!");
- } else {
- TII->copyPhysReg(*MBB, MI, MI->getDebugLoc(), DstSubReg, InsReg,
- MI->getOperand(2).isKill());
-
- // Implicitly define DstReg for subsequent uses.
- MachineBasicBlock::iterator CopyMI = MI;
- --CopyMI;
- CopyMI->addRegisterDefined(DstReg);
- LLVM_DEBUG(dbgs() << "subreg: " << *CopyMI);
- }
+ TII->copyPhysReg(*MBB, MI, MI->getDebugLoc(), DstSubReg, InsReg,
+ MI->getOperand(2).isKill());
+
+ // Implicitly define DstReg for subsequent uses.
+ MachineBasicBlock::iterator CopyMI = MI;
+ --CopyMI;
+ CopyMI->addRegisterDefined(DstReg);
+ LLVM_DEBUG(dbgs() << "subreg: " << *CopyMI);
- LLVM_DEBUG(dbgs() << '\n');
MBB->erase(MI);
return true;
}
More information about the llvm-commits
mailing list