mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
[Cleanup] Utility function to erase instruction and mark DBG_Values
New function to erase a machine instruction and mark DBG_VALUE for removal. A DBG_VALUE is marked for removal when it references an operand defined in the instruction. Use the new function to cleanup code in dead machine instruction removal pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215580 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -895,6 +895,27 @@ void MachineInstr::eraseFromParent() {
|
||||
getParent()->erase(this);
|
||||
}
|
||||
|
||||
void MachineInstr::eraseFromParentAndMarkDBGValuesForRemoval() {
|
||||
assert(getParent() && "Not embedded in a basic block!");
|
||||
MachineBasicBlock *MBB = getParent();
|
||||
MachineFunction *MF = MBB->getParent();
|
||||
assert(MF && "Not embedded in a function!");
|
||||
|
||||
MachineInstr *MI = (MachineInstr *)this;
|
||||
MachineRegisterInfo &MRI = MF->getRegInfo();
|
||||
|
||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = MI->getOperand(i);
|
||||
if (!MO.isReg() || !MO.isDef())
|
||||
continue;
|
||||
unsigned Reg = MO.getReg();
|
||||
if (!TargetRegisterInfo::isVirtualRegister(Reg))
|
||||
continue;
|
||||
MRI.markUsesInDebugValueAsUndef(Reg);
|
||||
}
|
||||
MI->eraseFromParent();
|
||||
}
|
||||
|
||||
void MachineInstr::eraseFromBundle() {
|
||||
assert(getParent() && "Not embedded in a basic block!");
|
||||
getParent()->erase_instr(this);
|
||||
|
||||
Reference in New Issue
Block a user