Lines Matching refs:MBB
102 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) { in RemoveDeadBlock() argument
103 assert(MBB->pred_empty() && "MBB must be dead!"); in RemoveDeadBlock()
104 DEBUG(dbgs() << "\nRemoving MBB: " << *MBB); in RemoveDeadBlock()
106 MachineFunction *MF = MBB->getParent(); in RemoveDeadBlock()
108 while (!MBB->succ_empty()) in RemoveDeadBlock()
109 MBB->removeSuccessor(MBB->succ_end()-1); in RemoveDeadBlock()
112 TriedMerging.erase(MBB); in RemoveDeadBlock()
115 MF->erase(MBB); in RemoveDeadBlock()
127 bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) { in OptimizeImpDefsBlock() argument
129 MachineBasicBlock::iterator I = MBB->begin(); in OptimizeImpDefsBlock()
130 while (I != MBB->end()) { in OptimizeImpDefsBlock()
144 while (I != MBB->end()) { in OptimizeImpDefsBlock()
159 I = MBB->begin(); in OptimizeImpDefsBlock()
163 MBB->erase(ImpDefMI); in OptimizeImpDefsBlock()
188 MachineBasicBlock *MBB = I, *TBB = 0, *FBB = 0; in OptimizeFunction() local
190 if (!TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true)) in OptimizeFunction()
191 MadeChange |= MBB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in OptimizeFunction()
192 MadeChange |= OptimizeImpDefsBlock(MBB); in OptimizeFunction()
277 static unsigned HashEndOfMBB(const MachineBasicBlock *MBB) { in HashEndOfMBB() argument
278 MachineBasicBlock::const_iterator I = MBB->end(); in HashEndOfMBB()
279 if (I == MBB->begin()) in HashEndOfMBB()
285 if (I==MBB->begin()) in HashEndOfMBB()
495 static unsigned CountTerminators(MachineBasicBlock *MBB, in CountTerminators() argument
497 I = MBB->end(); in CountTerminators()
500 if (I == MBB->begin()) { in CountTerminators()
501 I = MBB->end(); in CountTerminators()
665 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in CreateCommonTailOnlyBlock() local
669 DEBUG(dbgs() << "\nSplitting BB#" << MBB->getNumber() << ", size " in CreateCommonTailOnlyBlock()
672 MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI); in CreateCommonTailOnlyBlock()
682 if (PredBB == MBB) in CreateCommonTailOnlyBlock()
763 MachineBasicBlock *MBB = SameTails[i].getBlock(); in TryTailMergeBlocks() local
764 if (MBB == EntryBB && SameTails[i].tailIsWholeBlock()) in TryTailMergeBlocks()
766 if (MBB == PredBB) { in TryTailMergeBlocks()
787 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in TryTailMergeBlocks() local
790 DEBUG(dbgs() << "\nUsing common tail in BB#" << MBB->getNumber() in TryTailMergeBlocks()
798 ReplaceTailWithBranchTo(SameTails[i].getTailStartPos(), MBB); in TryTailMergeBlocks()
949 MachineBasicBlock *MBB = I++; in OptimizeBranches() local
950 MadeChange |= OptimizeBlock(MBB); in OptimizeBranches()
953 if (MBB->pred_empty()) { in OptimizeBranches()
954 RemoveDeadBlock(MBB); in OptimizeBranches()
964 static bool IsEmptyBlock(MachineBasicBlock *MBB) { in IsEmptyBlock() argument
965 if (MBB->empty()) in IsEmptyBlock()
967 for (MachineBasicBlock::iterator MBBI = MBB->begin(), MBBE = MBB->end(); in IsEmptyBlock()
977 static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { in IsBranchOnlyBlock() argument
979 for (MBBI = MBB->begin(), MBBE = MBB->end(); MBBI!=MBBE; ++MBBI) { in IsBranchOnlyBlock()
1016 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) { in OptimizeBlock() argument
1018 MachineFunction &MF = *MBB->getParent(); in OptimizeBlock()
1022 MachineFunction::iterator FallThrough = MBB; in OptimizeBlock()
1029 if (IsEmptyBlock(MBB) && !MBB->isLandingPad() && !MBB->hasAddressTaken()) { in OptimizeBlock()
1031 if (MBB->pred_empty()) return MadeChange; in OptimizeBlock()
1038 while (!MBB->pred_empty()) { in OptimizeBlock()
1039 MachineBasicBlock *Pred = *(MBB->pred_end()-1); in OptimizeBlock()
1040 Pred->ReplaceUsesOfBlockWith(MBB, FallThrough); in OptimizeBlock()
1045 MJTI->ReplaceMBBInJumpTables(MBB, FallThrough); in OptimizeBlock()
1053 MachineBasicBlock &PrevBB = *prior(MachineFunction::iterator(MBB)); in OptimizeBlock()
1070 if (PriorTBB != MBB) in OptimizeBlock()
1084 if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && in OptimizeBlock()
1086 !MBB->hasAddressTaken() && !MBB->isLandingPad()) { in OptimizeBlock()
1088 << "From MBB: " << *MBB); in OptimizeBlock()
1093 MachineBasicBlock::iterator MBBIter = MBB->begin(); in OptimizeBlock()
1096 while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end() in OptimizeBlock()
1105 PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end()); in OptimizeBlock()
1108 PrevBB.transferSuccessors(MBB); in OptimizeBlock()
1115 if (PriorTBB == MBB && PriorFBB == 0) { in OptimizeBlock()
1124 if (PriorFBB == MBB) { in OptimizeBlock()
1135 if (PriorTBB == MBB) { in OptimizeBlock()
1154 if (MBB->succ_empty() && !PriorCond.empty() && PriorFBB == 0 && in OptimizeBlock()
1156 !MBB->canFallThrough()) { in OptimizeBlock()
1165 !IsBetterFallthrough(PriorTBB, MBB)) in OptimizeBlock()
1172 DEBUG(dbgs() << "\nMoving MBB: " << *MBB in OptimizeBlock()
1176 TII->InsertBranch(PrevBB, MBB, 0, NewPriorCond, dl); in OptimizeBlock()
1179 MBB->moveAfter(--MF.end()); in OptimizeBlock()
1191 bool CurUnAnalyzable= TII->AnalyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true); in OptimizeBlock()
1194 MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty()); in OptimizeBlock()
1201 if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) { in OptimizeBlock()
1204 TII->RemoveBranch(*MBB); in OptimizeBlock()
1205 TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond, dl); in OptimizeBlock()
1215 IsBranchOnlyBlock(MBB) && CurTBB != MBB && in OptimizeBlock()
1216 !MBB->hasAddressTaken()) { in OptimizeBlock()
1220 TII->RemoveBranch(*MBB); in OptimizeBlock()
1224 if (!MBB->empty()) { in OptimizeBlock()
1226 for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); in OptimizeBlock()
1236 MBB->erase(MBB->begin(), MBB->end()); in OptimizeBlock()
1243 if (MBB->empty()) { in OptimizeBlock()
1246 !PrevBB.isSuccessor(MBB)) { in OptimizeBlock()
1249 if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1250 PriorTBB != MBB && PriorFBB != MBB) { in OptimizeBlock()
1254 PriorTBB = MBB; in OptimizeBlock()
1257 PriorFBB = MBB; in OptimizeBlock()
1267 while(PI != MBB->pred_size()) { in OptimizeBlock()
1268 MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI); in OptimizeBlock()
1269 if (PMBB == MBB) { in OptimizeBlock()
1275 PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB); in OptimizeBlock()
1296 MJTI->ReplaceMBBInJumpTables(MBB, CurTBB); in OptimizeBlock()
1306 TII->InsertBranch(*MBB, CurTBB, 0, CurCond, dl); in OptimizeBlock()
1317 bool CurFallsThru = MBB->canFallThrough(); in OptimizeBlock()
1319 if (!MBB->isLandingPad()) { in OptimizeBlock()
1322 for (MachineBasicBlock::pred_iterator PI = MBB->pred_begin(), in OptimizeBlock()
1323 E = MBB->pred_end(); PI != E; ++PI) { in OptimizeBlock()
1329 if (PredBB != MBB && !PredBB->canFallThrough() && in OptimizeBlock()
1332 && (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) { in OptimizeBlock()
1344 MachineBasicBlock *NextBB = llvm::next(MachineFunction::iterator(MBB)); in OptimizeBlock()
1346 TII->InsertBranch(*MBB, NextBB, 0, CurCond, dl); in OptimizeBlock()
1348 MBB->moveAfter(PredBB); in OptimizeBlock()
1357 for (MachineBasicBlock::succ_iterator SI = MBB->succ_begin(), in OptimizeBlock()
1358 E = MBB->succ_end(); SI != E; ++SI) { in OptimizeBlock()
1367 if (SuccBB != MBB && &*SuccPrev != MBB && in OptimizeBlock()
1370 MBB->moveBefore(SuccBB); in OptimizeBlock()
1384 MBB->moveAfter(--MF.end()); in OptimizeBlock()
1403 MachineBasicBlock *MBB = I++; in HoistCommonCode() local
1404 MadeChange |= HoistCommonCodeInSuccs(MBB); in HoistCommonCode()
1431 MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, in findHoistingInsertPosAndDeps() argument
1436 MachineBasicBlock::iterator Loc = MBB->getFirstTerminator(); in findHoistingInsertPosAndDeps()
1438 return MBB->end(); in findHoistingInsertPosAndDeps()
1454 return MBB->end(); in findHoistingInsertPosAndDeps()
1459 if (Loc == MBB->begin()) in findHoistingInsertPosAndDeps()
1460 return MBB->end(); in findHoistingInsertPosAndDeps()
1466 while (PI != MBB->begin() && Loc->isDebugValue()) in findHoistingInsertPosAndDeps()
1494 return MBB->end(); in findHoistingInsertPosAndDeps()
1528 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) { in HoistCommonCodeInSuccs() argument
1531 if (TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty()) in HoistCommonCodeInSuccs()
1534 if (!FBB) FBB = findFalseBlock(MBB, TBB); in HoistCommonCodeInSuccs()
1549 findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs); in HoistCommonCodeInSuccs()
1550 if (Loc == MBB->end()) in HoistCommonCodeInSuccs()
1657 MBB->splice(Loc, TBB, TBB->begin(), TIB); in HoistCommonCodeInSuccs()