[llvm] r309915 - [RegisterCoalescer] Add wrapper for Erasing Instructions
Sameer AbuAsal via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 2 19:41:17 PDT 2017
Author: sabuasal
Date: Wed Aug 2 19:41:17 2017
New Revision: 309915
URL: http://llvm.org/viewvc/llvm-project?rev=309915&view=rev
Log:
[RegisterCoalescer] Add wrapper for Erasing Instructions
Summary:
To delete an instruction the coalescer needs to call eraseFromParent()
on the MachineInstr, insert it in the ErasedInstrs list and update the
Live Ranges structure. This patch re-factors the code to do all that in
one function. This will also fix cases where previous code wasn't
inserting deleted instructions in the ErasedList.
Reviewers: qcolombet, kparzysz
Reviewed By: qcolombet
Subscribers: MatzeB, llvm-commits, qcolombet
Differential Revision: https://reviews.llvm.org/D36204
Modified:
llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
Modified: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp?rev=309915&r1=309914&r2=309915&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (original)
+++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Wed Aug 2 19:41:17 2017
@@ -248,6 +248,16 @@ namespace {
}
}
+ /// Wrapper Method to do all the necessary work when an Instruction is
+ /// deleted.
+ /// Optimizations should use this to make sure that deleted instructions
+ /// are always accounted for.
+ void deleteInstr(MachineInstr* MI) {
+ ErasedInstrs.insert(MI);
+ LIS->RemoveMachineInstrFromMaps(*MI);
+ MI->eraseFromParent();
+ }
+
public:
static char ID; ///< Class identification, replacement for typeinfo
RegisterCoalescer() : MachineFunctionPass(ID) {
@@ -797,9 +807,7 @@ bool RegisterCoalescer::removeCopyByComm
S.MergeValueNumberInto(SubDVNI, SubBValNo);
}
- ErasedInstrs.insert(UseMI);
- LIS->RemoveMachineInstrFromMaps(*UseMI);
- UseMI->eraseFromParent();
+ deleteInstr(UseMI);
}
// Extend BValNo by merging in IntA live segments of AValNo. Val# definition
@@ -993,10 +1001,8 @@ bool RegisterCoalescer::removePartialRed
// Note: This is fine to remove the copy before updating the live-ranges.
// While updating the live-ranges, we only look at slot indices and
// never go back to the instruction.
- LIS->RemoveMachineInstrFromMaps(CopyMI);
// Mark instructions as deleted.
- ErasedInstrs.insert(&CopyMI);
- CopyMI.eraseFromParent();
+ deleteInstr(&CopyMI);
// Update the liveness.
SmallVector<SlotIndex, 8> EndPoints;
@@ -1578,8 +1584,7 @@ bool RegisterCoalescer::joinCopy(Machine
// Eliminate undefs.
if (!CP.isPhys() && eliminateUndefCopy(CopyMI)) {
- LIS->RemoveMachineInstrFromMaps(*CopyMI);
- CopyMI->eraseFromParent();
+ deleteInstr(CopyMI);
return false; // Not coalescable.
}
@@ -1607,8 +1612,7 @@ bool RegisterCoalescer::joinCopy(Machine
}
DEBUG(dbgs() << "\tMerged values: " << LI << '\n');
}
- LIS->RemoveMachineInstrFromMaps(*CopyMI);
- CopyMI->eraseFromParent();
+ deleteInstr(CopyMI);
return true;
}
@@ -1668,8 +1672,7 @@ bool RegisterCoalescer::joinCopy(Machine
if (!CP.isPartial() && !CP.isPhys()) {
if (adjustCopiesBackFrom(CP, CopyMI) ||
removeCopyByCommutingDef(CP, CopyMI)) {
- LIS->RemoveMachineInstrFromMaps(*CopyMI);
- CopyMI->eraseFromParent();
+ deleteInstr(CopyMI);
DEBUG(dbgs() << "\tTrivial!\n");
return true;
}
@@ -1855,8 +1858,7 @@ bool RegisterCoalescer::joinReservedPhys
}
}
- LIS->RemoveMachineInstrFromMaps(*CopyMI);
- CopyMI->eraseFromParent();
+ deleteInstr(CopyMI);
// We don't track kills for reserved registers.
MRI->clearKillFlags(CP.getSrcReg());
More information about the llvm-commits
mailing list