Lines Matching refs:MBB
156 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) { in RemoveDeadBlock() argument
157 assert(MBB->pred_empty() && "MBB must be dead!"); in RemoveDeadBlock()
158 LLVM_DEBUG(dbgs() << "\nRemoving MBB: " << *MBB); in RemoveDeadBlock()
160 MachineFunction *MF = MBB->getParent(); in RemoveDeadBlock()
162 while (!MBB->succ_empty()) in RemoveDeadBlock()
163 MBB->removeSuccessor(MBB->succ_end()-1); in RemoveDeadBlock()
166 TriedMerging.erase(MBB); in RemoveDeadBlock()
169 for (const MachineInstr &MI : *MBB) in RemoveDeadBlock()
174 MF->erase(MBB); in RemoveDeadBlock()
175 EHScopeMembership.erase(MBB); in RemoveDeadBlock()
177 MLI->removeBlock(MBB); in RemoveDeadBlock()
296 static unsigned HashEndOfMBB(const MachineBasicBlock &MBB) { in HashEndOfMBB() argument
297 MachineBasicBlock::const_iterator I = MBB.getLastNonDebugInstr(false); in HashEndOfMBB()
298 if (I == MBB.end()) in HashEndOfMBB()
314 MachineBasicBlock *MBB) { in skipBackwardPastNonInstructions() argument
315 while (I != MBB->begin()) { in skipBackwardPastNonInstructions()
320 return MBB->end(); in skipBackwardPastNonInstructions()
500 static unsigned CountTerminators(MachineBasicBlock *MBB, in CountTerminators() argument
502 I = MBB->end(); in CountTerminators()
505 if (I == MBB->begin()) { in CountTerminators()
506 I = MBB->end(); in CountTerminators()
519 static bool blockEndsInUnreachable(const MachineBasicBlock *MBB) { in blockEndsInUnreachable() argument
520 if (!MBB->succ_empty()) in blockEndsInUnreachable()
522 if (MBB->empty()) in blockEndsInUnreachable()
524 return !(MBB->back().isReturn() || MBB->back().isIndirectBranch()); in blockEndsInUnreachable()
617 auto BothFallThrough = [](MachineBasicBlock *MBB) { in ProfitableToMerge() argument
618 if (!MBB->succ_empty() && !MBB->canFallThrough()) in ProfitableToMerge()
620 MachineFunction::iterator I(MBB); in ProfitableToMerge()
621 MachineFunction *MF = MBB->getParent(); in ProfitableToMerge()
622 return (MBB != &*MF->begin()) && std::prev(I)->canFallThrough(); in ProfitableToMerge()
737 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in CreateCommonTailOnlyBlock() local
739 LLVM_DEBUG(dbgs() << "\nSplitting " << printMBBReference(*MBB) << ", size " in CreateCommonTailOnlyBlock()
745 const BasicBlock *BB = (SuccBB && MBB->succ_size() == 1) ? in CreateCommonTailOnlyBlock()
746 SuccBB->getBasicBlock() : MBB->getBasicBlock(); in CreateCommonTailOnlyBlock()
747 MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI, BB); in CreateCommonTailOnlyBlock()
757 if (PredBB == MBB) in CreateCommonTailOnlyBlock()
766 MachineBasicBlock *MBB = MBBIStartPos->getParent(); in mergeOperations() local
771 for (auto E = MBB->end(); MBBIStartPos != E; ++MBBIStartPos) in mergeOperations()
774 MachineBasicBlock::reverse_iterator MBBI = MBB->rbegin(); in mergeOperations()
775 MachineBasicBlock::reverse_iterator MBBIE = MBB->rend(); in mergeOperations()
797 MBBICommon->cloneMergedMemRefs(*MBB->getParent(), {&*MBBICommon, &*MBBI}); in mergeOperations()
814 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in mergeCommonTails() local
820 mergeOperations(SameTails[i].getTailStartPos(), *MBB); in mergeCommonTails()
822 assert(SameTails[i].getTailStartPos() == MBB->begin() && in mergeCommonTails()
827 for (auto &MI : *MBB) { in mergeCommonTails()
852 computeLiveIns(NewLiveIns, *MBB); in mergeCommonTails()
857 for (MachineBasicBlock *Pred : MBB->predecessors()) { in mergeCommonTails()
878 MBB->clearLiveIns(); in mergeCommonTails()
879 addLiveIns(*MBB, NewLiveIns); in mergeCommonTails()
956 MachineBasicBlock *MBB = SameTails[i].getBlock(); in TryTailMergeBlocks() local
957 if ((MBB == EntryBB || MBB->isEHPad()) && in TryTailMergeBlocks()
960 if (MBB == PredBB) { in TryTailMergeBlocks()
981 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in TryTailMergeBlocks() local
984 setCommonTailEdgeWeights(*MBB); in TryTailMergeBlocks()
992 LLVM_DEBUG(dbgs() << "\nUsing common tail in " << printMBBReference(*MBB) in TryTailMergeBlocks()
1000 replaceTailWithBranchTo(SameTails[i].getTailStartPos(), *MBB); in TryTailMergeBlocks()
1020 for (MachineBasicBlock &MBB : MF) { in TailMergeBlocks()
1023 if (!TriedMerging.count(&MBB) && MBB.succ_empty()) in TailMergeBlocks()
1024 MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(MBB), &MBB, in TailMergeBlocks()
1025 MBB.findBranchDebugLoc())); in TailMergeBlocks()
1218 for (MachineBasicBlock &MBB : in OptimizeBranches()
1220 MadeChange |= OptimizeBlock(&MBB); in OptimizeBranches()
1223 if (MBB.pred_empty() && !MBB.isMachineBlockAddressTaken()) { in OptimizeBranches()
1224 RemoveDeadBlock(&MBB); in OptimizeBranches()
1235 static bool IsEmptyBlock(MachineBasicBlock *MBB) { in IsEmptyBlock() argument
1236 return MBB->getFirstNonDebugInstr(true) == MBB->end(); in IsEmptyBlock()
1241 static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { in IsBranchOnlyBlock() argument
1242 MachineBasicBlock::iterator I = MBB->getFirstNonDebugInstr(); in IsBranchOnlyBlock()
1243 assert(I != MBB->end() && "empty block!"); in IsBranchOnlyBlock()
1274 static DebugLoc getBranchDebugLoc(MachineBasicBlock &MBB) { in getBranchDebugLoc() argument
1275 MachineBasicBlock::iterator I = MBB.getLastNonDebugInstr(); in getBranchDebugLoc()
1276 if (I != MBB.end() && I->isBranch()) in getBranchDebugLoc()
1282 MachineBasicBlock &MBB, in copyDebugInfoToPredecessor() argument
1285 for (MachineInstr &MI : MBB.instrs()) in copyDebugInfoToPredecessor()
1294 MachineBasicBlock &MBB, in copyDebugInfoToSuccessor() argument
1297 for (MachineInstr &MI : MBB.instrs()) in copyDebugInfoToSuccessor()
1313 MachineBasicBlock &MBB) { in salvageDebugInfoFromEmptyBlock() argument
1314 assert(IsEmptyBlock(&MBB) && "Expected an empty block (except debug info)."); in salvageDebugInfoFromEmptyBlock()
1317 for (MachineBasicBlock *SuccBB : MBB.successors()) in salvageDebugInfoFromEmptyBlock()
1319 copyDebugInfoToSuccessor(TII, MBB, *SuccBB); in salvageDebugInfoFromEmptyBlock()
1323 for (MachineBasicBlock *PredBB : MBB.predecessors()) in salvageDebugInfoFromEmptyBlock()
1325 copyDebugInfoToPredecessor(TII, MBB, *PredBB); in salvageDebugInfoFromEmptyBlock()
1328 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) { in OptimizeBlock() argument
1330 MachineFunction &MF = *MBB->getParent(); in OptimizeBlock()
1333 MachineFunction::iterator FallThrough = MBB->getIterator(); in OptimizeBlock()
1339 auto MBBEHScope = EHScopeMembership.find(MBB); in OptimizeBlock()
1351 TII->analyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true); in OptimizeBlock()
1357 if (IsEmptyBlock(MBB) && !MBB->isEHPad() && !MBB->hasAddressTaken() && in OptimizeBlock()
1359 salvageDebugInfoFromEmptyBlock(TII, *MBB); in OptimizeBlock()
1361 if (MBB->pred_empty()) return MadeChange; in OptimizeBlock()
1370 } else if (MBB->isSuccessor(&*FallThrough)) { in OptimizeBlock()
1373 while (!MBB->pred_empty()) { in OptimizeBlock()
1374 MachineBasicBlock *Pred = *(MBB->pred_end()-1); in OptimizeBlock()
1375 Pred->ReplaceUsesOfBlockWith(MBB, &*FallThrough); in OptimizeBlock()
1380 for (auto SI = MBB->succ_begin(), SE = MBB->succ_end(); SI != SE; ++SI) in OptimizeBlock()
1383 FallThrough->copySuccessor(MBB, SI); in OptimizeBlock()
1388 MJTI->ReplaceMBBInJumpTables(MBB, &*FallThrough); in OptimizeBlock()
1396 MachineBasicBlock &PrevBB = *std::prev(MachineFunction::iterator(MBB)); in OptimizeBlock()
1410 if (PriorTBB != MBB) in OptimizeBlock()
1424 if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && in OptimizeBlock()
1425 PrevBB.succ_size() == 1 && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1426 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1428 << "From MBB: " << *MBB); in OptimizeBlock()
1433 MachineBasicBlock::iterator MBBIter = MBB->begin(); in OptimizeBlock()
1436 while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end() in OptimizeBlock()
1445 PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end()); in OptimizeBlock()
1448 PrevBB.transferSuccessors(MBB); in OptimizeBlock()
1455 if (PriorTBB == MBB && !PriorFBB) { in OptimizeBlock()
1464 if (PriorFBB == MBB) { in OptimizeBlock()
1476 if (PriorTBB == MBB) { in OptimizeBlock()
1496 if (MBB->succ_empty() && !PriorCond.empty() && !PriorFBB && in OptimizeBlock()
1498 !MBB->canFallThrough()) { in OptimizeBlock()
1507 !IsBetterFallthrough(PriorTBB, MBB)) in OptimizeBlock()
1514 LLVM_DEBUG(dbgs() << "\nMoving MBB: " << *MBB in OptimizeBlock()
1519 TII->insertBranch(PrevBB, MBB, nullptr, NewPriorCond, dl); in OptimizeBlock()
1522 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1531 if (!IsEmptyBlock(MBB)) { in OptimizeBlock()
1532 MachineInstr &TailCall = *MBB->getFirstNonDebugInstr(); in OptimizeBlock()
1535 for (auto &Pred : MBB->predecessors()) { in OptimizeBlock()
1542 if (PredAnalyzable && !PredCond.empty() && PredTBB == MBB && in OptimizeBlock()
1564 Pred->removeSuccessor(MBB); in OptimizeBlock()
1577 if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) { in OptimizeBlock()
1580 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1581 TII->removeBranch(*MBB); in OptimizeBlock()
1582 TII->insertBranch(*MBB, CurFBB, CurTBB, NewCond, dl); in OptimizeBlock()
1592 IsBranchOnlyBlock(MBB) && CurTBB != MBB && in OptimizeBlock()
1593 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1594 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1598 TII->removeBranch(*MBB); in OptimizeBlock()
1602 if (IsEmptyBlock(MBB)) { in OptimizeBlock()
1605 MBB->erase(MBB->begin(), MBB->end()); in OptimizeBlock()
1612 if (MBB->empty()) { in OptimizeBlock()
1615 !PrevBB.isSuccessor(MBB)) { in OptimizeBlock()
1618 if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1619 PriorTBB != MBB && PriorFBB != MBB) { in OptimizeBlock()
1623 PriorTBB = MBB; in OptimizeBlock()
1626 PriorFBB = MBB; in OptimizeBlock()
1637 while(PI != MBB->pred_size()) { in OptimizeBlock()
1638 MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI); in OptimizeBlock()
1639 if (PMBB == MBB) { in OptimizeBlock()
1645 PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB); in OptimizeBlock()
1649 for (auto SI = MBB->succ_begin(), SE = MBB->succ_end(); SI != SE; in OptimizeBlock()
1653 CurTBB->copySuccessor(MBB, SI); in OptimizeBlock()
1675 MJTI->ReplaceMBBInJumpTables(MBB, CurTBB); in OptimizeBlock()
1685 TII->insertBranch(*MBB, CurTBB, nullptr, CurCond, dl); in OptimizeBlock()
1695 bool CurFallsThru = MBB->canFallThrough(); in OptimizeBlock()
1697 if (!MBB->isEHPad()) { in OptimizeBlock()
1701 for (MachineBasicBlock *PredBB : MBB->predecessors()) { in OptimizeBlock()
1705 if (PredBB != MBB && !PredBB->canFallThrough() && in OptimizeBlock()
1707 (PredTBB == MBB || PredFBB == MBB) && in OptimizeBlock()
1709 (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) { in OptimizeBlock()
1721 MachineBasicBlock *NextBB = &*std::next(MBB->getIterator()); in OptimizeBlock()
1723 TII->insertBranch(*MBB, NextBB, nullptr, CurCond, DebugLoc()); in OptimizeBlock()
1725 MBB->moveAfter(PredBB); in OptimizeBlock()
1745 if (SuccBB != MBB && &*SuccPrev != MBB && in OptimizeBlock()
1747 MBB->moveBefore(SuccBB); in OptimizeBlock()
1774 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1790 for (MachineBasicBlock &MBB : llvm::make_early_inc_range(MF)) in HoistCommonCode()
1791 MadeChange |= HoistCommonCodeInSuccs(&MBB); in HoistCommonCode()
1825 MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, in findHoistingInsertPosAndDeps() argument
1830 MachineBasicBlock::iterator Loc = MBB->getFirstTerminator(); in findHoistingInsertPosAndDeps()
1832 return MBB->end(); in findHoistingInsertPosAndDeps()
1846 return MBB->end(); in findHoistingInsertPosAndDeps()
1860 if (Loc == MBB->begin()) in findHoistingInsertPosAndDeps()
1865 MachineBasicBlock::iterator PI = prev_nodbg(Loc, MBB->begin()); in findHoistingInsertPosAndDeps()
1895 return MBB->end(); in findHoistingInsertPosAndDeps()
1921 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) { in HoistCommonCodeInSuccs() argument
1924 if (TII->analyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty()) in HoistCommonCodeInSuccs()
1927 if (!FBB) FBB = findFalseBlock(MBB, TBB); in HoistCommonCodeInSuccs()
1942 findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs); in HoistCommonCodeInSuccs()
1943 if (Loc == MBB->end()) in HoistCommonCodeInSuccs()
2058 MBB->splice(Loc, TBB, TBB->begin(), TIB); in HoistCommonCodeInSuccs()