[PATCH] D31704: [BPI] NFC: reorder ifs to bail out earlier
Serguei Katkov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 16 23:52:30 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL300442: [BPI] NFC: reorder ifs to bail out earlier (authored by skatkov).
Changed prior to commit:
https://reviews.llvm.org/D31704?vs=95421&id=95424#toc
Repository:
rL LLVM
https://reviews.llvm.org/D31704
Files:
llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
Index: llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
===================================================================
--- llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
+++ llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
@@ -205,7 +205,11 @@
/// unreachable-terminated block as extremely unlikely.
bool BranchProbabilityInfo::calcUnreachableHeuristics(const BasicBlock *BB) {
const TerminatorInst *TI = BB->getTerminator();
- if (TI->getNumSuccessors() == 0)
+ assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
+
+ // Return false here so that edge weights for InvokeInst could be decided
+ // in calcInvokeHeuristics().
+ if (isa<InvokeInst>(TI))
return false;
SmallVector<unsigned, 4> UnreachableEdges;
@@ -217,14 +221,8 @@
else
ReachableEdges.push_back(I.getSuccessorIndex());
- // Skip probabilities if this block has a single successor or if all were
- // reachable.
- if (TI->getNumSuccessors() == 1 || UnreachableEdges.empty())
- return false;
-
- // Return false here so that edge weights for InvokeInst could be decided
- // in calcInvokeHeuristics().
- if (isa<InvokeInst>(TI))
+ // Skip probabilities if all were reachable.
+ if (UnreachableEdges.empty())
return false;
if (ReachableEdges.empty()) {
@@ -251,8 +249,7 @@
// set to min of metadata and unreachable heuristic.
bool BranchProbabilityInfo::calcMetadataWeights(const BasicBlock *BB) {
const TerminatorInst *TI = BB->getTerminator();
- if (TI->getNumSuccessors() <= 1)
- return false;
+ assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
if (!isa<BranchInst>(TI) && !isa<SwitchInst>(TI))
return false;
@@ -359,7 +356,11 @@
/// Return false, otherwise.
bool BranchProbabilityInfo::calcColdCallHeuristics(const BasicBlock *BB) {
const TerminatorInst *TI = BB->getTerminator();
- if (TI->getNumSuccessors() == 0)
+ assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
+
+ // Return false here so that edge weights for InvokeInst could be decided
+ // in calcInvokeHeuristics().
+ if (isa<InvokeInst>(TI))
return false;
// Determine which successors are post-dominated by a cold block.
@@ -371,13 +372,8 @@
else
NormalEdges.push_back(I.getSuccessorIndex());
- // Return false here so that edge weights for InvokeInst could be decided
- // in calcInvokeHeuristics().
- if (isa<InvokeInst>(TI))
- return false;
-
- // Skip probabilities if this block has a single successor.
- if (TI->getNumSuccessors() == 1 || ColdEdges.empty())
+ // Skip probabilities if no cold edges.
+ if (ColdEdges.empty())
return false;
if (NormalEdges.empty()) {
@@ -760,6 +756,9 @@
DEBUG(dbgs() << "Computing probabilities for " << BB->getName() << "\n");
updatePostDominatedByUnreachable(BB);
updatePostDominatedByColdCall(BB);
+ // If there is no at least two successors, no sense to set probability.
+ if (BB->getTerminator()->getNumSuccessors() < 2)
+ continue;
if (calcMetadataWeights(BB))
continue;
if (calcUnreachableHeuristics(BB))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31704.95424.patch
Type: text/x-patch
Size: 3136 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170417/1ce7090e/attachment.bin>
More information about the llvm-commits
mailing list