Lines Matching refs:BB
80 bool run(BasicBlock *BB);
134 static Value *GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue, in GetIfCondition() argument
136 PHINode *SomePHI = cast<PHINode>(BB->begin()); in GetIfCondition()
172 if (Pred1Br->getSuccessor(0) == BB && in GetIfCondition()
177 Pred1Br->getSuccessor(1) == BB) { in GetIfCondition()
264 static bool DominatesMergePoint(Value *V, BasicBlock *BB, in DominatesMergePoint() argument
280 if (PBB == BB) return false; in DominatesMergePoint()
286 if (BI == 0 || BI->isConditional() || BI->getSuccessor(0) != BB) in DominatesMergePoint()
312 if (!DominatesMergePoint(*i, BB, AggressiveInsts, CostRemaining)) in DominatesMergePoint()
500 static void EliminateBlockCases(BasicBlock *BB, in EliminateBlockCases() argument
503 if (Cases[i].second == BB) { in EliminateBlockCases()
690 BasicBlock *BB = TI->getParent(); in FoldValueComparisonIntoPredecessors() local
695 SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB)); in FoldValueComparisonIntoPredecessors()
716 if (PredDefault == BB) { in FoldValueComparisonIntoPredecessors()
721 if (PredCases[i].second != BB) in FoldValueComparisonIntoPredecessors()
749 if (PredCases[i].second == BB) { in FoldValueComparisonIntoPredecessors()
780 AddPredecessorToBlock(NewSuccessors[i], Pred, BB); in FoldValueComparisonIntoPredecessors()
804 if (NewSI->getSuccessor(i) == BB) { in FoldValueComparisonIntoPredecessors()
808 InfLoopBlock = BasicBlock::Create(BB->getContext(), in FoldValueComparisonIntoPredecessors()
809 "infloop", BB->getParent()); in FoldValueComparisonIntoPredecessors()
1105 static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) { in BlockIsSimpleEnoughToThreadThrough() argument
1106 BranchInst *BI = cast<BranchInst>(BB->getTerminator()); in BlockIsSimpleEnoughToThreadThrough()
1109 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) { in BlockIsSimpleEnoughToThreadThrough()
1120 if (U->getParent() != BB || isa<PHINode>(U)) return false; in BlockIsSimpleEnoughToThreadThrough()
1134 BasicBlock *BB = BI->getParent(); in FoldCondBranchOnPHI() local
1138 if (!PN || PN->getParent() != BB || !PN->hasOneUse()) in FoldCondBranchOnPHI()
1148 if (!BlockIsSimpleEnoughToThreadThrough(BB)) return false; in FoldCondBranchOnPHI()
1161 if (RealDest == BB) continue; // Skip self loops. in FoldCondBranchOnPHI()
1169 BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(), in FoldCondBranchOnPHI()
1175 AddPredecessorToBlock(RealDest, EdgeBB, BB); in FoldCondBranchOnPHI()
1182 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) { in FoldCondBranchOnPHI()
1215 if (PredBBTI->getSuccessor(i) == BB) { in FoldCondBranchOnPHI()
1216 BB->removePredecessor(PredBB); in FoldCondBranchOnPHI()
1236 BasicBlock *BB = PN->getParent(); in FoldTwoEntryPHINode() local
1238 Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse); in FoldTwoEntryPHINode()
1250 for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I) in FoldTwoEntryPHINode()
1261 for (BasicBlock::iterator II = BB->begin(); isa<PHINode>(II);) { in FoldTwoEntryPHINode()
1269 if (!DominatesMergePoint(PN->getIncomingValue(0), BB, &AggressiveInsts, in FoldTwoEntryPHINode()
1271 !DominatesMergePoint(PN->getIncomingValue(1), BB, &AggressiveInsts, in FoldTwoEntryPHINode()
1278 PN = dyn_cast<PHINode>(BB->begin()); in FoldTwoEntryPHINode()
1341 while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) { in FoldTwoEntryPHINode()
1358 Builder.CreateBr(BB); in FoldTwoEntryPHINode()
1498 BasicBlock *BB = BI->getParent(); in FoldBranchToCommonDest() local
1502 Cond->getParent() != BB || !Cond->hasOneUse()) in FoldBranchToCommonDest()
1508 BasicBlock::iterator FrontIt = BB->front(); in FoldBranchToCommonDest()
1553 if (TrueDest == BB || FalseDest == BB) in FoldBranchToCommonDest()
1556 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { in FoldBranchToCommonDest()
1619 DEBUG(dbgs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB); in FoldBranchToCommonDest()
1659 if (PBI->getSuccessor(0) == BB) { in FoldBranchToCommonDest()
1660 AddPredecessorToBlock(TrueDest, PredBlock, BB); in FoldBranchToCommonDest()
1663 if (PBI->getSuccessor(1) == BB) { in FoldBranchToCommonDest()
1664 AddPredecessorToBlock(FalseDest, PredBlock, BB); in FoldBranchToCommonDest()
1757 for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) in FoldBranchToCommonDest()
1772 BasicBlock *BB = BI->getParent(); in SimplifyCondBranchToCondBranch() local
1781 if (BB->getSinglePredecessor()) { in SimplifyCondBranchToCondBranch()
1783 bool CondIsTrue = PBI->getSuccessor(0) == BB; in SimplifyCondBranchToCondBranch()
1784 BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()), in SimplifyCondBranchToCondBranch()
1792 if (BlockIsSimpleEnoughToThreadThrough(BB)) { in SimplifyCondBranchToCondBranch()
1793 pred_iterator PB = pred_begin(BB), PE = pred_end(BB); in SimplifyCondBranchToCondBranch()
1794 PHINode *NewPN = PHINode::Create(Type::getInt1Ty(BB->getContext()), in SimplifyCondBranchToCondBranch()
1797 BB->begin()); in SimplifyCondBranchToCondBranch()
1807 bool CondIsTrue = PBI->getSuccessor(0) == BB; in SimplifyCondBranchToCondBranch()
1808 NewPN->addIncoming(ConstantInt::get(Type::getInt1Ty(BB->getContext()), in SimplifyCondBranchToCondBranch()
1823 BasicBlock::iterator BBI = BB->begin(); in SimplifyCondBranchToCondBranch()
1850 if (PBI->getSuccessor(PBIOp) == BB) in SimplifyCondBranchToCondBranch()
1878 if (OtherDest == BB) { in SimplifyCondBranchToCondBranch()
1881 BasicBlock *InfLoopBlock = BasicBlock::Create(BB->getContext(), in SimplifyCondBranchToCondBranch()
1882 "infloop", BB->getParent()); in SimplifyCondBranchToCondBranch()
1912 AddPredecessorToBlock(OtherDest, PBI->getParent(), BB); in SimplifyCondBranchToCondBranch()
1921 Value *BIV = PN->getIncomingValueForBlock(BB); in SimplifyCondBranchToCondBranch()
2059 BasicBlock *BB = ICI->getParent(); in TryToSimplifyUncondBranchWithICmpInIt() local
2063 if (isa<PHINode>(BB->begin()) || !ICI->hasOneUse()) return false; in TryToSimplifyUncondBranchWithICmpInIt()
2071 BasicBlock *Pred = BB->getSinglePredecessor(); in TryToSimplifyUncondBranchWithICmpInIt()
2081 if (SI->getDefaultDest() != BB) { in TryToSimplifyUncondBranchWithICmpInIt()
2082 ConstantInt *VVal = SI->findCaseDest(BB); in TryToSimplifyUncondBranchWithICmpInIt()
2091 return SimplifyCFG(BB) | true; in TryToSimplifyUncondBranchWithICmpInIt()
2100 V = ConstantInt::getFalse(BB->getContext()); in TryToSimplifyUncondBranchWithICmpInIt()
2102 V = ConstantInt::getTrue(BB->getContext()); in TryToSimplifyUncondBranchWithICmpInIt()
2107 return SimplifyCFG(BB) | true; in TryToSimplifyUncondBranchWithICmpInIt()
2112 BasicBlock *SuccBlock = BB->getTerminator()->getSuccessor(0); in TryToSimplifyUncondBranchWithICmpInIt()
2120 Constant *DefaultCst = ConstantInt::getTrue(BB->getContext()); in TryToSimplifyUncondBranchWithICmpInIt()
2121 Constant *NewCst = ConstantInt::getFalse(BB->getContext()); in TryToSimplifyUncondBranchWithICmpInIt()
2133 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "switch.edge", in TryToSimplifyUncondBranchWithICmpInIt()
2134 BB->getParent(), BB); in TryToSimplifyUncondBranchWithICmpInIt()
2193 BasicBlock *BB = BI->getParent(); in SimplifyBranchOnICmpChain() local
2196 << " cases into SWITCH. BB is:\n" << *BB); in SimplifyBranchOnICmpChain()
2202 BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test"); in SimplifyBranchOnICmpChain()
2204 TerminatorInst *OldTI = BB->getTerminator(); in SimplifyBranchOnICmpChain()
2216 AddPredecessorToBlock(EdgeBB, BB, NewBB); in SimplifyBranchOnICmpChain()
2219 << "\nEXTRABB = " << *BB); in SimplifyBranchOnICmpChain()
2220 BB = NewBB; in SimplifyBranchOnICmpChain()
2245 Value *InVal = PN->getIncomingValueForBlock(BB); in SimplifyBranchOnICmpChain()
2247 PN->addIncoming(InVal, BB); in SimplifyBranchOnICmpChain()
2253 DEBUG(dbgs() << " ** 'icmp' chain result is:\n" << *BB << '\n'); in SimplifyBranchOnICmpChain()
2260 BasicBlock *BB = RI->getParent(); in SimplifyResume() local
2261 LandingPadInst *LPInst = dyn_cast<LandingPadInst>(BB->getFirstNonPHI()); in SimplifyResume()
2274 for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE;) { in SimplifyResume()
2289 BB->removePredecessor(II->getParent()); in SimplifyResume()
2299 BB->eraseFromParent(); in SimplifyResume()
2304 BasicBlock *BB = RI->getParent(); in SimplifyReturn() local
2305 if (!BB->getFirstNonPHIOrDbg()->isTerminator()) return false; in SimplifyReturn()
2310 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { in SimplifyReturn()
2325 DEBUG(dbgs() << "FOLDING: " << *BB in SimplifyReturn()
2327 (void)FoldReturnIntoUncondBranch(RI, BB, Pred); in SimplifyReturn()
2331 if (pred_begin(BB) == pred_end(BB)) in SimplifyReturn()
2333 BB->eraseFromParent(); in SimplifyReturn()
2354 BasicBlock *BB = UI->getParent(); in SimplifyUnreachable() local
2360 while (UI != BB->begin()) { in SimplifyUnreachable()
2400 if (&BB->front() != UI) return Changed; in SimplifyUnreachable()
2402 SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB)); in SimplifyUnreachable()
2408 if (BI->getSuccessor(0) == BB) { in SimplifyUnreachable()
2414 if (BI->getSuccessor(0) == BB) { in SimplifyUnreachable()
2417 } else if (BI->getSuccessor(1) == BB) { in SimplifyUnreachable()
2426 if (i.getCaseSuccessor() == BB) { in SimplifyUnreachable()
2427 BB->removePredecessor(SI->getParent()); in SimplifyUnreachable()
2434 if (SI->getDefaultDest() == BB) { in SimplifyUnreachable()
2482 if (II->getUnwindDest() == BB) { in SimplifyUnreachable()
2504 if (pred_begin(BB) == pred_end(BB) && in SimplifyUnreachable()
2505 BB != &BB->getParent()->getEntryBlock()) { in SimplifyUnreachable()
2507 BB->eraseFromParent(); in SimplifyUnreachable()
2597 BasicBlock *BB, in FindPHIForConditionForwarding() argument
2599 if (BB->getFirstNonPHIOrDbg() != BB->getTerminator()) in FindPHIForConditionForwarding()
2601 if (!BB->getSinglePredecessor()) in FindPHIForConditionForwarding()
2604 BranchInst *Branch = dyn_cast<BranchInst>(BB->getTerminator()); in FindPHIForConditionForwarding()
2612 int Idx = PHI->getBasicBlockIndex(BB); in FindPHIForConditionForwarding()
2667 BasicBlock *BB = SI->getParent(); in SimplifySwitch() local
2671 if (BasicBlock *OnlyPred = BB->getSinglePredecessor()) in SimplifySwitch()
2673 return SimplifyCFG(BB) | true; in SimplifySwitch()
2678 return SimplifyCFG(BB) | true; in SimplifySwitch()
2682 BasicBlock::iterator BBI = BB->begin(); in SimplifySwitch()
2688 return SimplifyCFG(BB) | true; in SimplifySwitch()
2692 return SimplifyCFG(BB) | true; in SimplifySwitch()
2696 return SimplifyCFG(BB) | true; in SimplifySwitch()
2699 return SimplifyCFG(BB) | true; in SimplifySwitch()
2705 BasicBlock *BB = IBI->getParent(); in SimplifyIndirectBr() local
2713 Dest->removePredecessor(BB); in SimplifyIndirectBr()
2736 return SimplifyCFG(BB) | true; in SimplifyIndirectBr()
2742 BasicBlock *BB = BI->getParent(); in SimplifyUncondBranch() local
2745 BasicBlock::iterator I = BB->getFirstNonPHIOrDbgOrLifetime(); in SimplifyUncondBranch()
2746 if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() && in SimplifyUncondBranch()
2747 TryToSimplifyUncondBranchFromEmptyBlock(BB)) in SimplifyUncondBranch()
2766 BasicBlock *BB = BI->getParent(); in SimplifyCondBranch() local
2773 if (BasicBlock *OnlyPred = BB->getSinglePredecessor()) in SimplifyCondBranch()
2775 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2779 BasicBlock::iterator I = BB->begin(); in SimplifyCondBranch()
2785 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2792 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2804 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2813 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2821 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2830 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2838 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2841 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) in SimplifyCondBranch()
2845 return SimplifyCFG(BB) | true; in SimplifyCondBranch()
2890 static bool removeUndefIntroducingPredecessor(BasicBlock *BB) { in removeUndefIntroducingPredecessor() argument
2891 for (BasicBlock::iterator i = BB->begin(); in removeUndefIntroducingPredecessor()
2898 BB->removePredecessor(PHI->getIncomingBlock(i)); in removeUndefIntroducingPredecessor()
2904 Builder.CreateBr(BI->getSuccessor(0) == BB ? BI->getSuccessor(1) : in removeUndefIntroducingPredecessor()
2915 bool SimplifyCFGOpt::run(BasicBlock *BB) { in run() argument
2918 assert(BB && BB->getParent() && "Block not embedded in function!"); in run()
2919 assert(BB->getTerminator() && "Degenerate basic block encountered!"); in run()
2923 if ((pred_begin(BB) == pred_end(BB) && in run()
2924 BB != &BB->getParent()->getEntryBlock()) || in run()
2925 BB->getSinglePredecessor() == BB) { in run()
2926 DEBUG(dbgs() << "Removing BB: \n" << *BB); in run()
2927 DeleteDeadBlock(BB); in run()
2933 Changed |= ConstantFoldTerminator(BB, true); in run()
2936 Changed |= EliminateDuplicatePHINodes(BB); in run()
2939 Changed |= removeUndefIntroducingPredecessor(BB); in run()
2945 if (MergeBlockIntoPredecessor(BB)) in run()
2948 IRBuilder<> Builder(BB); in run()
2952 if (PHINode *PN = dyn_cast<PHINode>(BB->begin())) in run()
2956 Builder.SetInsertPoint(BB->getTerminator()); in run()
2957 if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) { in run()
2963 } else if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) { in run()
2965 } else if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator())) { in run()
2967 } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) { in run()
2970 dyn_cast<UnreachableInst>(BB->getTerminator())) { in run()
2973 dyn_cast<IndirectBrInst>(BB->getTerminator())) { in run()
2985 bool llvm::SimplifyCFG(BasicBlock *BB, const TargetData *TD) { in SimplifyCFG() argument
2986 return SimplifyCFGOpt(TD).run(BB); in SimplifyCFG()