diff options
author | Rahul Joshi <rjoshi@nvidia.com> | 2025-05-01 10:00:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-01 10:00:54 -0700 |
commit | f24606376d449fa14bc72953951c52005f590434 (patch) | |
tree | 71a69a21fa6d423a2aea154f0d6b536c89375a7b /llvm/lib/CodeGen/MachineBasicBlock.cpp | |
parent | acc40ed0a747ad8f5dbb93788da7ce104c36c0a3 (diff) | |
download | llvm-f24606376d449fa14bc72953951c52005f590434.zip llvm-f24606376d449fa14bc72953951c52005f590434.tar.gz llvm-f24606376d449fa14bc72953951c52005f590434.tar.bz2 |
[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.
Diffstat (limited to 'llvm/lib/CodeGen/MachineBasicBlock.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineBasicBlock.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index fa6b534..37fe37f 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<BranchProbability, 8> Normalized(Probs.begin(), Probs.end()); + BranchProbability::normalizeProbabilities(Normalized); + + // Normalize assuming unknown probabilities. This will assign equal + // probabilities to all successors. + SmallVector<BranchProbability, 8> Equal(Normalized.size()); + BranchProbability::normalizeProbabilities(Equal); + + return llvm::equal(Normalized, Equal); } /// Set successor probability of a given iterator. |