Lines Matching refs:BI
260 bool simplifyUncondBranch(BranchInst *BI, IRBuilder<> &Builder);
261 bool simplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder);
266 bool HoistThenElseCodeToIf(BranchInst *BI, const TargetTransformInfo &TTI,
268 bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
273 bool SimplifyBranchOnICmpChain(BranchInst *BI, IRBuilder<> &Builder,
432 BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator()); in dominatesMergePoint() local
433 if (!BI || BI->isConditional() || BI->getSuccessor(0) != BB) in dominatesMergePoint()
751 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { in EraseTerminatorAndDCECond() local
752 if (BI->isConditional()) in EraseTerminatorAndDCECond()
753 Cond = dyn_cast<Instruction>(BI->getCondition()); in EraseTerminatorAndDCECond()
772 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) in isValueEqualityComparison() local
773 if (BI->isConditional() && BI->getCondition()->hasOneUse()) in isValueEqualityComparison()
774 if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition())) { in isValueEqualityComparison()
802 BranchInst *BI = cast<BranchInst>(TI); in GetValueEqualityComparisonCases() local
803 ICmpInst *ICI = cast<ICmpInst>(BI->getCondition()); in GetValueEqualityComparisonCases()
804 BasicBlock *Succ = BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_NE); in GetValueEqualityComparisonCases()
807 return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ); in GetValueEqualityComparisonCases()
1077 if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { in GetBranchWeights() local
1079 ICmpInst *ICI = cast<ICmpInst>(BI->getCondition()); in GetBranchWeights()
1440 bool SimplifyCFGOpt::HoistThenElseCodeToIf(BranchInst *BI, in HoistThenElseCodeToIf() argument
1448 BasicBlock *BB1 = BI->getSuccessor(0); // The true destination. in HoistThenElseCodeToIf()
1449 BasicBlock *BB2 = BI->getSuccessor(1); // The false destination in HoistThenElseCodeToIf()
1473 BasicBlock *BIParent = BI->getParent(); in HoistThenElseCodeToIf()
1529 BIParent->getInstList().splice(BI->getIterator(), in HoistThenElseCodeToIf()
1531 BIParent->getInstList().splice(BI->getIterator(), in HoistThenElseCodeToIf()
1538 BIParent->getInstList().splice(BI->getIterator(), in HoistThenElseCodeToIf()
1608 BIParent->getInstList().insert(BI->getIterator(), NT); in HoistThenElseCodeToIf()
1646 Builder.CreateSelect(BI->getCondition(), BB1V, BB2V, in HoistThenElseCodeToIf()
1647 BB1V->getName() + "." + BB2V->getName(), BI)); in HoistThenElseCodeToIf()
1667 for (BasicBlock *Succ : successors(BI)) in HoistThenElseCodeToIf()
1670 EraseTerminatorAndDCECond(BI); in HoistThenElseCodeToIf()
2730 bool SimplifyCFGOpt::SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB, in SpeculativelyExecuteBB() argument
2733 Value *BrCond = BI->getCondition(); in SpeculativelyExecuteBB()
2737 BasicBlock *BB = BI->getParent(); in SpeculativelyExecuteBB()
2745 if (ThenBB != BI->getSuccessor(0)) { in SpeculativelyExecuteBB()
2746 assert(ThenBB == BI->getSuccessor(1) && "No edge from 'if' block?"); in SpeculativelyExecuteBB()
2749 assert(EndBB == BI->getSuccessor(!Invert) && "No edge from to end block"); in SpeculativelyExecuteBB()
2753 if (!BI->getMetadata(LLVMContext::MD_unpredictable)) { in SpeculativelyExecuteBB()
2755 if (BI->extractProfMetadata(TWeight, FWeight) && (TWeight + FWeight) != 0) { in SpeculativelyExecuteBB()
2859 IRBuilder<NoFolder> Builder(BI); in SpeculativelyExecuteBB()
2865 BrCond, TrueV, FalseV, "spec.store.select", BI); in SpeculativelyExecuteBB()
2867 SpeculatedStore->applyMergedLocation(BI->getDebugLoc(), in SpeculativelyExecuteBB()
2884 BB->getInstList().splice(BI->getIterator(), ThenBB->getInstList(), in SpeculativelyExecuteBB()
2888 IRBuilder<NoFolder> Builder(BI); in SpeculativelyExecuteBB()
2905 Value *V = Builder.CreateSelect(BrCond, TrueV, FalseV, "spec.select", BI); in SpeculativelyExecuteBB()
2974 auto *BI = dyn_cast<BranchInst>(From->getTerminator()); in getKnownValueOnEdge() local
2975 if (BI && BI->isConditional() && BI->getCondition() == V && in getKnownValueOnEdge()
2976 BI->getSuccessor(0) != BI->getSuccessor(1)) in getKnownValueOnEdge()
2977 return BI->getSuccessor(0) == To ? ConstantInt::getTrue(BI->getContext()) in getKnownValueOnEdge()
2978 : ConstantInt::getFalse(BI->getContext()); in getKnownValueOnEdge()
2987 FoldCondBranchOnValueKnownInPredecessorImpl(BranchInst *BI, DomTreeUpdater *DTU, in FoldCondBranchOnValueKnownInPredecessorImpl() argument
2991 BasicBlock *BB = BI->getParent(); in FoldCondBranchOnValueKnownInPredecessorImpl()
2992 Value *Cond = BI->getCondition(); in FoldCondBranchOnValueKnownInPredecessorImpl()
3025 BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue()); in FoldCondBranchOnValueKnownInPredecessorImpl()
3061 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) { in FoldCondBranchOnValueKnownInPredecessorImpl()
3104 EdgeBI->setDebugLoc(BI->getDebugLoc()); in FoldCondBranchOnValueKnownInPredecessorImpl()
3126 static bool FoldCondBranchOnValueKnownInPredecessor(BranchInst *BI, in FoldCondBranchOnValueKnownInPredecessor() argument
3134 Result = FoldCondBranchOnValueKnownInPredecessorImpl(BI, DTU, DL, AC); in FoldCondBranchOnValueKnownInPredecessor()
3351 static bool extractPredSuccWeights(BranchInst *PBI, BranchInst *BI, in extractPredSuccWeights() argument
3359 BI->extractProfMetadata(SuccTrueWeight, SuccFalseWeight); in extractPredSuccWeights()
3375 shouldFoldCondBranchesToCommonDestination(BranchInst *BI, BranchInst *PBI, in shouldFoldCondBranchesToCommonDestination() argument
3377 assert(BI && PBI && BI->isConditional() && PBI->isConditional() && in shouldFoldCondBranchesToCommonDestination()
3379 assert(is_contained(predecessors(BI->getParent()), PBI->getParent()) && in shouldFoldCondBranchesToCommonDestination()
3394 if (PBI->getSuccessor(0) == BI->getSuccessor(0)) { in shouldFoldCondBranchesToCommonDestination()
3398 } else if (PBI->getSuccessor(1) == BI->getSuccessor(1)) { in shouldFoldCondBranchesToCommonDestination()
3402 } else if (PBI->getSuccessor(0) == BI->getSuccessor(1)) { in shouldFoldCondBranchesToCommonDestination()
3406 } else if (PBI->getSuccessor(1) == BI->getSuccessor(0)) { in shouldFoldCondBranchesToCommonDestination()
3414 static bool performBranchToCommonDestFolding(BranchInst *BI, BranchInst *PBI, in performBranchToCommonDestFolding() argument
3418 BasicBlock *BB = BI->getParent(); in performBranchToCommonDestFolding()
3425 *shouldFoldCondBranchesToCommonDestination(BI, PBI, TTI); in performBranchToCommonDestFolding()
3452 PBI->getSuccessor(0) == BB ? BI->getSuccessor(0) : BI->getSuccessor(1); in performBranchToCommonDestFolding()
3461 if (extractPredSuccWeights(PBI, BI, PredTrueWeight, PredFalseWeight, in performBranchToCommonDestFolding()
3508 if (MDNode *LoopMD = BI->getMetadata(LLVMContext::MD_loop)) in performBranchToCommonDestFolding()
3516 Value *BICond = VMap[BI->getCondition()]; in performBranchToCommonDestFolding()
3545 bool llvm::FoldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU, in FoldBranchToCommonDest() argument
3551 if (!BI->isConditional()) in FoldBranchToCommonDest()
3554 BasicBlock *BB = BI->getParent(); in FoldBranchToCommonDest()
3559 Instruction *Cond = dyn_cast<Instruction>(BI->getCondition()); in FoldBranchToCommonDest()
3579 if (!PBI || PBI->isUnconditional() || !SafeToMergeTerminators(BI, PBI)) in FoldBranchToCommonDest()
3585 if (auto Recipe = shouldFoldCondBranchesToCommonDestination(BI, PBI, TTI)) in FoldBranchToCommonDest()
3593 Type *Ty = BI->getCondition()->getType(); in FoldBranchToCommonDest()
3664 return performBranchToCommonDestFolding(BI, PBI, DTU, MSSAU, TTI); in FoldBranchToCommonDest()
3992 static bool tryWidenCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, in tryWidenCondBranchToCondBranch() argument
4003 IfTrueBB != BI->getParent() || !BI->getParent()->getSinglePredecessor()) in tryWidenCondBranchToCondBranch()
4013 if (BI->getSuccessor(1) != IfFalseBB && // no inf looping in tryWidenCondBranchToCondBranch()
4014 BI->getSuccessor(1)->getTerminatingDeoptimizeCall() && // profitability in tryWidenCondBranchToCondBranch()
4015 NoSideEffects(*BI->getParent())) { in tryWidenCondBranchToCondBranch()
4016 auto *OldSuccessor = BI->getSuccessor(1); in tryWidenCondBranchToCondBranch()
4017 OldSuccessor->removePredecessor(BI->getParent()); in tryWidenCondBranchToCondBranch()
4018 BI->setSuccessor(1, IfFalseBB); in tryWidenCondBranchToCondBranch()
4021 {{DominatorTree::Insert, BI->getParent(), IfFalseBB}, in tryWidenCondBranchToCondBranch()
4022 {DominatorTree::Delete, BI->getParent(), OldSuccessor}}); in tryWidenCondBranchToCondBranch()
4025 if (BI->getSuccessor(0) != IfFalseBB && // no inf looping in tryWidenCondBranchToCondBranch()
4026 BI->getSuccessor(0)->getTerminatingDeoptimizeCall() && // profitability in tryWidenCondBranchToCondBranch()
4027 NoSideEffects(*BI->getParent())) { in tryWidenCondBranchToCondBranch()
4028 auto *OldSuccessor = BI->getSuccessor(0); in tryWidenCondBranchToCondBranch()
4029 OldSuccessor->removePredecessor(BI->getParent()); in tryWidenCondBranchToCondBranch()
4030 BI->setSuccessor(0, IfFalseBB); in tryWidenCondBranchToCondBranch()
4033 {{DominatorTree::Insert, BI->getParent(), IfFalseBB}, in tryWidenCondBranchToCondBranch()
4034 {DominatorTree::Delete, BI->getParent(), OldSuccessor}}); in tryWidenCondBranchToCondBranch()
4044 static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, in SimplifyCondBranchToCondBranch() argument
4048 assert(PBI->isConditional() && BI->isConditional()); in SimplifyCondBranchToCondBranch()
4049 BasicBlock *BB = BI->getParent(); in SimplifyCondBranchToCondBranch()
4054 if (PBI->getCondition() == BI->getCondition() && in SimplifyCondBranchToCondBranch()
4062 BI->setCondition( in SimplifyCondBranchToCondBranch()
4071 if (tryWidenCondBranchToCondBranch(PBI, BI, DTU)) in SimplifyCondBranchToCondBranch()
4077 if (MergeCondStores && mergeConditionalStores(PBI, BI, DTU, DL, TTI)) in SimplifyCondBranchToCondBranch()
4085 if (&*BB->instructionsWithoutDebug(false).begin() != BI) in SimplifyCondBranchToCondBranch()
4089 if (PBI->getSuccessor(0) == BI->getSuccessor(0)) { in SimplifyCondBranchToCondBranch()
4092 } else if (PBI->getSuccessor(0) == BI->getSuccessor(1)) { in SimplifyCondBranchToCondBranch()
4095 } else if (PBI->getSuccessor(1) == BI->getSuccessor(0)) { in SimplifyCondBranchToCondBranch()
4098 } else if (PBI->getSuccessor(1) == BI->getSuccessor(1)) { in SimplifyCondBranchToCondBranch()
4125 BasicBlock *OtherDest = BI->getSuccessor(BIOp ^ 1); in SimplifyCondBranchToCondBranch()
4128 << "AND: " << *BI->getParent()); in SimplifyCondBranchToCondBranch()
4161 Value *BICond = BI->getCondition(); in SimplifyCondBranchToCondBranch()
4185 extractPredSuccWeights(PBI, BI, PredTrueWeight, PredFalseWeight, in SimplifyCondBranchToCondBranch()
4517 bool SimplifyCFGOpt::SimplifyBranchOnICmpChain(BranchInst *BI, in SimplifyBranchOnICmpChain() argument
4520 Instruction *Cond = dyn_cast<Instruction>(BI->getCondition()); in SimplifyBranchOnICmpChain()
4560 BasicBlock *DefaultBB = BI->getSuccessor(1); in SimplifyBranchOnICmpChain()
4561 BasicBlock *EdgeBB = BI->getSuccessor(0); in SimplifyBranchOnICmpChain()
4565 BasicBlock *BB = BI->getParent(); in SimplifyBranchOnICmpChain()
4577 BasicBlock *NewBB = SplitBlock(BB, BI, DTU, /*LI=*/nullptr, in SimplifyBranchOnICmpChain()
4591 if (!isGuaranteedNotToBeUndefOrPoison(ExtraCase, AC, BI, nullptr)) in SimplifyBranchOnICmpChain()
4613 Builder.SetInsertPoint(BI); in SimplifyBranchOnICmpChain()
4638 EraseTerminatorAndDCECond(BI); in SimplifyBranchOnICmpChain()
4977 if (auto *BI = dyn_cast<BranchInst>(TI)) { in simplifyUnreachable() local
4980 if (all_of(BI->successors(), in simplifyUnreachable()
4986 assert(BI->isConditional() && "Can't get here with an uncond branch."); in simplifyUnreachable()
4987 Value* Cond = BI->getCondition(); in simplifyUnreachable()
4988 assert(BI->getSuccessor(0) != BI->getSuccessor(1) && in simplifyUnreachable()
4990 if (BI->getSuccessor(0) == BB) { in simplifyUnreachable()
4992 Builder.CreateBr(BI->getSuccessor(1)); in simplifyUnreachable()
4994 assert(BI->getSuccessor(1) == BB && "Incorrect CFG"); in simplifyUnreachable()
4996 Builder.CreateBr(BI->getSuccessor(0)); in simplifyUnreachable()
4998 EraseTerminatorAndDCECond(BI); in simplifyUnreachable()
6693 static bool TryToMergeLandingPad(LandingPadInst *LPad, BranchInst *BI, in TryToMergeLandingPad() argument
6712 if (!BI2 || !BI2->isIdenticalTo(BI)) in TryToMergeLandingPad()
6744 IRBuilder<> Builder(BI); in TryToMergeLandingPad()
6746 BI->eraseFromParent(); in TryToMergeLandingPad()
6759 bool SimplifyCFGOpt::simplifyUncondBranch(BranchInst *BI, in simplifyUncondBranch() argument
6761 BasicBlock *BB = BI->getParent(); in simplifyUncondBranch()
6762 BasicBlock *Succ = BI->getSuccessor(0); in simplifyUncondBranch()
6796 if (I->isTerminator() && TryToMergeLandingPad(LPad, BI, BB, DTU)) in simplifyUncondBranch()
6804 if (FoldBranchToCommonDest(BI, DTU, /*MSSAU=*/nullptr, &TTI, in simplifyUncondBranch()
6821 bool SimplifyCFGOpt::simplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) { in simplifyCondBranch() argument
6823 !isa<ConstantInt>(BI->getCondition()) && in simplifyCondBranch()
6824 BI->getSuccessor(0) != BI->getSuccessor(1) && in simplifyCondBranch()
6827 BasicBlock *BB = BI->getParent(); in simplifyCondBranch()
6832 if (isValueEqualityComparison(BI)) { in simplifyCondBranch()
6837 if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred, Builder)) in simplifyCondBranch()
6843 if (&*I == BI) { in simplifyCondBranch()
6844 if (FoldValueComparisonIntoPredecessors(BI, Builder)) in simplifyCondBranch()
6846 } else if (&*I == cast<Instruction>(BI->getCondition())) { in simplifyCondBranch()
6848 if (&*I == BI && FoldValueComparisonIntoPredecessors(BI, Builder)) in simplifyCondBranch()
6854 if (SimplifyBranchOnICmpChain(BI, Builder, DL)) in simplifyCondBranch()
6859 Optional<bool> Imp = isImpliedByDomCondition(BI->getCondition(), BI, DL); in simplifyCondBranch()
6862 auto *OldCond = BI->getCondition(); in simplifyCondBranch()
6865 BI->setCondition(TorF); in simplifyCondBranch()
6873 if (FoldBranchToCommonDest(BI, DTU, /*MSSAU=*/nullptr, &TTI, in simplifyCondBranch()
6881 if (BI->getSuccessor(0)->getSinglePredecessor()) { in simplifyCondBranch()
6882 if (BI->getSuccessor(1)->getSinglePredecessor()) { in simplifyCondBranch()
6884 HoistThenElseCodeToIf(BI, TTI, !Options.HoistCommonInsts)) in simplifyCondBranch()
6889 Instruction *Succ0TI = BI->getSuccessor(0)->getTerminator(); in simplifyCondBranch()
6891 Succ0TI->getSuccessor(0) == BI->getSuccessor(1)) in simplifyCondBranch()
6892 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0), TTI)) in simplifyCondBranch()
6895 } else if (BI->getSuccessor(1)->getSinglePredecessor()) { in simplifyCondBranch()
6898 Instruction *Succ1TI = BI->getSuccessor(1)->getTerminator(); in simplifyCondBranch()
6900 Succ1TI->getSuccessor(0) == BI->getSuccessor(0)) in simplifyCondBranch()
6901 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1), TTI)) in simplifyCondBranch()
6908 if (FoldCondBranchOnValueKnownInPredecessor(BI, DTU, DL, Options.AC)) in simplifyCondBranch()
6914 if (PBI != BI && PBI->isConditional()) in simplifyCondBranch()
6915 if (SimplifyCondBranchToCondBranch(PBI, BI, DTU, DL, TTI)) in simplifyCondBranch()
6922 if (PBI != BI && PBI->isConditional()) in simplifyCondBranch()
6923 if (mergeConditionalStores(PBI, BI, DTU, DL, TTI)) in simplifyCondBranch()
7024 if (BranchInst *BI = dyn_cast<BranchInst>(T)) { in removeUndefIntroducingPredecessor() local
7028 if (BI->isUnconditional()) in removeUndefIntroducingPredecessor()
7033 Value *Cond = BI->getCondition(); in removeUndefIntroducingPredecessor()
7034 if (BI->getSuccessor(0) == BB) in removeUndefIntroducingPredecessor()
7038 Builder.CreateBr(BI->getSuccessor(0) == BB ? BI->getSuccessor(1) in removeUndefIntroducingPredecessor()
7039 : BI->getSuccessor(0)); in removeUndefIntroducingPredecessor()
7041 BI->eraseFromParent(); in removeUndefIntroducingPredecessor()