diff options
-rw-r--r-- | llvm/include/llvm/CodeGen/MachineBasicBlock.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Support/BranchProbability.h | 21 |
2 files changed, 14 insertions, 9 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h index 4f76b21fb00..a2b1a850ec7 100644 --- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -476,7 +476,7 @@ public: /// Normalize probabilities of all successors so that the sum of them becomes /// one. void normalizeSuccProbs() { - BranchProbability::normalizeProbabilities(Probs); + BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); } /// Remove successor from the successors list of this MachineBasicBlock. The diff --git a/llvm/include/llvm/Support/BranchProbability.h b/llvm/include/llvm/Support/BranchProbability.h index e3acb566b73..71c0cf9afea 100644 --- a/llvm/include/llvm/Support/BranchProbability.h +++ b/llvm/include/llvm/Support/BranchProbability.h @@ -56,8 +56,9 @@ public: // Normalize given probabilties so that the sum of them becomes approximate // one. - template <class ProbabilityList> - static void normalizeProbabilities(ProbabilityList &Probs); + template <class ProbabilityIter> + static void normalizeProbabilities(ProbabilityIter Begin, + ProbabilityIter End); // Normalize a list of weights by scaling them down so that the sum of them // doesn't exceed UINT32_MAX. @@ -140,14 +141,18 @@ inline BranchProbability operator/(BranchProbability LHS, uint32_t RHS) { return BranchProbability::getRaw(LHS.getNumerator() / RHS); } -template <class ProbabilityList> -void BranchProbability::normalizeProbabilities(ProbabilityList &Probs) { +template <class ProbabilityIter> +void BranchProbability::normalizeProbabilities(ProbabilityIter Begin, + ProbabilityIter End) { + if (Begin == End) + return; + uint64_t Sum = 0; - for (auto Prob : Probs) - Sum += Prob.N; + for (auto I = Begin; I != End; ++I) + Sum += I->N; assert(Sum > 0); - for (auto &Prob : Probs) - Prob.N = (Prob.N * uint64_t(D) + Sum / 2) / Sum; + for (auto I = Begin; I != End; ++I) + I->N = (I->N * uint64_t(D) + Sum / 2) / Sum; } template <class WeightListIter> |