diff options
Diffstat (limited to 'llvm/lib/CodeGen/PreAllocSplitting.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/PreAllocSplitting.cpp | 46 | 
1 files changed, 12 insertions, 34 deletions
| diff --git a/llvm/lib/CodeGen/PreAllocSplitting.cpp b/llvm/lib/CodeGen/PreAllocSplitting.cpp index 16a9e6d9b04..0325f7cd02b 100644 --- a/llvm/lib/CodeGen/PreAllocSplitting.cpp +++ b/llvm/lib/CodeGen/PreAllocSplitting.cpp @@ -748,12 +748,12 @@ VNInfo* PreAllocSplitting::PerformPHIConstruction(      ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, Uses,                                   NewVNs, LiveOut, Phis, false, true); +    LI->addRange(LiveRange(UseIndex, EndIndex+1, ret)); +          // FIXME: Need to set kills properly for inter-block stuff.      if (LI->isKill(ret, UseIndex)) LI->removeKill(ret, UseIndex);      if (intrablock)        LI->addKill(ret, EndIndex); -     -    LI->addRange(LiveRange(UseIndex, EndIndex+1, ret));    } else if (ContainsDefs && ContainsUses){      SmallPtrSet<MachineInstr*, 2>& BlockDefs = Defs[MBB];      SmallPtrSet<MachineInstr*, 2>& BlockUses = Uses[MBB]; @@ -805,13 +805,13 @@ VNInfo* PreAllocSplitting::PerformPHIConstruction(        ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, Uses,                                     NewVNs, LiveOut, Phis, false, true); +    LI->addRange(LiveRange(StartIndex, EndIndex+1, ret)); +          if (foundUse && LI->isKill(ret, StartIndex))        LI->removeKill(ret, StartIndex);      if (intrablock) {        LI->addKill(ret, EndIndex);      } - -    LI->addRange(LiveRange(StartIndex, EndIndex+1, ret));    }    // Memoize results so we don't have to recompute them. @@ -1131,18 +1131,10 @@ bool PreAllocSplitting::Rematerialize(unsigned vreg, VNInfo* ValNo,    TII->reMaterialize(MBB, RestorePt, vreg, DefMI);    LIs->InsertMachineInstrInMaps(prior(RestorePt), RestoreIdx); -  if (KillPt->getParent() == BarrierMBB) { -    VNInfo* After = UpdateRegisterInterval(ValNo, LIs->getUseIndex(KillIdx)+1, -                           LIs->getDefIndex(RestoreIdx)); -     -    RenumberValno(After); - -    ++NumSplits; -    ++NumRemats; -    return true; -  } - -  RepairLiveInterval(CurrLI, ValNo, DefMI, RestoreIdx); +  ReconstructLiveInterval(CurrLI); +  unsigned RematIdx = LIs->getInstructionIndex(prior(RestorePt)); +  RematIdx = LiveIntervals::getDefIndex(RematIdx); +  RenumberValno(CurrLI->findDefinedVNInfo(RematIdx));    ++NumSplits;    ++NumRemats; @@ -1315,28 +1307,14 @@ bool PreAllocSplitting::SplitRegLiveInterval(LiveInterval *LI) {    MachineInstr *LoadMI = prior(RestorePt);    LIs->InsertMachineInstrInMaps(LoadMI, RestoreIndex); -  // If live interval is spilled in the same block as the barrier, just -  // create a hole in the interval. -  if (!DefMBB || -      (SpillMI && SpillMI->getParent() == BarrierMBB)) { -    // Update spill stack slot live interval. -    UpdateSpillSlotInterval(ValNo, LIs->getUseIndex(SpillIndex)+1, -                            LIs->getDefIndex(RestoreIndex)); - -    VNInfo* After = UpdateRegisterInterval(ValNo, -                           LIs->getUseIndex(SpillIndex)+1, -                           LIs->getDefIndex(RestoreIndex)); -    RenumberValno(After); -    -    ++NumSplits; -    return true; -  } -    // Update spill stack slot live interval.    UpdateSpillSlotInterval(ValNo, LIs->getUseIndex(SpillIndex)+1,                            LIs->getDefIndex(RestoreIndex)); -  RepairLiveInterval(CurrLI, ValNo, DefMI, RestoreIndex); +  ReconstructLiveInterval(CurrLI); +  unsigned RestoreIdx = LIs->getInstructionIndex(prior(RestorePt)); +  RestoreIdx = LiveIntervals::getDefIndex(RestoreIdx); +  RenumberValno(CurrLI->findDefinedVNInfo(RestoreIdx));    ++NumSplits;    return true; | 

