diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-20 19:46:23 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-20 19:46:23 +0000 |
commit | 2dc455a366e26d8c1085ef617651232304ee097e (patch) | |
tree | 9d1446b002b62aacb7b939b86e0b55ca6c4112ce /lib/CodeGen/SplitKit.cpp | |
parent | 7c18fa87a4d4ed8b0cfe1ec65597c748c6d91ca9 (diff) |
Process all dead defs after rematerializing during splitting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127973 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SplitKit.cpp')
-rw-r--r-- | lib/CodeGen/SplitKit.cpp | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/lib/CodeGen/SplitKit.cpp b/lib/CodeGen/SplitKit.cpp index c0f4adf077..b69a3078ac 100644 --- a/lib/CodeGen/SplitKit.cpp +++ b/lib/CodeGen/SplitKit.cpp @@ -789,30 +789,23 @@ void SplitEditor::rewriteAssigned(bool ExtendRanges) { void SplitEditor::deleteRematVictims() { SmallVector<MachineInstr*, 8> Dead; - for (LiveInterval::const_vni_iterator I = Edit->getParent().vni_begin(), - E = Edit->getParent().vni_end(); I != E; ++I) { - const VNInfo *VNI = *I; - // Was VNI rematted anywhere? - if (VNI->isUnused() || VNI->isPHIDef() || !Edit->didRematerialize(VNI)) - continue; - unsigned RegIdx = RegAssign.lookup(VNI->def); - LiveInterval *LI = Edit->get(RegIdx); - LiveInterval::const_iterator LII = LI->FindLiveRangeContaining(VNI->def); - assert(LII != LI->end() && "Missing live range for rematted def"); - - // Is this a dead def? - if (LII->end != VNI->def.getNextSlot()) - continue; - - MachineInstr *MI = LIS.getInstructionFromIndex(VNI->def); - assert(MI && "Missing instruction for dead def"); - MI->addRegisterDead(LI->reg, &TRI); + for (LiveRangeEdit::iterator I = Edit->begin(), E = Edit->end(); I != E; ++I){ + LiveInterval *LI = *I; + for (LiveInterval::const_iterator LII = LI->begin(), LIE = LI->end(); + LII != LIE; ++LII) { + // Dead defs end at the store slot. + if (LII->end != LII->valno->def.getNextSlot()) + continue; + MachineInstr *MI = LIS.getInstructionFromIndex(LII->valno->def); + assert(MI && "Missing instruction for dead def"); + MI->addRegisterDead(LI->reg, &TRI); - if (!MI->allDefsAreDead()) - continue; + if (!MI->allDefsAreDead()) + continue; - DEBUG(dbgs() << "All defs dead: " << *MI); - Dead.push_back(MI); + DEBUG(dbgs() << "All defs dead: " << *MI); + Dead.push_back(MI); + } } if (Dead.empty()) |