Lines Matching refs:MBB
125 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) { in RemoveDeadBlock() argument
126 assert(MBB->pred_empty() && "MBB must be dead!"); in RemoveDeadBlock()
127 DEBUG(dbgs() << "\nRemoving MBB: " << *MBB); in RemoveDeadBlock()
129 MachineFunction *MF = MBB->getParent(); in RemoveDeadBlock()
131 while (!MBB->succ_empty()) in RemoveDeadBlock()
132 MBB->removeSuccessor(MBB->succ_end()-1); in RemoveDeadBlock()
135 TriedMerging.erase(MBB); in RemoveDeadBlock()
138 MF->erase(MBB); in RemoveDeadBlock()
139 FuncletMembership.erase(MBB); in RemoveDeadBlock()
141 MLI->removeBlock(MBB); in RemoveDeadBlock()
153 bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) { in OptimizeImpDefsBlock() argument
155 MachineBasicBlock::iterator I = MBB->begin(); in OptimizeImpDefsBlock()
156 while (I != MBB->end()) { in OptimizeImpDefsBlock()
173 while (I != MBB->end()) { in OptimizeImpDefsBlock()
187 I = MBB->begin(); in OptimizeImpDefsBlock()
191 MBB->erase(ImpDefMI); in OptimizeImpDefsBlock()
222 for (MachineBasicBlock &MBB : MF) { in OptimizeFunction()
225 if (!TII->analyzeBranch(MBB, TBB, FBB, Cond, true)) in OptimizeFunction()
226 MadeChange |= MBB.CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in OptimizeFunction()
227 MadeChange |= OptimizeImpDefsBlock(&MBB); in OptimizeFunction()
319 static unsigned HashEndOfMBB(const MachineBasicBlock &MBB) { in HashEndOfMBB() argument
320 MachineBasicBlock::const_iterator I = MBB.getLastNonDebugInstr(); in HashEndOfMBB()
321 if (I == MBB.end()) in HashEndOfMBB()
402 void BranchFolder::computeLiveIns(MachineBasicBlock &MBB) { in computeLiveIns() argument
407 LiveRegs.addLiveOutsNoPristines(MBB); in computeLiveIns()
408 for (MachineInstr &MI : make_range(MBB.rbegin(), MBB.rend())) in computeLiveIns()
422 MBB.addLiveIn(Reg); in computeLiveIns()
545 BranchFolder::MBFIWrapper::getBlockFreq(const MachineBasicBlock *MBB) const { in getBlockFreq()
546 auto I = MergedBBFreq.find(MBB); in getBlockFreq()
551 return MBFI.getBlockFreq(MBB); in getBlockFreq()
554 void BranchFolder::MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB, in setBlockFreq() argument
556 MergedBBFreq[MBB] = F; in setBlockFreq()
561 const MachineBasicBlock *MBB) const { in printBlockFreq()
562 return MBFI.printBlockFreq(OS, getBlockFreq(MBB)); in printBlockFreq()
574 static unsigned CountTerminators(MachineBasicBlock *MBB, in CountTerminators() argument
576 I = MBB->end(); in CountTerminators()
579 if (I == MBB->begin()) { in CountTerminators()
580 I = MBB->end(); in CountTerminators()
750 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in CreateCommonTailOnlyBlock() local
754 DEBUG(dbgs() << "\nSplitting BB#" << MBB->getNumber() << ", size " in CreateCommonTailOnlyBlock()
760 const BasicBlock *BB = (SuccBB && MBB->succ_size() == 1) ? in CreateCommonTailOnlyBlock()
761 SuccBB->getBasicBlock() : MBB->getBasicBlock(); in CreateCommonTailOnlyBlock()
762 MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI, BB); in CreateCommonTailOnlyBlock()
772 if (PredBB == MBB) in CreateCommonTailOnlyBlock()
782 MachineBasicBlock *MBB = MBBIStartPos->getParent(); in mergeMMOsFromMemoryOperations() local
787 for (auto E = MBB->end(); MBBIStartPos != E; ++MBBIStartPos) in mergeMMOsFromMemoryOperations()
790 MachineBasicBlock::reverse_iterator MBBI = MBB->rbegin(); in mergeMMOsFromMemoryOperations()
791 MachineBasicBlock::reverse_iterator MBBIE = MBB->rend(); in mergeMMOsFromMemoryOperations()
893 MachineBasicBlock *MBB = SameTails[i].getBlock(); in TryTailMergeBlocks() local
894 if (MBB == EntryBB && SameTails[i].tailIsWholeBlock()) in TryTailMergeBlocks()
896 if (MBB == PredBB) { in TryTailMergeBlocks()
917 MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock(); in TryTailMergeBlocks() local
920 setCommonTailEdgeWeights(*MBB); in TryTailMergeBlocks()
924 DEBUG(dbgs() << "\nUsing common tail in BB#" << MBB->getNumber() in TryTailMergeBlocks()
932 mergeMMOsFromMemoryOperations(SameTails[i].getTailStartPos(), *MBB); in TryTailMergeBlocks()
934 ReplaceTailWithBranchTo(SameTails[i].getTailStartPos(), MBB); in TryTailMergeBlocks()
955 for (MachineBasicBlock &MBB : MF) { in TailMergeBlocks()
958 if (!TriedMerging.count(&MBB) && MBB.succ_empty()) in TailMergeBlocks()
959 MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(MBB), &MBB)); in TailMergeBlocks()
1161 MachineBasicBlock *MBB = &*I++; in OptimizeBranches() local
1162 MadeChange |= OptimizeBlock(MBB); in OptimizeBranches()
1165 if (MBB->pred_empty()) { in OptimizeBranches()
1166 RemoveDeadBlock(MBB); in OptimizeBranches()
1177 static bool IsEmptyBlock(MachineBasicBlock *MBB) { in IsEmptyBlock() argument
1178 return MBB->getFirstNonDebugInstr() == MBB->end(); in IsEmptyBlock()
1183 static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { in IsBranchOnlyBlock() argument
1184 MachineBasicBlock::iterator I = MBB->getFirstNonDebugInstr(); in IsBranchOnlyBlock()
1185 assert(I != MBB->end() && "empty block!"); in IsBranchOnlyBlock()
1214 static DebugLoc getBranchDebugLoc(MachineBasicBlock &MBB) { in getBranchDebugLoc() argument
1215 MachineBasicBlock::iterator I = MBB.getLastNonDebugInstr(); in getBranchDebugLoc()
1216 if (I != MBB.end() && I->isBranch()) in getBranchDebugLoc()
1223 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) { in OptimizeBlock() argument
1225 MachineFunction &MF = *MBB->getParent(); in OptimizeBlock()
1228 MachineFunction::iterator FallThrough = MBB->getIterator(); in OptimizeBlock()
1234 auto MBBFunclet = FuncletMembership.find(MBB); in OptimizeBlock()
1245 if (IsEmptyBlock(MBB) && !MBB->isEHPad() && !MBB->hasAddressTaken() && in OptimizeBlock()
1248 if (MBB->pred_empty()) return MadeChange; in OptimizeBlock()
1257 } else if (MBB->isSuccessor(&*FallThrough)) { in OptimizeBlock()
1260 while (!MBB->pred_empty()) { in OptimizeBlock()
1261 MachineBasicBlock *Pred = *(MBB->pred_end()-1); in OptimizeBlock()
1262 Pred->ReplaceUsesOfBlockWith(MBB, &*FallThrough); in OptimizeBlock()
1267 MJTI->ReplaceMBBInJumpTables(MBB, &*FallThrough); in OptimizeBlock()
1275 MachineBasicBlock &PrevBB = *std::prev(MachineFunction::iterator(MBB)); in OptimizeBlock()
1293 if (PriorTBB != MBB) in OptimizeBlock()
1307 if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && in OptimizeBlock()
1309 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1311 << "From MBB: " << *MBB); in OptimizeBlock()
1316 MachineBasicBlock::iterator MBBIter = MBB->begin(); in OptimizeBlock()
1319 while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end() in OptimizeBlock()
1328 PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end()); in OptimizeBlock()
1331 PrevBB.transferSuccessors(MBB); in OptimizeBlock()
1338 if (PriorTBB == MBB && !PriorFBB) { in OptimizeBlock()
1347 if (PriorFBB == MBB) { in OptimizeBlock()
1359 if (PriorTBB == MBB) { in OptimizeBlock()
1379 if (MBB->succ_empty() && !PriorCond.empty() && !PriorFBB && in OptimizeBlock()
1381 !MBB->canFallThrough()) { in OptimizeBlock()
1390 !IsBetterFallthrough(PriorTBB, MBB)) in OptimizeBlock()
1397 DEBUG(dbgs() << "\nMoving MBB: " << *MBB in OptimizeBlock()
1402 TII->InsertBranch(PrevBB, MBB, nullptr, NewPriorCond, dl); in OptimizeBlock()
1405 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1418 TII->analyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true); in OptimizeBlock()
1421 MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty()); in OptimizeBlock()
1428 if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) { in OptimizeBlock()
1431 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1432 TII->RemoveBranch(*MBB); in OptimizeBlock()
1433 TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond, dl); in OptimizeBlock()
1443 IsBranchOnlyBlock(MBB) && CurTBB != MBB && in OptimizeBlock()
1444 !MBB->hasAddressTaken() && !MBB->isEHPad()) { in OptimizeBlock()
1445 DebugLoc dl = getBranchDebugLoc(*MBB); in OptimizeBlock()
1449 TII->RemoveBranch(*MBB); in OptimizeBlock()
1453 if (IsEmptyBlock(MBB)) { in OptimizeBlock()
1456 MBB->erase(MBB->begin(), MBB->end()); in OptimizeBlock()
1463 if (MBB->empty()) { in OptimizeBlock()
1466 !PrevBB.isSuccessor(MBB)) { in OptimizeBlock()
1469 if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) && in OptimizeBlock()
1470 PriorTBB != MBB && PriorFBB != MBB) { in OptimizeBlock()
1474 PriorTBB = MBB; in OptimizeBlock()
1477 PriorFBB = MBB; in OptimizeBlock()
1488 while(PI != MBB->pred_size()) { in OptimizeBlock()
1489 MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI); in OptimizeBlock()
1490 if (PMBB == MBB) { in OptimizeBlock()
1496 PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB); in OptimizeBlock()
1518 MJTI->ReplaceMBBInJumpTables(MBB, CurTBB); in OptimizeBlock()
1528 TII->InsertBranch(*MBB, CurTBB, nullptr, CurCond, dl); in OptimizeBlock()
1539 bool CurFallsThru = MBB->canFallThrough(); in OptimizeBlock()
1541 if (!MBB->isEHPad()) { in OptimizeBlock()
1544 for (MachineBasicBlock *PredBB : MBB->predecessors()) { in OptimizeBlock()
1548 if (PredBB != MBB && !PredBB->canFallThrough() && in OptimizeBlock()
1551 (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) { in OptimizeBlock()
1563 MachineBasicBlock *NextBB = &*std::next(MBB->getIterator()); in OptimizeBlock()
1565 TII->InsertBranch(*MBB, NextBB, nullptr, CurCond, DebugLoc()); in OptimizeBlock()
1567 MBB->moveAfter(PredBB); in OptimizeBlock()
1576 for (MachineBasicBlock *SuccBB : MBB->successors()) { in OptimizeBlock()
1584 if (SuccBB != MBB && &*SuccPrev != MBB && in OptimizeBlock()
1587 MBB->moveBefore(SuccBB); in OptimizeBlock()
1609 MBB->moveAfter(&MF.back()); in OptimizeBlock()
1628 MachineBasicBlock *MBB = &*I++; in HoistCommonCode() local
1629 MadeChange |= HoistCommonCodeInSuccs(MBB); in HoistCommonCode()
1664 MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, in findHoistingInsertPosAndDeps() argument
1669 MachineBasicBlock::iterator Loc = MBB->getFirstTerminator(); in findHoistingInsertPosAndDeps()
1671 return MBB->end(); in findHoistingInsertPosAndDeps()
1685 return MBB->end(); in findHoistingInsertPosAndDeps()
1695 if (Loc == MBB->begin()) in findHoistingInsertPosAndDeps()
1696 return MBB->end(); in findHoistingInsertPosAndDeps()
1702 while (PI != MBB->begin() && PI->isDebugValue()) in findHoistingInsertPosAndDeps()
1733 return MBB->end(); in findHoistingInsertPosAndDeps()
1763 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) { in HoistCommonCodeInSuccs() argument
1766 if (TII->analyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty()) in HoistCommonCodeInSuccs()
1769 if (!FBB) FBB = findFalseBlock(MBB, TBB); in HoistCommonCodeInSuccs()
1784 findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs); in HoistCommonCodeInSuccs()
1785 if (Loc == MBB->end()) in HoistCommonCodeInSuccs()
1905 MBB->splice(Loc, TBB, TBB->begin(), TIB); in HoistCommonCodeInSuccs()