diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2010-04-29 18:51:00 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2010-04-29 18:51:00 +0000 |
| commit | 6e7ca24907ab88f9d774c3a249a0c58233201392 (patch) | |
| tree | 5aed943fc5da7184c3c3acbe2755be6720c2c926 /llvm/lib/CodeGen/VirtRegRewriter.cpp | |
| parent | a46953d2812c1b0448c9f3b4ee98a29148867b70 (diff) | |
| download | bcm5719-llvm-6e7ca24907ab88f9d774c3a249a0c58233201392.tar.gz bcm5719-llvm-6e7ca24907ab88f9d774c3a249a0c58233201392.zip | |
Remove DBG_VALUE which reference dead stack slots.
llvm-svn: 102654
Diffstat (limited to 'llvm/lib/CodeGen/VirtRegRewriter.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/VirtRegRewriter.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/VirtRegRewriter.cpp b/llvm/lib/CodeGen/VirtRegRewriter.cpp index ac001948e9e..7f0412cf2d6 100644 --- a/llvm/lib/CodeGen/VirtRegRewriter.cpp +++ b/llvm/lib/CodeGen/VirtRegRewriter.cpp @@ -1066,6 +1066,7 @@ class LocalRewriter : public VirtRegRewriter { VirtRegMap *VRM; BitVector AllocatableRegs; DenseMap<MachineInstr*, unsigned> DistanceMap; + DenseMap<int, SmallVector<MachineInstr*,4> > Slot2DbgValues; MachineBasicBlock *MBB; // Basic block currently being processed. @@ -1190,12 +1191,24 @@ bool LocalRewriter::runOnMachineFunction(MachineFunction &MF, VirtRegMap &vrm, // Mark unused spill slots. MachineFrameInfo *MFI = MF.getFrameInfo(); int SS = VRM->getLowSpillSlot(); - if (SS != VirtRegMap::NO_STACK_SLOT) - for (int e = VRM->getHighSpillSlot(); SS <= e; ++SS) + if (SS != VirtRegMap::NO_STACK_SLOT) { + for (int e = VRM->getHighSpillSlot(); SS <= e; ++SS) { + SmallVector<MachineInstr*, 4> &DbgValues = Slot2DbgValues[SS]; if (!VRM->isSpillSlotUsed(SS)) { MFI->RemoveStackObject(SS); + for (unsigned j = 0, ee = DbgValues.size(); j != ee; ++j) { + MachineInstr *DVMI = DbgValues[j]; + MachineBasicBlock *DVMBB = DVMI->getParent(); + DEBUG(dbgs() << "Removing debug info referencing FI#" << SS << '\n'); + VRM->RemoveMachineInstrFromMaps(DVMI); + DVMBB->erase(DVMI); + } ++NumDSS; } + DbgValues.clear(); + } + } + Slot2DbgValues.clear(); return true; } @@ -1905,6 +1918,10 @@ LocalRewriter::RewriteMBB(LiveIntervals *LIs, bool BackTracked = false; MachineInstr &MI = *MII; + // Remember DbgValue's which reference stack slots. + if (MI.isDebugValue() && MI.getOperand(0).isFI()) + Slot2DbgValues[MI.getOperand(0).getIndex()].push_back(&MI); + /// ReusedOperands - Keep track of operand reuse in case we need to undo /// reuse. ReuseInfo ReusedOperands(MI, TRI); |

