diff options
author | Chris Lattner <sabre@nondot.org> | 2006-05-01 22:03:24 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-05-01 22:03:24 +0000 |
commit | 229924a79f9a3b33b767527b9d4249e1133ceeda (patch) | |
tree | b70a8ba15cc599b055f52a1bff91b4f6e3e285b5 /lib/CodeGen/VirtRegMap.cpp | |
parent | 8a18c13fa5d226e60a875eff5ae66cefe4093bc9 (diff) |
Fix a latent bug that my spiller patch last week exposed: we were leaving
instructions in the virtregfolded map that were deleted. Because they
were deleted, newly allocated instructions could end up at the same address,
magically finding themselves in the map. The solution is to remove entries
from the map when we delete the instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28041 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/VirtRegMap.cpp')
-rw-r--r-- | lib/CodeGen/VirtRegMap.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/CodeGen/VirtRegMap.cpp b/lib/CodeGen/VirtRegMap.cpp index fa5a6ac8e8..912359d137 100644 --- a/lib/CodeGen/VirtRegMap.cpp +++ b/lib/CodeGen/VirtRegMap.cpp @@ -730,6 +730,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) { assert(VirtRegMap::isMod && "Can't be modref!"); DEBUG(std::cerr << "Removed dead store:\t" << *MDSI->second); MBB.erase(MDSI->second); + VRM.RemoveFromFoldedVirtMap(MDSI->second); MaybeDeadStores.erase(MDSI); ++NumDSE; } @@ -791,6 +792,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) { ++NumDCE; DEBUG(std::cerr << "Removing now-noop copy: " << MI); MBB.erase(&MI); + VRM.RemoveFromFoldedVirtMap(&MI); goto ProcessNextInst; } Spills.ClobberPhysReg(VirtReg); @@ -825,6 +827,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) { ++NumDCE; DEBUG(std::cerr << "Removing now-noop copy: " << MI); MBB.erase(&MI); + VRM.RemoveFromFoldedVirtMap(&MI); goto ProcessNextInst; } } @@ -835,6 +838,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) { DEBUG(std::cerr << "Removed dead store:\t" << *LastStore); ++NumDSE; MBB.erase(LastStore); + VRM.RemoveFromFoldedVirtMap(LastStore); } LastStore = next(MII); |