SE->enterIntvAtEnd(*MBB);
}
- SE->closeIntv();
-
// FIXME: Should we be more aggressive about splitting the stack region into
// per-block segments? The current approach allows the stack region to
// separate into connected components. Some components may be allocatable.
SlotIndex SegStart = SE->enterIntvBefore(Uses[BestBefore]);
SlotIndex SegStop = SE->leaveIntvAfter(Uses[BestAfter]);
SE->useIntv(SegStart, SegStop);
- SE->closeIntv();
SE->finish();
setStage(NewVRegs.begin(), NewVRegs.end(), RS_Local);
++NumLocalSplits;
/// Create a new virtual register and live interval.
unsigned SplitEditor::openIntv() {
- assert(!OpenIdx && "Previous LI not closed before openIntv");
-
// Create the complement as index 0.
if (Edit->empty())
Edit->create(LIS, VRM);
DEBUG(dump());
}
-/// closeIntv - Indicate that we are done editing the currently open
-/// LiveInterval, and ranges can be trimmed.
-void SplitEditor::closeIntv() {
- assert(OpenIdx && "openIntv not called before closeIntv");
- OpenIdx = 0;
-}
-
/// transferSimpleValues - Transfer all simply defined values to the new live
/// ranges.
/// Values that were rematerialized or that have multiple defs are left alone.
}
void SplitEditor::finish() {
- assert(OpenIdx == 0 && "Previous LI not closed before rewrite");
++NumFinished;
// At this point, the live intervals in Edit contain VNInfos corresponding to
useIntv(SegStart, SegStop);
overlapIntv(SegStop, BI.LastUse);
}
- closeIntv();
}
/// splitSingleBlocks - Split CurLI into a separate live interval inside each
///
void overlapIntv(SlotIndex Start, SlotIndex End);
- /// closeIntv - Indicate that we are done editing the currently open
- /// LiveInterval, and ranges can be trimmed.
- void closeIntv();
-
/// finish - after all the new live ranges have been created, compute the
/// remaining live range, and rewrite instructions to use the new registers.
void finish();