diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2014-04-14 16:56:19 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2014-04-14 16:56:19 +0000 |
commit | 5638b89944f796f2df7c2734a3f92a488eb3b269 (patch) | |
tree | b09324efb2e5191860ee68ecb9a437b5d4e19346 /llvm/lib/Analysis/BranchProbabilityInfo.cpp | |
parent | 3df79775c56d68513e4d423ec85f78987c1764b2 (diff) | |
download | bcm5719-llvm-5638b89944f796f2df7c2734a3f92a488eb3b269.tar.gz bcm5719-llvm-5638b89944f796f2df7c2734a3f92a488eb3b269.zip |
Fix a bug in which BranchProbabilityInfo wasn't setting branch weights of basic blocks inside loops correctly.
Previously, BranchProbabilityInfo::calcLoopBranchHeuristics would determine the weights of basic blocks inside loops even when it didn't have enough information to estimate the branch probabilities correctly. This patch fixes the function to exit early if it doesn't see any exit edges or back edges and let the later heuristics determine the weights.
This fixes PR18705 and <rdar://problem/15991090>.
Differential Revision: http://reviews.llvm.org/D3363
llvm-svn: 206194
Diffstat (limited to 'llvm/lib/Analysis/BranchProbabilityInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/BranchProbabilityInfo.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp index 62cc686211a..301c3ee6ad8 100644 --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp @@ -322,6 +322,9 @@ bool BranchProbabilityInfo::calcLoopBranchHeuristics(BasicBlock *BB) { InEdges.push_back(I.getSuccessorIndex()); } + if (BackEdges.empty() && ExitingEdges.empty()) + return false; + if (uint32_t numBackEdges = BackEdges.size()) { uint32_t backWeight = LBH_TAKEN_WEIGHT / numBackEdges; if (backWeight < NORMAL_WEIGHT) |