summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/BranchProbabilityInfo.cpp
diff options
context:
space:
mode:
authorJun Bum Lim <junbuml@codeaurora.org>2015-12-18 20:53:47 +0000
committerJun Bum Lim <junbuml@codeaurora.org>2015-12-18 20:53:47 +0000
commit51a247065ef9b501d88b0fdd9dc5e94c7d3e9454 (patch)
tree07e39a1dddd43eef70ff058237dd20af357bca12 /llvm/lib/Analysis/BranchProbabilityInfo.cpp
parent9c533783c19591379e9e973b17d8b3947f6f2c19 (diff)
downloadbcm5719-llvm-51a247065ef9b501d88b0fdd9dc5e94c7d3e9454.tar.gz
bcm5719-llvm-51a247065ef9b501d88b0fdd9dc5e94c7d3e9454.zip
Enhance BranchProbabilityInfo::calcUnreachableHeuristics for InvokeInst
When identifying blocks post-dominated by an unreachable-terminated block in BranchProbabilityInfo, consider only the edge to the normal destination block if the terminator is InvokeInst and let calcInvokeHeuristics() decide edge weights for the InvokeInst. llvm-svn: 256028
Diffstat (limited to 'llvm/lib/Analysis/BranchProbabilityInfo.cpp')
-rw-r--r--llvm/lib/Analysis/BranchProbabilityInfo.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp
index 6cdf43a06a9..a0d6123b583 100644
--- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp
+++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp
@@ -147,6 +147,16 @@ bool BranchProbabilityInfo::calcUnreachableHeuristics(BasicBlock *BB) {
if (TI->getNumSuccessors() == 1 || UnreachableEdges.empty())
return false;
+ // If the terminator is an InvokeInst, check only the normal destination block
+ // as the unwind edge of InvokeInst is also very unlikely taken.
+ if (auto *II = dyn_cast<InvokeInst>(TI))
+ if (PostDominatedByUnreachable.count(II->getNormalDest())) {
+ PostDominatedByUnreachable.insert(BB);
+ // Return false here so that edge weights for InvokeInst could be decided
+ // in calcInvokeHeuristics().
+ return false;
+ }
+
uint32_t UnreachableWeight =
std::max(UR_TAKEN_WEIGHT / (unsigned)UnreachableEdges.size(), MIN_WEIGHT);
for (SmallVectorImpl<unsigned>::iterator I = UnreachableEdges.begin(),
OpenPOWER on IntegriCloud