• Home
  • Raw
  • Download

Lines Matching refs:MBB

114 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) {  in RemoveDeadBlock()  argument
115 assert(MBB->pred_empty() && "MBB must be dead!"); in RemoveDeadBlock()
116 DEBUG(dbgs() << "\nRemoving MBB: " << *MBB); in RemoveDeadBlock()
118 MachineFunction *MF = MBB->getParent(); in RemoveDeadBlock()
120 while (!MBB->succ_empty()) in RemoveDeadBlock()
121 MBB->removeSuccessor(MBB->succ_end()-1); in RemoveDeadBlock()
124 TriedMerging.erase(MBB); in RemoveDeadBlock()
127 MF->erase(MBB); in RemoveDeadBlock()
139 bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) { in OptimizeImpDefsBlock() argument
141 MachineBasicBlock::iterator I = MBB->begin(); in OptimizeImpDefsBlock()
142 while (I != MBB->end()) { in OptimizeImpDefsBlock()
155 while (I != MBB->end()) { in OptimizeImpDefsBlock()
170 I = MBB->begin(); in OptimizeImpDefsBlock()
174 MBB->erase(ImpDefMI); in OptimizeImpDefsBlock()
205 MachineBasicBlock *MBB = I, *TBB = nullptr, *FBB = nullptr; in OptimizeFunction() local
207 if (!TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true)) in OptimizeFunction()
208 MadeChange |= MBB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in OptimizeFunction()
209 MadeChange |= OptimizeImpDefsBlock(MBB); in OptimizeFunction()
294 static unsigned HashEndOfMBB(const MachineBasicBlock *MBB) { in HashEndOfMBB() argument
295 MachineBasicBlock::const_iterator I = MBB->end(); in HashEndOfMBB()
296 if (I == MBB->begin()) in HashEndOfMBB()
302 if (I==MBB->begin()) in HashEndOfMBB()
510 static unsigned CountTerminators(MachineBasicBlock *MBB, in CountTerminators() argument
512 I = MBB->end(); in CountTerminators()
515 if (I == MBB->begin()) { in CountTerminators()
516 I = MBB->end(); in CountTerminators()
681 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in CreateCommonTailOnlyBlock() local
685 DEBUG(dbgs() << "\nSplitting BB#" << MBB->getNumber() << ", size " in CreateCommonTailOnlyBlock()
691 const BasicBlock *BB = (SuccBB && MBB->succ_size() == 1) ? in CreateCommonTailOnlyBlock()
692 SuccBB->getBasicBlock() : MBB->getBasicBlock(); in CreateCommonTailOnlyBlock()
693 MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI, BB); in CreateCommonTailOnlyBlock()
703 if (PredBB == MBB) in CreateCommonTailOnlyBlock()
784 MachineBasicBlock *MBB = SameTails[i].getBlock(); in TryTailMergeBlocks() local
785 if (MBB == EntryBB && SameTails[i].tailIsWholeBlock()) in TryTailMergeBlocks()
787 if (MBB == PredBB) { in TryTailMergeBlocks()
808 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in TryTailMergeBlocks() local
811 DEBUG(dbgs() << "\nUsing common tail in BB#" << MBB->getNumber() in TryTailMergeBlocks()
819 ReplaceTailWithBranchTo(SameTails[i].getTailStartPos(), MBB); in TryTailMergeBlocks()
983 MachineBasicBlock *MBB = I++; in OptimizeBranches() local
984 MadeChange |= OptimizeBlock(MBB); in OptimizeBranches()
987 if (MBB->pred_empty()) { in OptimizeBranches()
988 RemoveDeadBlock(MBB); in OptimizeBranches()
998 static bool IsEmptyBlock(MachineBasicBlock *MBB) { in IsEmptyBlock() argument
999 if (MBB->empty()) in IsEmptyBlock()
1001 for (MachineBasicBlock::iterator MBBI = MBB->begin(), MBBE = MBB->end(); in IsEmptyBlock()
1011 static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { in IsBranchOnlyBlock() argument
1013 for (MBBI = MBB->begin(), MBBE = MBB->end(); MBBI!=MBBE; ++MBBI) { in IsBranchOnlyBlock()
1052 static DebugLoc getBranchDebugLoc(MachineBasicBlock &MBB) { in getBranchDebugLoc() argument
1053 MachineBasicBlock::iterator I = MBB.end(); in getBranchDebugLoc()
1054 if (I == MBB.begin()) in getBranchDebugLoc()
1057 while (I->isDebugValue() && I != MBB.begin()) in getBranchDebugLoc()
1066 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) { in OptimizeBlock() argument
1068 MachineFunction &MF = *MBB->getParent(); in OptimizeBlock()
1071 MachineFunction::iterator FallThrough = MBB; in OptimizeBlock()
1078 if (IsEmptyBlock(MBB) && !MBB->isLandingPad() && !MBB->hasAddressTaken()) { in OptimizeBlock()
1080 if (MBB->pred_empty()) return MadeChange; in OptimizeBlock()
1087 while (!MBB->pred_empty()) { in OptimizeBlock()
1088 MachineBasicBlock *Pred = *(MBB->pred_end()-1); in OptimizeBlock()
1089 Pred->ReplaceUsesOfBlockWith(MBB, FallThrough); in OptimizeBlock()
1094 MJTI->ReplaceMBBInJumpTables(MBB, FallThrough); in OptimizeBlock()
1102 MachineBasicBlock &PrevBB = *std::prev(MachineFunction::iterator(MBB)); in OptimizeBlock()
1120 if (PriorTBB != MBB) in OptimizeBlock()
1134 if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && in OptimizeBlock()
1136 !MBB->hasAddressTaken() && !MBB->isLandingPad()) { in OptimizeBlock()
1138 << "From MBB: " << *MBB); in OptimizeBlock()
1143 MachineBasicBlock::iterator MBBIter = MBB->begin(); in OptimizeBlock()
1146 while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end() in OptimizeBlock()
1155 PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end()); in OptimizeBlock()
1158 PrevBB.transferSuccessors(MBB); in OptimizeBlock()
1165 if (PriorTBB == MBB && !PriorFBB) { in OptimizeBlock()
1174 if (PriorFBB == MBB) { in OptimizeBlock()
1186 if (PriorTBB == MBB) { in OptimizeBlock()
1206 if (MBB->succ_empty() && !PriorCond.empty() && !PriorFBB && in OptimizeBlock()
1208 !MBB->canFallThrough()) { in OptimizeBlock()
1217 !IsBetterFallthrough(PriorTBB, MBB)) in OptimizeBlock()
1224 DEBUG(dbgs() << "\nMoving MBB: " << *MBB in OptimizeBlock()
1229 TII->InsertBranch(PrevBB, MBB, nullptr, NewPriorCond, dl); in OptimizeBlock()
1232 MBB->moveAfter(--MF.end()); in OptimizeBlock()
1244 bool CurUnAnalyzable= TII->AnalyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true); in OptimizeBlock()
1247 MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty()); in OptimizeBlock()
1254 if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) { in OptimizeBlock()
1257 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1258 TII->RemoveBranch(*MBB); in OptimizeBlock()
1259 TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond, dl); in OptimizeBlock()
1269 IsBranchOnlyBlock(MBB) && CurTBB != MBB && in OptimizeBlock()
1270 !MBB->hasAddressTaken()) { in OptimizeBlock()
1271 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1275 TII->RemoveBranch(*MBB); in OptimizeBlock()
1279 if (!MBB->empty()) { in OptimizeBlock()
1281 for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); in OptimizeBlock()
1291 MBB->erase(MBB->begin(), MBB->end()); in OptimizeBlock()
1298 if (MBB->empty()) { in OptimizeBlock()
1301 !PrevBB.isSuccessor(MBB)) { in OptimizeBlock()
1304 if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1305 PriorTBB != MBB && PriorFBB != MBB) { in OptimizeBlock()
1309 PriorTBB = MBB; in OptimizeBlock()
1312 PriorFBB = MBB; in OptimizeBlock()
1323 while(PI != MBB->pred_size()) { in OptimizeBlock()
1324 MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI); in OptimizeBlock()
1325 if (PMBB == MBB) { in OptimizeBlock()
1331 PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB); in OptimizeBlock()
1353 MJTI->ReplaceMBBInJumpTables(MBB, CurTBB); in OptimizeBlock()
1363 TII->InsertBranch(*MBB, CurTBB, nullptr, CurCond, dl); in OptimizeBlock()
1374 bool CurFallsThru = MBB->canFallThrough(); in OptimizeBlock()
1376 if (!MBB->isLandingPad()) { in OptimizeBlock()
1379 for (MachineBasicBlock::pred_iterator PI = MBB->pred_begin(), in OptimizeBlock()
1380 E = MBB->pred_end(); PI != E; ++PI) { in OptimizeBlock()
1386 if (PredBB != MBB && !PredBB->canFallThrough() && in OptimizeBlock()
1389 && (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) { in OptimizeBlock()
1402 std::next(MachineFunction::iterator(MBB)); in OptimizeBlock()
1404 TII->InsertBranch(*MBB, NextBB, nullptr, CurCond, DebugLoc()); in OptimizeBlock()
1406 MBB->moveAfter(PredBB); in OptimizeBlock()
1415 for (MachineBasicBlock::succ_iterator SI = MBB->succ_begin(), in OptimizeBlock()
1416 E = MBB->succ_end(); SI != E; ++SI) { in OptimizeBlock()
1425 if (SuccBB != MBB && &*SuccPrev != MBB && in OptimizeBlock()
1428 MBB->moveBefore(SuccBB); in OptimizeBlock()
1442 MBB->moveAfter(--MF.end()); in OptimizeBlock()
1461 MachineBasicBlock *MBB = I++; in HoistCommonCode() local
1462 MadeChange |= HoistCommonCodeInSuccs(MBB); in HoistCommonCode()
1489 MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, in findHoistingInsertPosAndDeps() argument
1494 MachineBasicBlock::iterator Loc = MBB->getFirstTerminator(); in findHoistingInsertPosAndDeps()
1496 return MBB->end(); in findHoistingInsertPosAndDeps()
1512 return MBB->end(); in findHoistingInsertPosAndDeps()
1523 if (Loc == MBB->begin()) in findHoistingInsertPosAndDeps()
1524 return MBB->end(); in findHoistingInsertPosAndDeps()
1530 while (PI != MBB->begin() && PI->isDebugValue()) in findHoistingInsertPosAndDeps()
1561 return MBB->end(); in findHoistingInsertPosAndDeps()
1592 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) { in HoistCommonCodeInSuccs() argument
1595 if (TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty()) in HoistCommonCodeInSuccs()
1598 if (!FBB) FBB = findFalseBlock(MBB, TBB); in HoistCommonCodeInSuccs()
1613 findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs); in HoistCommonCodeInSuccs()
1614 if (Loc == MBB->end()) in HoistCommonCodeInSuccs()
1734 MBB->splice(Loc, TBB, TBB->begin(), TIB); in HoistCommonCodeInSuccs()