Lines Matching refs:BI

106   bool SimplifyUncondBranch(BranchInst *BI, IRBuilder <> &Builder);
107 bool SimplifyCondBranch(BranchInst *BI, IRBuilder <>&Builder);
270 BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator());
271 if (BI == 0) return 0;
273 assert(BI->isConditional() && "Two successors but not conditional?");
274 if (BI->getSuccessor(0) == Pred1) {
281 return BI->getCondition();
358 BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator());
359 if (BI == 0 || BI->isConditional() || BI->getSuccessor(0) != BB)
512 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
513 if (BI->isConditional())
514 Cond = dyn_cast<Instruction>(BI->getCondition());
533 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI))
534 if (BI->isConditional() && BI->getCondition()->hasOneUse())
535 if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition()))
562 BranchInst *BI = cast<BranchInst>(TI);
563 ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
564 BasicBlock *Succ = BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_NE);
568 return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ);
801 if (BranchInst* BI = dyn_cast<BranchInst>(TI)) {
803 ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
1059 /// caller of this function guarantees that BI's block dominates BB1 and BB2.
1060 static bool HoistThenElseCodeToIf(BranchInst *BI) {
1066 BasicBlock *BB1 = BI->getSuccessor(0); // The true destination.
1067 BasicBlock *BB2 = BI->getSuccessor(1); // The false destination
1087 BasicBlock *BIParent = BI->getParent();
1091 // broken BB), instead clone it, and remove BI.
1098 BIParent->getInstList().splice(BI, BB1->getInstList(), I1);
1126 BIParent->getInstList().insert(BI, NT);
1152 (Builder.CreateSelect(BI->getCondition(), BB1V, BB2V,
1166 EraseTerminatorInstAndDCECond(BI);
1436 static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB) {
1438 Value *BrCond = BI->getCondition();
1442 BasicBlock *BB = BI->getParent();
1448 if (ThenBB != BI->getSuccessor(0)) {
1449 assert(ThenBB == BI->getSuccessor(1) && "No edge from 'if' block?");
1452 assert(EndBB == BI->getSuccessor(!Invert) && "No edge from to end block");
1558 IRBuilder<true, NoFolder> Builder(BI);
1569 BB->getInstList().splice(BI, ThenBB->getInstList(), ThenBB->begin(),
1573 IRBuilder<true, NoFolder> Builder(BI);
1604 BranchInst *BI = cast<BranchInst>(BB->getTerminator());
1607 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1631 static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout *TD) {
1632 BasicBlock *BB = BI->getParent();
1633 PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
1657 BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue());
1680 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1719 return FoldCondBranchOnPHI(BI, TD) | true;
1864 static bool SimplifyCondBranchToTwoReturns(BranchInst *BI,
1866 assert(BI->isConditional() && "Must be a conditional branch");
1867 BasicBlock *TrueSucc = BI->getSuccessor(0);
1868 BasicBlock *FalseSucc = BI->getSuccessor(1);
1880 Builder.SetInsertPoint(BI);
1885 TrueSucc->removePredecessor(BI->getParent());
1886 FalseSucc->removePredecessor(BI->getParent());
1888 EraseTerminatorInstAndDCECond(BI);
1900 TrueValue = TVPN->getIncomingValueForBlock(BI->getParent());
1903 FalseValue = FVPN->getIncomingValueForBlock(BI->getParent());
1919 TrueSucc->removePredecessor(BI->getParent());
1920 FalseSucc->removePredecessor(BI->getParent());
1923 Value *BrCond = BI->getCondition();
1941 << "\n " << *BI << "NewRet = " << *RI
1944 EraseTerminatorInstAndDCECond(BI);
1953 static bool ExtractBranchMetadata(BranchInst *BI,
1955 assert(BI->isConditional() &&
1957 MDNode *ProfileData = BI->getMetadata(LLVMContext::MD_prof);
1988 bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
1989 BasicBlock *BB = BI->getParent();
1992 if (BI->isConditional())
1993 Cond = dyn_cast<Instruction>(BI->getCondition());
2002 (BI->getSuccessor(0) == PBI->getSuccessor(0) ||
2003 BI->getSuccessor(0) == PBI->getSuccessor(1))) {
2058 if (&*CondIt != BI)
2071 BasicBlock *TrueDest = BI->getSuccessor(0);
2072 BasicBlock *FalseDest = (BI->isConditional()) ? BI->getSuccessor(1) : 0;
2085 (BI->isConditional() &&
2086 !SafeToMergeTerminators(BI, PBI)) ||
2087 (!BI->isConditional() &&
2088 !isProfitableToFoldUnconditional(BI, PBI, Cond, PHIs)))
2095 if (BI->isConditional()) {
2185 if (BI->isConditional()) {
2194 bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
2201 // BI: br i1 %y, TrueDest, FalseDest
2202 //TrueWeight is TrueWeight for PBI * TrueWeight for BI.
2204 //FalseWeight is FalseWeight for PBI * TotalWeight for BI +
2205 // TrueWeight for PBI * FalseWeight for BI.
2217 // BI: br i1 %y, TrueDest, FalseDest
2218 //TrueWeight is TrueWeight for PBI * TotalWeight for BI +
2219 // FalseWeight for PBI * TrueWeight for BI.
2222 //FalseWeight is FalseWeight for PBI * FalseWeight for BI.
2234 MDBuilder(BI->getContext()).
2290 // could replace PBI's branch probabilities with BI's.
2304 /// that PBI and BI are both conditional branches, and BI is in one of the
2305 /// successor blocks of PBI - PBI branches to BI.
2306 static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) {
2307 assert(PBI->isConditional() && BI->isConditional());
2308 BasicBlock *BB = BI->getParent();
2313 if (PBI->getCondition() == BI->getCondition() &&
2320 BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()),
2332 BI->getCondition()->getName() + ".pr",
2340 PBI != BI && PBI->isConditional() &&
2341 PBI->getCondition() == BI->getCondition() &&
2347 NewPN->addIncoming(BI->getCondition(), P);
2351 BI->setCondition(NewPN);
2363 if (&*BBI != BI)
2367 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
2372 if (PBI->getSuccessor(0) == BI->getSuccessor(0))
2374 else if (PBI->getSuccessor(0) == BI->getSuccessor(1))
2376 else if (PBI->getSuccessor(1) == BI->getSuccessor(0))
2378 else if (PBI->getSuccessor(1) == BI->getSuccessor(1))
2401 BasicBlock *OtherDest = BI->getSuccessor(BIOp ^ 1);
2404 << "AND: " << *BI->getParent());
2425 // BI may have other predecessors. Because of this, we leave
2434 Value *BICond = BI->getCondition();
2450 bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
2469 MDBuilder(BI->getContext()).
2474 // block that are identical to the entries for BI's block.
2749 static bool SimplifyBranchOnICmpChain(BranchInst *BI, const DataLayout *TD,
2751 Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
2793 BasicBlock *DefaultBB = BI->getSuccessor(1);
2794 BasicBlock *EdgeBB = BI->getSuccessor(0);
2797 BasicBlock *BB = BI->getParent();
2806 BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test");
2827 Builder.SetInsertPoint(BI);
2855 EraseTerminatorInstAndDCECond(BI);
2931 if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) {
2932 if (BI->isUnconditional())
2935 CondBranchPreds.push_back(BI);
2960 BranchInst *BI = CondBranchPreds.pop_back_val();
2963 if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) &&
2964 isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) &&
2965 SimplifyCondBranchToTwoReturns(BI, Builder))
3024 if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
3025 if (BI->isUnconditional()) {
3026 if (BI->getSuccessor(0) == BB) {
3032 if (BI->getSuccessor(0) == BB) {
3033 Builder.CreateBr(BI->getSuccessor(1));
3034 EraseTerminatorInstAndDCECond(BI);
3035 } else if (BI->getSuccessor(1) == BB) {
3036 Builder.CreateBr(BI->getSuccessor(0));
3037 EraseTerminatorInstAndDCECond(BI);
3103 BranchInst *BI = Builder.CreateBr(II->getNormalDest());
3108 Builder.SetInsertPoint(BI);
3904 bool SimplifyCFGOpt::SimplifyUncondBranch(BranchInst *BI, IRBuilder<> &Builder){
3905 BasicBlock *BB = BI->getParent();
3907 if (SinkCommon && SinkThenElseCodeToEnd(BI))
3931 if (FoldBranchToCommonDest(BI))
3937 bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
3938 BasicBlock *BB = BI->getParent();
3941 if (isValueEqualityComparison(BI)) {
3946 if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred, Builder))
3955 if (&*I == BI) {
3956 if (FoldValueComparisonIntoPredecessors(BI, Builder))
3958 } else if (&*I == cast<Instruction>(BI->getCondition())){
3963 if (&*I == BI && FoldValueComparisonIntoPredecessors(BI, Builder))
3969 if (SimplifyBranchOnICmpChain(BI, TD, Builder))
3975 if (FoldBranchToCommonDest(BI))
3979 // from BI. We know that the condbr dominates the two blocks, so see if
3982 if (BI->getSuccessor(0)->getSinglePredecessor() != 0) {
3983 if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
3984 if (HoistThenElseCodeToIf(BI))
3989 TerminatorInst *Succ0TI = BI->getSuccessor(0)->getTerminator();
3991 Succ0TI->getSuccessor(0) == BI->getSuccessor(1))
3992 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0)))
3995 } else if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
3998 TerminatorInst *Succ1TI = BI->getSuccessor(1)->getTerminator();
4000 Succ1TI->getSuccessor(0) == BI->getSuccessor(0))
4001 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1)))
4007 if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition()))
4008 if (PN->getParent() == BI->getParent())
4009 if (FoldCondBranchOnPHI(BI, TD))
4015 if (PBI != BI && PBI->isConditional())
4016 if (SimplifyCondBranchToCondBranch(PBI, BI))
4072 if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
4076 if (BI->isUnconditional())
4079 Builder.CreateBr(BI->getSuccessor(0) == BB ? BI->getSuccessor(1) :
4080 BI->getSuccessor(0));
4081 BI->eraseFromParent();
4132 if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
4133 if (BI->isUnconditional()) {
4134 if (SimplifyUncondBranch(BI, Builder)) return true;
4136 if (SimplifyCondBranch(BI, Builder)) return true;