Lines Matching refs:MBB

153 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) {  in RemoveDeadBlock()  argument
154 assert(MBB->pred_empty() && "MBB must be dead!"); in RemoveDeadBlock()
155 LLVM_DEBUG(dbgs() << "\nRemoving MBB: " << *MBB); in RemoveDeadBlock()
157 MachineFunction *MF = MBB->getParent(); in RemoveDeadBlock()
159 while (!MBB->succ_empty()) in RemoveDeadBlock()
160 MBB->removeSuccessor(MBB->succ_end()-1); in RemoveDeadBlock()
163 TriedMerging.erase(MBB); in RemoveDeadBlock()
166 MF->erase(MBB); in RemoveDeadBlock()
167 EHScopeMembership.erase(MBB); in RemoveDeadBlock()
169 MLI->removeBlock(MBB); in RemoveDeadBlock()
195 for (MachineBasicBlock &MBB : MF) { in OptimizeFunction()
198 if (!TII->analyzeBranch(MBB, TBB, FBB, Cond, true)) in OptimizeFunction()
199 MadeChange |= MBB.CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in OptimizeFunction()
291 static unsigned HashEndOfMBB(const MachineBasicBlock &MBB) { in HashEndOfMBB() argument
292 MachineBasicBlock::const_iterator I = MBB.getLastNonDebugInstr(); in HashEndOfMBB()
293 if (I == MBB.end()) in HashEndOfMBB()
551 BranchFolder::MBFIWrapper::getBlockFreq(const MachineBasicBlock *MBB) const { in getBlockFreq()
552 auto I = MergedBBFreq.find(MBB); in getBlockFreq()
557 return MBFI.getBlockFreq(MBB); in getBlockFreq()
560 void BranchFolder::MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB, in setBlockFreq() argument
562 MergedBBFreq[MBB] = F; in setBlockFreq()
567 const MachineBasicBlock *MBB) const { in printBlockFreq()
568 return MBFI.printBlockFreq(OS, getBlockFreq(MBB)); in printBlockFreq()
589 static unsigned CountTerminators(MachineBasicBlock *MBB, in CountTerminators() argument
591 I = MBB->end(); in CountTerminators()
594 if (I == MBB->begin()) { in CountTerminators()
595 I = MBB->end(); in CountTerminators()
608 static bool blockEndsInUnreachable(const MachineBasicBlock *MBB) { in blockEndsInUnreachable() argument
609 if (!MBB->succ_empty()) in blockEndsInUnreachable()
611 if (MBB->empty()) in blockEndsInUnreachable()
613 return !(MBB->back().isReturn() || MBB->back().isIndirectBranch()); in blockEndsInUnreachable()
693 auto BothFallThrough = [](MachineBasicBlock *MBB) { in ProfitableToMerge() argument
694 if (MBB->succ_size() != 0 && !MBB->canFallThrough()) in ProfitableToMerge()
696 MachineFunction::iterator I(MBB); in ProfitableToMerge()
697 MachineFunction *MF = MBB->getParent(); in ProfitableToMerge()
698 return (MBB != &*MF->begin()) && std::prev(I)->canFallThrough(); in ProfitableToMerge()
808 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in CreateCommonTailOnlyBlock() local
810 LLVM_DEBUG(dbgs() << "\nSplitting " << printMBBReference(*MBB) << ", size " in CreateCommonTailOnlyBlock()
816 const BasicBlock *BB = (SuccBB && MBB->succ_size() == 1) ? in CreateCommonTailOnlyBlock()
817 SuccBB->getBasicBlock() : MBB->getBasicBlock(); in CreateCommonTailOnlyBlock()
818 MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI, BB); in CreateCommonTailOnlyBlock()
828 if (PredBB == MBB) in CreateCommonTailOnlyBlock()
837 MachineBasicBlock *MBB = MBBIStartPos->getParent(); in mergeOperations() local
842 for (auto E = MBB->end(); MBBIStartPos != E; ++MBBIStartPos) in mergeOperations()
845 MachineBasicBlock::reverse_iterator MBBI = MBB->rbegin(); in mergeOperations()
846 MachineBasicBlock::reverse_iterator MBBIE = MBB->rend(); in mergeOperations()
868 MBBICommon->cloneMergedMemRefs(*MBB->getParent(), {&*MBBICommon, &*MBBI}); in mergeOperations()
885 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in mergeCommonTails() local
891 mergeOperations(SameTails[i].getTailStartPos(), *MBB); in mergeCommonTails()
893 assert(SameTails[i].getTailStartPos() == MBB->begin() && in mergeCommonTails()
898 for (auto &MI : *MBB) { in mergeCommonTails()
923 computeLiveIns(NewLiveIns, *MBB); in mergeCommonTails()
928 for (MachineBasicBlock *Pred : MBB->predecessors()) { in mergeCommonTails()
941 MBB->clearLiveIns(); in mergeCommonTails()
942 addLiveIns(*MBB, NewLiveIns); in mergeCommonTails()
1017 MachineBasicBlock *MBB = SameTails[i].getBlock(); in TryTailMergeBlocks() local
1018 if (MBB == EntryBB && SameTails[i].tailIsWholeBlock()) in TryTailMergeBlocks()
1020 if (MBB == PredBB) { in TryTailMergeBlocks()
1041 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in TryTailMergeBlocks() local
1044 setCommonTailEdgeWeights(*MBB); in TryTailMergeBlocks()
1052 LLVM_DEBUG(dbgs() << "\nUsing common tail in " << printMBBReference(*MBB) in TryTailMergeBlocks()
1060 replaceTailWithBranchTo(SameTails[i].getTailStartPos(), *MBB); in TryTailMergeBlocks()
1081 for (MachineBasicBlock &MBB : MF) { in TailMergeBlocks()
1084 if (!TriedMerging.count(&MBB) && MBB.succ_empty()) in TailMergeBlocks()
1085 MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(MBB), &MBB)); in TailMergeBlocks()
1301 MachineBasicBlock *MBB = &*I++; in OptimizeBranches() local
1302 MadeChange |= OptimizeBlock(MBB); in OptimizeBranches()
1305 if (MBB->pred_empty()) { in OptimizeBranches()
1306 RemoveDeadBlock(MBB); in OptimizeBranches()
1317 static bool IsEmptyBlock(MachineBasicBlock *MBB) { in IsEmptyBlock() argument
1318 return MBB->getFirstNonDebugInstr() == MBB->end(); in IsEmptyBlock()
1323 static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { in IsBranchOnlyBlock() argument
1324 MachineBasicBlock::iterator I = MBB->getFirstNonDebugInstr(); in IsBranchOnlyBlock()
1325 assert(I != MBB->end() && "empty block!"); in IsBranchOnlyBlock()
1354 static DebugLoc getBranchDebugLoc(MachineBasicBlock &MBB) { in getBranchDebugLoc() argument
1355 MachineBasicBlock::iterator I = MBB.getLastNonDebugInstr(); in getBranchDebugLoc()
1356 if (I != MBB.end() && I->isBranch()) in getBranchDebugLoc()
1362 MachineBasicBlock &MBB, in copyDebugInfoToPredecessor() argument
1365 for (MachineInstr &MI : MBB.instrs()) in copyDebugInfoToPredecessor()
1374 MachineBasicBlock &MBB, in copyDebugInfoToSuccessor() argument
1377 for (MachineInstr &MI : MBB.instrs()) in copyDebugInfoToSuccessor()
1393 MachineBasicBlock &MBB) { in salvageDebugInfoFromEmptyBlock() argument
1394 assert(IsEmptyBlock(&MBB) && "Expected an empty block (except debug info)."); in salvageDebugInfoFromEmptyBlock()
1397 for (MachineBasicBlock *SuccBB : MBB.successors()) in salvageDebugInfoFromEmptyBlock()
1399 copyDebugInfoToSuccessor(TII, MBB, *SuccBB); in salvageDebugInfoFromEmptyBlock()
1403 for (MachineBasicBlock *PredBB : MBB.predecessors()) in salvageDebugInfoFromEmptyBlock()
1405 copyDebugInfoToPredecessor(TII, MBB, *PredBB); in salvageDebugInfoFromEmptyBlock()
1408 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) { in OptimizeBlock() argument
1410 MachineFunction &MF = *MBB->getParent(); in OptimizeBlock()
1413 MachineFunction::iterator FallThrough = MBB->getIterator(); in OptimizeBlock()
1419 auto MBBEHScope = EHScopeMembership.find(MBB); in OptimizeBlock()
1430 if (IsEmptyBlock(MBB) && !MBB->isEHPad() && !MBB->hasAddressTaken() && in OptimizeBlock()
1432 salvageDebugInfoFromEmptyBlock(TII, *MBB); in OptimizeBlock()
1434 if (MBB->pred_empty()) return MadeChange; in OptimizeBlock()
1443 } else if (MBB->isSuccessor(&*FallThrough)) { in OptimizeBlock()
1446 while (!MBB->pred_empty()) { in OptimizeBlock()
1447 MachineBasicBlock *Pred = *(MBB->pred_end()-1); in OptimizeBlock()
1448 Pred->ReplaceUsesOfBlockWith(MBB, &*FallThrough); in OptimizeBlock()
1453 MJTI->ReplaceMBBInJumpTables(MBB, &*FallThrough); in OptimizeBlock()
1461 MachineBasicBlock &PrevBB = *std::prev(MachineFunction::iterator(MBB)); in OptimizeBlock()
1479 if (PriorTBB != MBB) in OptimizeBlock()
1493 if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && in OptimizeBlock()
1495 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1497 << "From MBB: " << *MBB); in OptimizeBlock()
1502 MachineBasicBlock::iterator MBBIter = MBB->begin(); in OptimizeBlock()
1505 while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end() in OptimizeBlock()
1514 PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end()); in OptimizeBlock()
1517 PrevBB.transferSuccessors(MBB); in OptimizeBlock()
1524 if (PriorTBB == MBB && !PriorFBB) { in OptimizeBlock()
1533 if (PriorFBB == MBB) { in OptimizeBlock()
1545 if (PriorTBB == MBB) { in OptimizeBlock()
1565 if (MBB->succ_empty() && !PriorCond.empty() && !PriorFBB && in OptimizeBlock()
1567 !MBB->canFallThrough()) { in OptimizeBlock()
1576 !IsBetterFallthrough(PriorTBB, MBB)) in OptimizeBlock()
1583 LLVM_DEBUG(dbgs() << "\nMoving MBB: " << *MBB in OptimizeBlock()
1588 TII->insertBranch(PrevBB, MBB, nullptr, NewPriorCond, dl); in OptimizeBlock()
1591 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1600 if (!IsEmptyBlock(MBB) && MBB->pred_size() == 1 && in OptimizeBlock()
1605 MachineInstr &TailCall = *MBB->getFirstNonDebugInstr(); in OptimizeBlock()
1607 MachineBasicBlock *Pred = *MBB->pred_begin(); in OptimizeBlock()
1613 if (PredAnalyzable && !PredCond.empty() && PredTBB == MBB && in OptimizeBlock()
1624 Pred->removeSuccessor(MBB); in OptimizeBlock()
1641 TII->analyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true); in OptimizeBlock()
1644 MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty()); in OptimizeBlock()
1651 if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) { in OptimizeBlock()
1654 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1655 TII->removeBranch(*MBB); in OptimizeBlock()
1656 TII->insertBranch(*MBB, CurFBB, CurTBB, NewCond, dl); in OptimizeBlock()
1666 IsBranchOnlyBlock(MBB) && CurTBB != MBB && in OptimizeBlock()
1667 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1668 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1672 TII->removeBranch(*MBB); in OptimizeBlock()
1676 if (IsEmptyBlock(MBB)) { in OptimizeBlock()
1679 MBB->erase(MBB->begin(), MBB->end()); in OptimizeBlock()
1686 if (MBB->empty()) { in OptimizeBlock()
1689 !PrevBB.isSuccessor(MBB)) { in OptimizeBlock()
1692 if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1693 PriorTBB != MBB && PriorFBB != MBB) { in OptimizeBlock()
1697 PriorTBB = MBB; in OptimizeBlock()
1700 PriorFBB = MBB; in OptimizeBlock()
1711 while(PI != MBB->pred_size()) { in OptimizeBlock()
1712 MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI); in OptimizeBlock()
1713 if (PMBB == MBB) { in OptimizeBlock()
1719 PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB); in OptimizeBlock()
1741 MJTI->ReplaceMBBInJumpTables(MBB, CurTBB); in OptimizeBlock()
1751 TII->insertBranch(*MBB, CurTBB, nullptr, CurCond, dl); in OptimizeBlock()
1761 bool CurFallsThru = MBB->canFallThrough(); in OptimizeBlock()
1763 if (!MBB->isEHPad()) { in OptimizeBlock()
1766 for (MachineBasicBlock *PredBB : MBB->predecessors()) { in OptimizeBlock()
1770 if (PredBB != MBB && !PredBB->canFallThrough() && in OptimizeBlock()
1773 (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) { in OptimizeBlock()
1785 MachineBasicBlock *NextBB = &*std::next(MBB->getIterator()); in OptimizeBlock()
1787 TII->insertBranch(*MBB, NextBB, nullptr, CurCond, DebugLoc()); in OptimizeBlock()
1789 MBB->moveAfter(PredBB); in OptimizeBlock()
1798 for (MachineBasicBlock *SuccBB : MBB->successors()) { in OptimizeBlock()
1806 if (SuccBB != MBB && &*SuccPrev != MBB && in OptimizeBlock()
1809 MBB->moveBefore(SuccBB); in OptimizeBlock()
1835 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1852 MachineBasicBlock *MBB = &*I++; in HoistCommonCode() local
1853 MadeChange |= HoistCommonCodeInSuccs(MBB); in HoistCommonCode()
1888 MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, in findHoistingInsertPosAndDeps() argument
1893 MachineBasicBlock::iterator Loc = MBB->getFirstTerminator(); in findHoistingInsertPosAndDeps()
1895 return MBB->end(); in findHoistingInsertPosAndDeps()
1909 return MBB->end(); in findHoistingInsertPosAndDeps()
1923 if (Loc == MBB->begin()) in findHoistingInsertPosAndDeps()
1929 skipDebugInstructionsBackward(std::prev(Loc), MBB->begin()); in findHoistingInsertPosAndDeps()
1959 return MBB->end(); in findHoistingInsertPosAndDeps()
1985 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) { in HoistCommonCodeInSuccs() argument
1988 if (TII->analyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty()) in HoistCommonCodeInSuccs()
1991 if (!FBB) FBB = findFalseBlock(MBB, TBB); in HoistCommonCodeInSuccs()
2006 findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs); in HoistCommonCodeInSuccs()
2007 if (Loc == MBB->end()) in HoistCommonCodeInSuccs()
2122 MBB->splice(Loc, TBB, TBB->begin(), TIB); in HoistCommonCodeInSuccs()