Lines Matching defs:BB

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