summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/MachineCSE.cpp8
-rw-r--r--llvm/lib/CodeGen/MachineCopyPropagation.cpp5
-rw-r--r--llvm/lib/CodeGen/MachineInstr.cpp10
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);
+}
OpenPOWER on IntegriCloud