aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-10-23 20:10:34 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-10-23 20:10:34 +0000
commit66d847c8ffff5199248fccc10cb27f80c5cf9ebe (patch)
treec85984aecdf46a13c7e758c9fd0978dac1ebc7f7
parent4f780536953cdd3d92c21111301763ddd57ab720 (diff)
Now that we have comparison on probabilities, add some static functions
to get important constant branch probabilities and use them for finding the best branch out of a set of possibilities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142762 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Support/BranchProbability.h3
-rw-r--r--lib/CodeGen/MachineBlockPlacement.cpp13
2 files changed, 8 insertions, 8 deletions
diff --git a/include/llvm/Support/BranchProbability.h b/include/llvm/Support/BranchProbability.h
index a1e5ceb625..6b83159de6 100644
--- a/include/llvm/Support/BranchProbability.h
+++ b/include/llvm/Support/BranchProbability.h
@@ -39,6 +39,9 @@ public:
assert(n <= d && "Probability cannot be bigger than 1!");
}
+ static BranchProbability getZero() { return BranchProbability(0, 1); }
+ static BranchProbability getOne() { return BranchProbability(1, 1); }
+
uint32_t getNumerator() const { return N; }
uint32_t getDenominator() const { return D; }
diff --git a/lib/CodeGen/MachineBlockPlacement.cpp b/lib/CodeGen/MachineBlockPlacement.cpp
index 043a884f6d..32eb70e21f 100644
--- a/lib/CodeGen/MachineBlockPlacement.cpp
+++ b/lib/CodeGen/MachineBlockPlacement.cpp
@@ -287,10 +287,8 @@ void MachineBlockPlacement::mergeSuccessor(MachineBasicBlock *BB,
return;
// Walk through the successors looking for the highest probability edge.
- // FIXME: This is an annoying way to do the comparison, but it's correct.
- // Support should be added to BranchProbability to properly compare two.
MachineBasicBlock *Successor = 0;
- BlockFrequency BestFreq;
+ BranchProbability BestProb = BranchProbability::getZero();
DEBUG(dbgs() << "Attempting merge from: " << getBlockName(BB) << "\n");
for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(),
SE = BB->succ_end();
@@ -298,13 +296,12 @@ void MachineBlockPlacement::mergeSuccessor(MachineBasicBlock *BB,
if (BB == *SI || (Filter && !Filter->count(*SI)))
continue;
- BlockFrequency SuccFreq(BlockFrequency::getEntryFrequency());
- SuccFreq *= MBPI->getEdgeProbability(BB, *SI);
- DEBUG(dbgs() << " " << getBlockName(*SI) << " -> " << SuccFreq << "\n");
- if (!Successor || SuccFreq > BestFreq || (!(SuccFreq < BestFreq) &&
+ BranchProbability SuccProb = MBPI->getEdgeProbability(BB, *SI);
+ DEBUG(dbgs() << " " << getBlockName(*SI) << " -> " << SuccProb << "\n");
+ if (!Successor || SuccProb > BestProb || (!(SuccProb < BestProb) &&
BB->isLayoutSuccessor(*SI))) {
Successor = *SI;
- BestFreq = SuccFreq;
+ BestProb = SuccProb;
}
}
if (!Successor)