Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:BI

187     BlockInfo BI;
188 BI.MBB = MFI;
190 std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
197 ThroughBlocks.set(BI.MBB->getNumber());
204 BI.FirstInstr = *UseI;
205 assert(BI.FirstInstr >= Start);
208 BI.LastInstr = UseI[-1];
209 assert(BI.LastInstr < Stop);
212 BI.LiveIn = LVI->start <= Start;
215 if (!BI.LiveIn) {
217 assert(LVI->start == BI.FirstInstr && "First instr should be a def");
218 BI.FirstDef = BI.FirstInstr;
222 BI.LiveOut = true;
226 BI.LiveOut = false;
227 BI.LastInstr = LastStop;
237 BI.LiveOut = false;
238 UseBlocks.push_back(BI);
241 // Set up BI for the live-out part.
242 BI.LiveIn = false;
243 BI.LiveOut = true;
244 BI.FirstInstr = BI.FirstDef = LVI->start;
249 if (!BI.FirstDef)
250 BI.FirstDef = LVI->start;
253 UseBlocks.push_back(BI);
1136 bool SplitAnalysis::shouldSplitSingleBlock(const BlockInfo &BI,
1139 if (!BI.isOneInstr())
1145 if (BI.LiveIn && BI.LiveOut)
1148 if (LIS.getInstructionFromIndex(BI.FirstInstr)->isCopyLike())
1151 return isOriginalEndpoint(BI.FirstInstr);
1154 void SplitEditor::splitSingleBlock(const SplitAnalysis::BlockInfo &BI) {
1156 SlotIndex LastSplitPoint = SA.getLastSplitPoint(BI.MBB->getNumber());
1157 SlotIndex SegStart = enterIntvBefore(std::min(BI.FirstInstr,
1159 if (!BI.LiveOut || BI.LastInstr < LastSplitPoint) {
1160 useIntv(SegStart, leaveIntvAfter(BI.LastInstr));
1165 overlapIntv(SegStop, BI.LastInstr);
1285 void SplitEditor::splitRegInBlock(const SplitAnalysis::BlockInfo &BI,
1288 std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
1290 DEBUG(dbgs() << "BB#" << BI.MBB->getNumber() << " [" << Start << ';' << Stop
1291 << "), uses " << BI.FirstInstr << '-' << BI.LastInstr
1293 << (BI.LiveOut ? ", stack-out" : ", killed in block"));
1296 assert(BI.LiveIn && "Must be live-in");
1299 if (!BI.LiveOut && (!LeaveBefore || LeaveBefore >= BI.LastInstr)) {
1307 useIntv(Start, BI.LastInstr);
1311 SlotIndex LSP = SA.getLastSplitPoint(BI.MBB->getNumber());
1313 if (!LeaveBefore || LeaveBefore > BI.LastInstr.getBoundaryIndex()) {
1324 if (BI.LastInstr < LSP) {
1327 SlotIndex Idx = leaveIntvAfter(BI.LastInstr);
1334 overlapIntv(Idx, BI.LastInstr);
1348 if (!BI.LiveOut || BI.LastInstr < LSP) {
1354 SlotIndex To = leaveIntvAfter(BI.LastInstr);
1369 overlapIntv(To, BI.LastInstr);
1377 void SplitEditor::splitRegOutBlock(const SplitAnalysis::BlockInfo &BI,
1380 std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
1382 DEBUG(dbgs() << "BB#" << BI.MBB->getNumber() << " [" << Start << ';' << Stop
1383 << "), uses " << BI.FirstInstr << '-' << BI.LastInstr
1385 << (BI.LiveIn ? ", stack-in" : ", defined in block"));
1387 SlotIndex LSP = SA.getLastSplitPoint(BI.MBB->getNumber());
1390 assert(BI.LiveOut && "Must be live-out");
1393 if (!BI.LiveIn && (!EnterAfter || EnterAfter <= BI.FirstInstr)) {
1401 useIntv(BI.FirstInstr, Stop);
1405 if (!EnterAfter || EnterAfter < BI.FirstInstr.getBaseIndex()) {
1413 SlotIndex Idx = enterIntvBefore(std::min(LSP, BI.FirstInstr));
1434 SlotIndex From = enterIntvBefore(std::min(Idx, BI.FirstInstr));