diff options
author | Geoff Berry <gberry@codeaurora.org> | 2017-11-01 15:16:50 +0000 |
---|---|---|
committer | Geoff Berry <gberry@codeaurora.org> | 2017-11-01 15:16:50 +0000 |
commit | 4bf7c62ec4e8337dacb3dc46d421ff702fca32cb (patch) | |
tree | 76b81fb541da8617e7b7cc314b309543b14a39e2 /include | |
parent | 697969187cd6d8ed03eabbe1198ee7892d872953 (diff) |
[BranchProbabilityInfo] Handle irreducible loops.
Summary:
Compute the strongly connected components of the CFG and fall back to
use these for blocks that are in loops that are not detected by
LoopInfo when computing loop back-edge and exit branch probabilities.
Reviewers: dexonsmith, davidxl
Subscribers: mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D39385
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317094 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Analysis/BranchProbabilityInfo.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/include/llvm/Analysis/BranchProbabilityInfo.h b/include/llvm/Analysis/BranchProbabilityInfo.h index 88ce6b4bd94..417b6497881 100644 --- a/include/llvm/Analysis/BranchProbabilityInfo.h +++ b/include/llvm/Analysis/BranchProbabilityInfo.h @@ -137,6 +137,15 @@ public: /// Forget analysis results for the given basic block. void eraseBlock(const BasicBlock *BB); + // Use to track SCCs for handling irreducible loops. + using SccMap = DenseMap<const BasicBlock *, int>; + using SccHeaderMap = DenseMap<const BasicBlock *, bool>; + using SccHeaderMaps = std::vector<SccHeaderMap>; + struct SccInfo { + SccMap SccNums; + SccHeaderMaps SccHeaders; + }; + private: // We need to store CallbackVH's in order to correctly handle basic block // removal. @@ -185,7 +194,8 @@ private: bool calcMetadataWeights(const BasicBlock *BB); bool calcColdCallHeuristics(const BasicBlock *BB); bool calcPointerHeuristics(const BasicBlock *BB); - bool calcLoopBranchHeuristics(const BasicBlock *BB, const LoopInfo &LI); + bool calcLoopBranchHeuristics(const BasicBlock *BB, const LoopInfo &LI, + SccInfo &SccI); bool calcZeroHeuristics(const BasicBlock *BB, const TargetLibraryInfo *TLI); bool calcFloatingPointHeuristics(const BasicBlock *BB); bool calcInvokeHeuristics(const BasicBlock *BB); |