diff options
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/MachineCSE.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineCopyPropagation.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 10 |
3 files changed, 17 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/MachineCSE.cpp b/llvm/lib/CodeGen/MachineCSE.cpp index fa785ac0c5a..dcb6f7cca4f 100644 --- a/llvm/lib/CodeGen/MachineCSE.cpp +++ b/llvm/lib/CodeGen/MachineCSE.cpp @@ -181,12 +181,8 @@ bool MachineCSE::PerformTrivialCopyPropagation(MachineInstr *MI, LLVM_DEBUG(dbgs() << "Coalescing: " << *DefMI); LLVM_DEBUG(dbgs() << "*** to: " << *MI); - // Collect matching debug values. - SmallVector<MachineInstr *, 2> DbgValues; - DefMI->collectDebugValues(DbgValues); - // Propagate SrcReg to debug value instructions. - for (auto *DBI : DbgValues) - DBI->getOperand(0).setReg(SrcReg); + // Update matching debug values. + DefMI->changeDebugValuesDefReg(SrcReg); // Propagate SrcReg of copies to MI. MO.setReg(SrcReg); diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp index b5309087d50..dfaa946c913 100644 --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -598,6 +598,11 @@ void MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { LLVM_DEBUG(dbgs() << "MCP: Removing copy due to no live-out succ: "; MaybeDead->dump()); assert(!MRI->isReserved(MaybeDead->getOperand(0).getReg())); + + // Update matching debug values. + assert(MaybeDead->isCopy()); + MaybeDead->changeDebugValuesDefReg(MaybeDead->getOperand(1).getReg()); + MaybeDead->eraseFromParent(); Changed = true; ++NumDeletes; diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 092e5859a47..f30290109b7 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -2092,3 +2092,13 @@ void MachineInstr::collectDebugValues( DbgValues.push_back(&*DI); } } + +void MachineInstr::changeDebugValuesDefReg(unsigned Reg) { + // Collect matching debug values. + SmallVector<MachineInstr *, 2> DbgValues; + collectDebugValues(DbgValues); + + // Propagate Reg to debug value instructions. + for (auto *DBI : DbgValues) + DBI->getOperand(0).setReg(Reg); +} |