aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineBasicBlock.cpp
diff options
context:
space:
mode:
authorRahul Joshi <rjoshi@nvidia.com>2025-05-01 10:00:54 -0700
committerGitHub <noreply@github.com>2025-05-01 10:00:54 -0700
commitf24606376d449fa14bc72953951c52005f590434 (patch)
tree71a69a21fa6d423a2aea154f0d6b536c89375a7b /llvm/lib/CodeGen/MachineBasicBlock.cpp
parentacc40ed0a747ad8f5dbb93788da7ce104c36c0a3 (diff)
downloadllvm-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.cpp42
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.