From f24606376d449fa14bc72953951c52005f590434 Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Thu, 1 May 2025 10:00:54 -0700 Subject: [NFC][LLVM][CodeGen] Refactor MIR Printer (#137361) - Move `MIPrinter` class to anonymous namespace, and remove it as a friend of `MachineBasicBlock`. - Move `canPredictBranchProbabilities` to `MachineBasicBlock` and change it to use the new `BranchProbability::normalizeProbabilities` function that accepts a range, and also to use `llvm::equal()` to check equality of the two vectors. - Use `ListSeparator` to print comma separate lists instead of manual code to do that. --- llvm/lib/CodeGen/MachineBasicBlock.cpp | 42 +++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'llvm/lib/CodeGen/MachineBasicBlock.cpp') diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index fa6b53455f14..37fe37fd6e42 100644 --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -1587,20 +1587,36 @@ MachineBasicBlock::getSuccProbability(const_succ_iterator Succ) const { return BranchProbability(1, succ_size()); const auto &Prob = *getProbabilityIterator(Succ); - if (Prob.isUnknown()) { - // For unknown probabilities, collect the sum of all known ones, and evenly - // ditribute the complemental of the sum to each unknown probability. - unsigned KnownProbNum = 0; - auto Sum = BranchProbability::getZero(); - for (const auto &P : Probs) { - if (!P.isUnknown()) { - Sum += P; - KnownProbNum++; - } - } - return Sum.getCompl() / (Probs.size() - KnownProbNum); - } else + if (!Prob.isUnknown()) return Prob; + // For unknown probabilities, collect the sum of all known ones, and evenly + // ditribute the complemental of the sum to each unknown probability. + unsigned KnownProbNum = 0; + auto Sum = BranchProbability::getZero(); + for (const auto &P : Probs) { + if (!P.isUnknown()) { + Sum += P; + KnownProbNum++; + } + } + return Sum.getCompl() / (Probs.size() - KnownProbNum); +} + +bool MachineBasicBlock::canPredictBranchProbabilities() const { + if (succ_size() <= 1) + return true; + if (!hasSuccessorProbabilities()) + return true; + + SmallVector Normalized(Probs.begin(), Probs.end()); + BranchProbability::normalizeProbabilities(Normalized); + + // Normalize assuming unknown probabilities. This will assign equal + // probabilities to all successors. + SmallVector Equal(Normalized.size()); + BranchProbability::normalizeProbabilities(Equal); + + return llvm::equal(Normalized, Equal); } /// Set successor probability of a given iterator. -- cgit v1.2.3