From d4f6fe55ebe9d053cab73f5e67cac95e32df887b Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Sun, 28 Dec 2008 23:35:13 +0000 Subject: [PATCH] Fix up kill/dead marking in the new live interval reconstruction code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61460 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/PreAllocSplitting.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/PreAllocSplitting.cpp b/lib/CodeGen/PreAllocSplitting.cpp index 0880f622974..3f303ae0989 100644 --- a/lib/CodeGen/PreAllocSplitting.cpp +++ b/lib/CodeGen/PreAllocSplitting.cpp @@ -722,10 +722,9 @@ VNInfo* PreAllocSplitting::PerformPHIConstruction( NewVNs, Visited, false); // FIXME: Need to set kills properly for inter-block stuff. - if (toplevel) { - if (LI->isKill(ret, UseIndex)) LI->removeKill(ret, UseIndex); + if (LI->isKill(ret, UseIndex)) LI->removeKill(ret, UseIndex); + if (toplevel) LI->addKill(ret, EndIndex); - } LI->addRange(LiveRange(UseIndex, EndIndex, ret)); } else if (ContainsDefs && ContainsUses){ @@ -778,10 +777,9 @@ VNInfo* PreAllocSplitting::PerformPHIConstruction( ret = PerformPHIConstruction(walker, LI, Defs, Uses, NewVNs, Visited, false); - // FIXME: Need to set kills properly for inter-block stuff. + if (foundUse && LI->isKill(ret, StartIndex)) + LI->removeKill(ret, StartIndex); if (toplevel) { - if (foundUse && LI->isKill(ret, StartIndex)) - LI->removeKill(ret, StartIndex); LI->addKill(ret, EndIndex); } @@ -834,6 +832,20 @@ void PreAllocSplitting::ReconstructLiveInterval(LiveInterval* LI) { DenseMap Visited; PerformPHIConstruction(&*UI, LI, Defs, Uses, NewVNs, Visited, true); } + + // Add ranges for dead defs + for (MachineRegisterInfo::def_iterator DI = MRI->def_begin(LI->reg), + DE = MRI->def_end(); DI != DE; ++DI) { + unsigned DefIdx = LIs->getInstructionIndex(&*DI); + DefIdx = LiveIntervals::getDefIndex(DefIdx); + unsigned UseIdx = LiveIntervals::getUseIndex(DefIdx); + + if (LI->liveAt(DefIdx)) continue; + + VNInfo* DeadVN = NewVNs[&*DI]; + LI->addRange(LiveRange(DefIdx, UseIdx, DeadVN)); + LI->addKill(DeadVN, DefIdx); + } } /// ShrinkWrapLiveInterval - Recursively traverse the predecessor -- 2.34.1