Lines Matching refs:BB

51 static BasicBlock *getOnlyLiveSuccessor(BasicBlock *BB) {  in getOnlyLiveSuccessor()  argument
52 Instruction *TI = BB->getTerminator(); in getOnlyLiveSuccessor()
78 static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop, in removeBlockFromLoops() argument
82 assert(FirstLoop->contains(BB) && "Must be a loop block!"); in removeBlockFromLoops()
85 Current->removeBlockFromLoop(BB); in removeBlockFromLoops()
93 for (BasicBlock *BB : BBs) { in getInnermostLoopFor()
94 Loop *BBL = LI.getLoopFor(BB); in getInnermostLoopFor()
161 for (const BasicBlock *BB : S) in dump() local
162 dbgs() << "\t" << BB->getName() << "\n"; in dump()
167 for (const BasicBlock *BB : S) in dump() local
168 dbgs() << "\t" << BB->getName() << "\n"; in dump()
191 BasicBlock *BB = *I; in hasIrreducibleCFG() local
192 for (auto *Succ : successors(BB)) in hasIrreducibleCFG()
193 if (L.contains(Succ) && !LI.isLoopHeader(Succ) && RPO[BB] > RPO[Succ]) in hasIrreducibleCFG()
223 BasicBlock *BB = *I; in analyze() local
226 if (!LiveLoopBlocks.count(BB)) { in analyze()
227 DeadLoopBlocks.push_back(BB); in analyze()
231 BasicBlock *TheOnlySucc = getOnlyLiveSuccessor(BB); in analyze()
237 bool TakeFoldCandidate = TheOnlySucc && LI.getLoopFor(BB) == &L; in analyze()
239 FoldCandidates.push_back(BB); in analyze()
242 for (BasicBlock *Succ : successors(BB)) in analyze()
293 auto BlockIsInLoop = [&](BasicBlock *BB) { in analyze() argument
294 return any_of(successors(BB), [&](BasicBlock *Succ) { in analyze()
295 return BlocksInLoopAfterFolding.count(Succ) && IsEdgeLive(BB, Succ); in analyze()
299 BasicBlock *BB = *I; in analyze() local
300 if (BlockIsInLoop(BB)) in analyze()
301 BlocksInLoopAfterFolding.insert(BB); in analyze()
362 for (BasicBlock *BB : DeadExitBlocks) { in handleDeadExits()
366 for (auto &PN : BB->phis()) in handleDeadExits()
369 if (auto *LandingPad = dyn_cast<LandingPadInst>(BB->getFirstNonPHI())) in handleDeadExits()
379 DummySwitch->addCase(Builder.getInt32(DummyIdx++), BB); in handleDeadExits()
380 DTUpdates.push_back({DominatorTree::Insert, Preheader, BB}); in handleDeadExits()
397 for (auto *BB : L.blocks()) in handleDeadExits() local
398 removeBlockFromLoops(BB, OuterLoop, StillReachable); in handleDeadExits()
447 for (auto *BB : DeadLoopBlocks) in deleteDeadLoopBlocks() local
448 if (LI.isLoopHeader(BB)) { in deleteDeadLoopBlocks()
449 assert(LI.getLoopFor(BB) != &L && "Attempt to remove current loop!"); in deleteDeadLoopBlocks()
450 Loop *DL = LI.getLoopFor(BB); in deleteDeadLoopBlocks()
453 for (auto *BB : DL->getBlocks()) in deleteDeadLoopBlocks() local
454 PL->removeBlockFromLoop(BB); in deleteDeadLoopBlocks()
461 for (auto *BB : DeadLoopBlocks) { in deleteDeadLoopBlocks() local
462 assert(BB != L.getHeader() && in deleteDeadLoopBlocks()
464 LLVM_DEBUG(dbgs() << "Deleting dead loop block " << BB->getName() in deleteDeadLoopBlocks()
466 LI.removeBlock(BB); in deleteDeadLoopBlocks()
472 for (auto *BB : DeadLoopBlocks) in deleteDeadLoopBlocks() local
473 DTU.deleteBB(BB); in deleteDeadLoopBlocks()
481 for (BasicBlock *BB : FoldCandidates) { in foldTerminators()
482 assert(LI.getLoopFor(BB) == &L && "Should be a loop block!"); in foldTerminators()
483 BasicBlock *TheOnlySucc = getOnlyLiveSuccessor(BB); in foldTerminators()
486 LLVM_DEBUG(dbgs() << "Replacing terminator of " << BB->getName() in foldTerminators()
493 for (auto *Succ : successors(BB)) in foldTerminators()
499 Succ->removePredecessor(BB, PreserveLCSSAPhi); in foldTerminators()
501 MSSAU->removeEdge(BB, Succ); in foldTerminators()
511 TheOnlySucc->removePredecessor(BB, PreserveLCSSAPhi); in foldTerminators()
513 MSSAU->removeDuplicatePhiEdgesBetween(BB, TheOnlySucc); in foldTerminators()
515 IRBuilder<> Builder(BB->getContext()); in foldTerminators()
516 Instruction *Term = BB->getTerminator(); in foldTerminators()
522 DTUpdates.push_back({DominatorTree::Delete, BB, DeadSucc}); in foldTerminators()