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];
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.
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;
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;