[llvm] [CodeGen] Notify delegate before erasing folded instruction (PR #222919)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 11 06:03:50 PDT 2026
https://github.com/GongJianxiang-Ben updated https://github.com/llvm/llvm-project/pull/222919
>From afe85ca4ac23a76bddb371b592080573889d7edc Mon Sep 17 00:00:00 2001
From: Gong Jianxiang <3247276791 at qq.com>
Date: Fri, 11 Sep 2026 18:50:20 +0800
Subject: [PATCH 1/2] [CodeGen] Notify delegate before erasing folded
instruction
---
llvm/lib/CodeGen/LiveRangeEdit.cpp | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp
index 1d6b835f16468..3059b4f583724 100644
--- a/llvm/lib/CodeGen/LiveRangeEdit.cpp
+++ b/llvm/lib/CodeGen/LiveRangeEdit.cpp
@@ -24,12 +24,12 @@ using namespace llvm;
#define DEBUG_TYPE "regalloc"
-STATISTIC(NumDCEDeleted, "Number of instructions deleted by DCE");
-STATISTIC(NumDCEFoldedLoads, "Number of single use loads folded after DCE");
-STATISTIC(NumFracRanges, "Number of live ranges fractured by DCE");
+STATISTIC(NumDCEDeleted, "Number of instructions deleted by DCE");
+STATISTIC(NumDCEFoldedLoads, "Number of single use loads folded after DCE");
+STATISTIC(NumFracRanges, "Number of live ranges fractured by DCE");
STATISTIC(NumReMaterialization, "Number of instructions rematerialized");
-void LiveRangeEdit::Delegate::anchor() { }
+void LiveRangeEdit::Delegate::anchor() {}
LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(Register OldReg,
bool createSubRanges) {
@@ -108,7 +108,7 @@ void LiveRangeEdit::eraseVirtReg(Register Reg) {
}
bool LiveRangeEdit::foldAsLoad(LiveInterval *LI,
- SmallVectorImpl<MachineInstr*> &Dead) {
+ SmallVectorImpl<MachineInstr *> &Dead) {
MachineInstr *DefMI = nullptr, *UseMI = nullptr;
// Check that there is a single def and a single use.
@@ -161,6 +161,8 @@ bool LiveRangeEdit::foldAsLoad(LiveInterval *LI,
// Update the call info.
if (UseMI->shouldUpdateAdditionalCallInfo())
UseMI->getMF()->moveAdditionalCallInfo(UseMI, FoldMI);
+ if (TheDelegate)
+ TheDelegate->LRE_WillEraseInstruction(UseMI);
UseMI->eraseFromParent();
DefMI->addRegisterDead(LI->reg(), nullptr);
Dead.push_back(DefMI);
@@ -339,10 +341,10 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink) {
MI->setDesc(TII.get(TargetOpcode::KILL));
// Remove all operands that aren't physregs.
for (unsigned i = MI->getNumOperands(); i; --i) {
- const MachineOperand &MO = MI->getOperand(i-1);
+ const MachineOperand &MO = MI->getOperand(i - 1);
if (MO.isReg() && MO.getReg().isPhysical())
continue;
- MI->removeOperand(i-1);
+ MI->removeOperand(i - 1);
}
MI->dropMemRefs(*MI->getMF());
LLVM_DEBUG(dbgs() << "Converted physregs to:\t" << *MI);
@@ -395,7 +397,7 @@ void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,
// LI may have been separated, create new intervals.
LI->RenumberValues();
- SmallVector<LiveInterval*, 8> SplitLIs;
+ SmallVector<LiveInterval *, 8> SplitLIs;
LIS.splitSeparateComponents(*LI, SplitLIs);
if (!SplitLIs.empty())
++NumFracRanges;
@@ -415,8 +417,7 @@ void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,
// Keep track of new virtual registers created via
// MachineRegisterInfo::createVirtualRegister.
-void
-LiveRangeEdit::MRI_NoteNewVirtualRegister(Register VReg) {
+void LiveRangeEdit::MRI_NoteNewVirtualRegister(Register VReg) {
if (VRM)
VRM->grow();
>From 45afaa06b7248cedaea596e6f7310f377f0c03d2 Mon Sep 17 00:00:00 2001
From: Gong Jianxiang <3247276791 at qq.com>
Date: Fri, 11 Sep 2026 20:02:40 +0800
Subject: [PATCH 2/2] Revert some formatting changes
---
llvm/lib/CodeGen/LiveRangeEdit.cpp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp
index 3059b4f583724..71b1dda6edd8c 100644
--- a/llvm/lib/CodeGen/LiveRangeEdit.cpp
+++ b/llvm/lib/CodeGen/LiveRangeEdit.cpp
@@ -24,12 +24,12 @@ using namespace llvm;
#define DEBUG_TYPE "regalloc"
-STATISTIC(NumDCEDeleted, "Number of instructions deleted by DCE");
-STATISTIC(NumDCEFoldedLoads, "Number of single use loads folded after DCE");
-STATISTIC(NumFracRanges, "Number of live ranges fractured by DCE");
+STATISTIC(NumDCEDeleted, "Number of instructions deleted by DCE");
+STATISTIC(NumDCEFoldedLoads, "Number of single use loads folded after DCE");
+STATISTIC(NumFracRanges, "Number of live ranges fractured by DCE");
STATISTIC(NumReMaterialization, "Number of instructions rematerialized");
-void LiveRangeEdit::Delegate::anchor() {}
+void LiveRangeEdit::Delegate::anchor() { }
LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(Register OldReg,
bool createSubRanges) {
@@ -108,7 +108,7 @@ void LiveRangeEdit::eraseVirtReg(Register Reg) {
}
bool LiveRangeEdit::foldAsLoad(LiveInterval *LI,
- SmallVectorImpl<MachineInstr *> &Dead) {
+ SmallVectorImpl<MachineInstr*> &Dead) {
MachineInstr *DefMI = nullptr, *UseMI = nullptr;
// Check that there is a single def and a single use.
@@ -341,10 +341,10 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink) {
MI->setDesc(TII.get(TargetOpcode::KILL));
// Remove all operands that aren't physregs.
for (unsigned i = MI->getNumOperands(); i; --i) {
- const MachineOperand &MO = MI->getOperand(i - 1);
+ const MachineOperand &MO = MI->getOperand(i-1);
if (MO.isReg() && MO.getReg().isPhysical())
continue;
- MI->removeOperand(i - 1);
+ MI->removeOperand(i-1);
}
MI->dropMemRefs(*MI->getMF());
LLVM_DEBUG(dbgs() << "Converted physregs to:\t" << *MI);
@@ -397,7 +397,7 @@ void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,
// LI may have been separated, create new intervals.
LI->RenumberValues();
- SmallVector<LiveInterval *, 8> SplitLIs;
+ SmallVector<LiveInterval*, 8> SplitLIs;
LIS.splitSeparateComponents(*LI, SplitLIs);
if (!SplitLIs.empty())
++NumFracRanges;
More information about the llvm-commits
mailing list