From 118c3f3cf268002d1356253bac3cf5300f054d43 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Fri, 6 Nov 2020 22:47:22 -0800 Subject: [PATCH] [BranchProbabilityInfo] Simplify getEdgeProbability (NFC) The patch simplifies BranchProbabilityInfo::getEdgeProbability by handling two cases separately, depending on whether we have edge probabilities. - If we have edge probabilities, then add up probabilities for successors being equal to Dst. - Otherwise, return the number of ocurrences divided by the total number of successors. Differential Revision: https://reviews.llvm.org/D90980 --- llvm/lib/Analysis/BranchProbabilityInfo.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp index 153fd5a..f235e9f 100644 --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp @@ -1114,19 +1114,15 @@ BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src, BranchProbability BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src, const BasicBlock *Dst) const { + if (!Probs.count(std::make_pair(Src, 0))) + return BranchProbability(llvm::count(successors(Src), Dst), succ_size(Src)); + auto Prob = BranchProbability::getZero(); - bool FoundProb = false; - uint32_t EdgeCount = 0; for (const_succ_iterator I = succ_begin(Src), E = succ_end(Src); I != E; ++I) - if (*I == Dst) { - ++EdgeCount; - auto MapI = Probs.find(std::make_pair(Src, I.getSuccessorIndex())); - if (MapI != Probs.end()) { - FoundProb = true; - Prob += MapI->second; - } - } - return FoundProb ? Prob : BranchProbability(EdgeCount, succ_size(Src)); + if (*I == Dst) + Prob += Probs.find(std::make_pair(Src, I.getSuccessorIndex()))->second; + + return Prob; } /// Set the edge probability for all edges at once. -- 2.7.4