aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineCopyPropagation.cpp
diff options
context:
space:
mode:
authorStephen Tozer <Stephen.Tozer@Sony.com>2021-04-29 16:04:24 +0100
committerStephen Tozer <Stephen.Tozer@Sony.com>2021-05-07 11:47:50 +0100
commit0791f968fee259e5c34523167bd58179b8b081c2 (patch)
tree61521fd01293d7ac2838e575916bb1dfe3855337 /llvm/lib/CodeGen/MachineCopyPropagation.cpp
parentf0762fc42f0f4ecf849bef42eed2bb4c0785ea67 (diff)
downloadllvm-0791f968fee259e5c34523167bd58179b8b081c2.zip
llvm-0791f968fee259e5c34523167bd58179b8b081c2.tar.gz
llvm-0791f968fee259e5c34523167bd58179b8b081c2.tar.bz2
[DebugInfo] Fix updateDbgUsersToReg to support DBG_VALUE_LIST
This patch modifies updateDbgUsersToReg to properly handle DBG_VALUE_LIST instructions, by replacing the hard-coded operand indices (i.e. getOperand(0)) with the more general getDebugOperandsForReg(), and updating the register for all matching operands. Differential Revision: https://reviews.llvm.org/D101523
Diffstat (limited to 'llvm/lib/CodeGen/MachineCopyPropagation.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineCopyPropagation.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
index d8659c1..45f32ad 100644
--- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp
+++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
@@ -294,7 +294,7 @@ private:
SmallSetVector<MachineInstr *, 8> MaybeDeadCopies;
/// Multimap tracking debug users in current BB
- DenseMap<MachineInstr*, SmallVector<MachineInstr*, 2>> CopyDbgUsers;
+ DenseMap<MachineInstr *, SmallSet<MachineInstr *, 2>> CopyDbgUsers;
CopyTracker Tracker;
@@ -321,7 +321,7 @@ void MachineCopyPropagation::ReadRegister(MCRegister Reg, MachineInstr &Reader,
LLVM_DEBUG(dbgs() << "MCP: Copy is used - not dead: "; Copy->dump());
MaybeDeadCopies.remove(Copy);
} else {
- CopyDbgUsers[Copy].push_back(&Reader);
+ CopyDbgUsers[Copy].insert(&Reader);
}
}
}
@@ -734,7 +734,10 @@ void MachineCopyPropagation::ForwardCopyPropagateBlock(MachineBasicBlock &MBB) {
// Update matching debug values, if any.
assert(MaybeDead->isCopy());
Register SrcReg = MaybeDead->getOperand(1).getReg();
- MRI->updateDbgUsersToReg(SrcReg, CopyDbgUsers[MaybeDead]);
+ Register DestReg = MaybeDead->getOperand(0).getReg();
+ SmallVector<MachineInstr *> MaybeDeadDbgUsers(
+ CopyDbgUsers[MaybeDead].begin(), CopyDbgUsers[MaybeDead].end());
+ MRI->updateDbgUsersToReg(DestReg, SrcReg, MaybeDeadDbgUsers);
MaybeDead->eraseFromParent();
Changed = true;