Lines Matching full:bb
47 /// If \p BB is a switch or a conditional branch, but only one of its successors
50 static BasicBlock *getOnlyLiveSuccessor(BasicBlock *BB) { in getOnlyLiveSuccessor() argument
51 Instruction *TI = BB->getTerminator(); in getOnlyLiveSuccessor()
76 /// Removes \p BB from all loops from [FirstLoop, LastLoop) in parent chain.
77 static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop, in removeBlockFromLoops() argument
81 assert(FirstLoop->contains(BB) && "Must be a loop block!"); in removeBlockFromLoops()
84 Current->removeBlockFromLoop(BB); in removeBlockFromLoops()
92 for (BasicBlock *BB : BBs) { in getInnermostLoopFor()
93 Loop *BBL = LI.getLoopFor(BB); in getInnermostLoopFor()
160 for (const BasicBlock *BB : S) in dump() local
161 dbgs() << "\t" << BB->getName() << "\n"; in dump()
166 for (const BasicBlock *BB : S) in dump() local
167 dbgs() << "\t" << BB->getName() << "\n"; in dump()
190 BasicBlock *BB = *I; in hasIrreducibleCFG() local
191 for (auto *Succ : successors(BB)) in hasIrreducibleCFG()
192 if (L.contains(Succ) && !LI.isLoopHeader(Succ) && RPO[BB] > RPO[Succ]) in hasIrreducibleCFG()
222 BasicBlock *BB = *I; in analyze() local
225 if (!LiveLoopBlocks.count(BB)) { in analyze()
226 DeadLoopBlocks.push_back(BB); in analyze()
230 BasicBlock *TheOnlySucc = getOnlyLiveSuccessor(BB); in analyze()
236 bool TakeFoldCandidate = TheOnlySucc && LI.getLoopFor(BB) == &L; in analyze()
238 FoldCandidates.push_back(BB); in analyze()
241 for (BasicBlock *Succ : successors(BB)) in analyze()
292 auto BlockIsInLoop = [&](BasicBlock *BB) { in analyze() argument
293 return any_of(successors(BB), [&](BasicBlock *Succ) { in analyze()
294 return BlocksInLoopAfterFolding.count(Succ) && IsEdgeLive(BB, Succ); in analyze()
298 BasicBlock *BB = *I; in analyze() local
299 if (BlockIsInLoop(BB)) in analyze()
300 BlocksInLoopAfterFolding.insert(BB); in analyze()
361 for (BasicBlock *BB : DeadExitBlocks) { in handleDeadExits()
365 for (auto &PN : BB->phis()) in handleDeadExits()
368 if (auto *LandingPad = dyn_cast<LandingPadInst>(BB->getFirstNonPHI())) in handleDeadExits()
378 DummySwitch->addCase(Builder.getInt32(DummyIdx++), BB); in handleDeadExits()
379 DTUpdates.push_back({DominatorTree::Insert, Preheader, BB}); in handleDeadExits()
396 for (auto *BB : L.blocks()) in handleDeadExits() local
397 removeBlockFromLoops(BB, OuterLoop, StillReachable); in handleDeadExits()
446 for (auto *BB : DeadLoopBlocks) in deleteDeadLoopBlocks() local
447 if (LI.isLoopHeader(BB)) { in deleteDeadLoopBlocks()
448 assert(LI.getLoopFor(BB) != &L && "Attempt to remove current loop!"); in deleteDeadLoopBlocks()
449 Loop *DL = LI.getLoopFor(BB); in deleteDeadLoopBlocks()
452 for (auto *BB : DL->getBlocks()) in deleteDeadLoopBlocks() local
453 PL->removeBlockFromLoop(BB); in deleteDeadLoopBlocks()
460 for (auto *BB : DeadLoopBlocks) { in deleteDeadLoopBlocks() local
461 assert(BB != L.getHeader() && in deleteDeadLoopBlocks()
463 LLVM_DEBUG(dbgs() << "Deleting dead loop block " << BB->getName() in deleteDeadLoopBlocks()
465 LI.removeBlock(BB); in deleteDeadLoopBlocks()
471 for (auto *BB : DeadLoopBlocks) in deleteDeadLoopBlocks() local
472 DTU.deleteBB(BB); in deleteDeadLoopBlocks()
480 for (BasicBlock *BB : FoldCandidates) { in foldTerminators()
481 assert(LI.getLoopFor(BB) == &L && "Should be a loop block!"); in foldTerminators()
482 BasicBlock *TheOnlySucc = getOnlyLiveSuccessor(BB); in foldTerminators()
485 LLVM_DEBUG(dbgs() << "Replacing terminator of " << BB->getName() in foldTerminators()
490 // Remove all BB's successors except for the live one. in foldTerminators()
492 for (auto *Succ : successors(BB)) in foldTerminators()
498 Succ->removePredecessor(BB, PreserveLCSSAPhi); in foldTerminators()
500 MSSAU->removeEdge(BB, Succ); in foldTerminators()
505 // If TheOnlySucc was BB's successor more than once, after transform it in foldTerminators()
510 TheOnlySucc->removePredecessor(BB, PreserveLCSSAPhi); in foldTerminators()
512 MSSAU->removeDuplicatePhiEdgesBetween(BB, TheOnlySucc); in foldTerminators()
514 IRBuilder<> Builder(BB->getContext()); in foldTerminators()
515 Instruction *Term = BB->getTerminator(); in foldTerminators()
521 DTUpdates.push_back({DominatorTree::Delete, BB, DeadSucc}); in foldTerminators()