Lines Matching defs:BB
231 for (const auto *BB : Scc) {
232 LLVM_DEBUG(dbgs() << " " << BB->getName());
233 SccNums[BB] = SccNum;
234 calculateSccBlockType(BB, SccNum);
240 int BranchProbabilityInfo::SccInfo::getSCCNum(const BasicBlock *BB) const {
241 auto SccIt = SccNums.find(BB);
251 const auto *BB = MapIt.first;
252 if (isSCCHeader(BB, SccNum))
253 for (const auto *Pred : predecessors(BB))
255 Enters.push_back(const_cast<BasicBlock *>(BB));
262 const auto *BB = MapIt.first;
263 if (isSCCExitingBlock(BB, SccNum))
264 for (const auto *Succ : successors(BB))
270 uint32_t BranchProbabilityInfo::SccInfo::getSccBlockType(const BasicBlock *BB,
272 assert(getSCCNum(BB) == SccNum);
277 auto It = SccBlockTypes.find(BB);
284 void BranchProbabilityInfo::SccInfo::calculateSccBlockType(const BasicBlock *BB,
286 assert(getSCCNum(BB) == SccNum);
289 if (llvm::any_of(predecessors(BB), [&](const BasicBlock *Pred) {
296 if (llvm::any_of(successors(BB), [&](const BasicBlock *Succ) {
310 SccBlockTypes.insert(std::make_pair(BB, BlockType));
315 BranchProbabilityInfo::LoopBlock::LoopBlock(const BasicBlock *BB,
318 : BB(BB) {
319 LD.first = LI.getLoopFor(BB);
321 LD.second = SccI.getSCCNum(BB);
379 bool BranchProbabilityInfo::calcMetadataWeights(const BasicBlock *BB) {
380 const Instruction *TI = BB->getTerminator();
404 const LoopBlock SrcLoopBB = getLoopBlock(BB);
444 setEdgeProbability(BB, BP);
508 setEdgeProbability(BB, BP);
515 bool BranchProbabilityInfo::calcPointerHeuristics(const BasicBlock *BB) {
516 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
535 setEdgeProbability(BB, Search->second);
539 // Compute the unlikely successors to the block BB in the loop L, specifically
543 computeUnlikelySuccessors(const BasicBlock *BB, Loop *L,
566 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
597 // Trace the phi node to find all values that come from successors of BB
616 // If this incoming value is a constant and B is a successor of BB, then
620 if (!CmpLHSConst || !llvm::is_contained(successors(BB), B))
623 const DataLayout &DL = BB->getDataLayout();
646 BranchProbabilityInfo::getEstimatedBlockWeight(const BasicBlock *BB) const {
647 auto WeightIt = EstimatedBlockWeight.find(BB);
698 BasicBlock *BB = LoopBB.getBlock();
705 if (!EstimatedBlockWeight.insert({BB, BBWeight}).second)
708 for (BasicBlock *PredBlock : predecessors(BB)) {
720 // Starting from \p BB traverse through dominator blocks and assign \p BBWeight
721 // to all such blocks that are post dominated by \BB. In other words to all
736 const BasicBlock *BB = LoopBB.getBlock();
737 const auto *DTStartNode = DT->getNode(BB);
738 const auto *PDTStartNode = PDT->getNode(BB);
746 // If BB doesn't post dominate DomBB it will not post dominate dominators
766 BranchProbabilityInfo::getInitialEstimatedBlockWeight(const BasicBlock *BB) {
767 // Returns true if \p BB has call marked with "NoReturn" attribute.
768 auto hasNoReturn = [&](const BasicBlock *BB) {
769 for (const auto &I : reverse(*BB))
780 if (isa<UnreachableInst>(BB->getTerminator()) ||
785 BB->getTerminatingDeoptimizeCall())
786 return hasNoReturn(BB)
791 if (BB->isEHPad())
795 for (const auto &I : *BB)
815 for (const auto *BB : RPOT)
816 if (auto BBWeight = getInitialEstimatedBlockWeight(BB))
819 propagateEstimatedBlockWeight(getLoopBlock(BB), DT, PDT, *BBWeight,
853 const BasicBlock *BB = BlockWorkList.pop_back_val();
854 if (EstimatedBlockWeight.count(BB))
863 const LoopBlock LoopBB = getLoopBlock(BB);
864 auto MaxWeight = getMaxEstimatedEdgeWeight(LoopBB, successors(BB));
876 bool BranchProbabilityInfo::calcEstimatedHeuristics(const BasicBlock *BB) {
877 assert(BB->getTerminator()->getNumSuccessors() > 1 &&
880 const LoopBlock LoopBB = getLoopBlock(BB);
885 computeUnlikelySuccessors(BB, LoopBB.getLoop(), UnlikelyBlocks);
891 // Go over all successors of BB and put their weights into SuccWeights.
892 for (const BasicBlock *SuccBB : successors(BB)) {
933 assert(SuccWeights.size() == succ_size(BB) && "Missed successor?");
959 setEdgeProbability(BB, EdgeProbabilities);
963 bool BranchProbabilityInfo::calcZeroHeuristics(const BasicBlock *BB,
965 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
1026 setEdgeProbability(BB, Search->second);
1030 bool BranchProbabilityInfo::calcFloatingPointHeuristics(const BasicBlock *BB) {
1031 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
1054 setEdgeProbability(BB, ProbList);
1201 void BranchProbabilityInfo::eraseBlock(const BasicBlock *BB) {
1202 LLVM_DEBUG(dbgs() << "eraseBlock " << BB->getName() << "\n");
1204 // Note that we cannot use successors of BB because the terminator of BB may
1208 // a pair (BB, N) if there is no data for (BB, N-1) because the data is always
1211 Handles.erase(BasicBlockCallbackVH(BB, this));
1213 auto MapI = Probs.find(std::make_pair(BB, I));
1215 assert(Probs.count(std::make_pair(BB, I + 1)) == 0 &&
1254 for (const auto *BB : post_order(&F.getEntryBlock())) {
1255 LLVM_DEBUG(dbgs() << "Computing probabilities for " << BB->getName()
1258 if (BB->getTerminator()->getNumSuccessors() < 2)
1260 if (calcMetadataWeights(BB))
1262 if (calcEstimatedHeuristics(BB))
1264 if (calcPointerHeuristics(BB))
1266 if (calcZeroHeuristics(BB, TLI))
1268 if (calcFloatingPointHeuristics(BB))