// Transfer information from the LiveIn vector to the live ranges. void LiveRangeCalc::updateLiveIns() { LiveRangeUpdater Updater; for (SmallVectorImpl<LiveInBlock>::iterator I = LiveIn.begin(), E = LiveIn.end(); I != E; ++I) { if (!I->DomNode) continue; MachineBasicBlock *MBB = I->DomNode->getBlock(); assert(I->Value && "No live-in value found"); SlotIndex Start, End; std::tie(Start, End) = Indexes->getMBBRange(MBB); if (I->Kill.isValid()) // Value is killed inside this block. End = I->Kill; else { // The value is live-through, update LiveOut as well. // Defer the Domtree lookup until it is needed. assert(Seen.test(MBB->getNumber())); LiveOut[MBB] = LiveOutPair(I->Value, (MachineDomTreeNode *)0); } Updater.setDest(&I->LR); Updater.add(Start, End, I->Value); } LiveIn.clear(); }
void LiveRangeCalc::updateFromLiveIns() { LiveRangeUpdater Updater; for (const LiveInBlock &I : LiveIn) { if (!I.DomNode) continue; MachineBasicBlock *MBB = I.DomNode->getBlock(); assert(I.Value && "No live-in value found"); SlotIndex Start, End; std::tie(Start, End) = Indexes->getMBBRange(MBB); if (I.Kill.isValid()) // Value is killed inside this block. End = I.Kill; else { // The value is live-through, update LiveOut as well. // Defer the Domtree lookup until it is needed. assert(Seen.test(MBB->getNumber())); Map[MBB] = LiveOutPair(I.Value, nullptr); } Updater.setDest(&I.LR); Updater.add(Start, End, I.Value); } LiveIn.clear(); }