diff options
Diffstat (limited to 'llvm/lib/Analysis/BranchProbabilityInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/BranchProbabilityInfo.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp index 9ab357b..f483946 100644 --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp @@ -623,6 +623,11 @@ getEdgeProbability(const BasicBlock *Src, unsigned IndexInSuccessors) const { uint32_t N = getEdgeWeight(Src, IndexInSuccessors); uint32_t D = getSumForBlock(Src); + // It is possible that the edge weight on the only successor edge of Src is + // zero, in which case we return 100%. + if (N == 0 && D == 0) + return BranchProbability::getOne(); + return BranchProbability(N, D); } @@ -634,6 +639,11 @@ getEdgeProbability(const BasicBlock *Src, const BasicBlock *Dst) const { uint32_t N = getEdgeWeight(Src, Dst); uint32_t D = getSumForBlock(Src); + // It is possible that the edge weight on the only successor edge of Src is + // zero, in which case we return 100%. + if (N == 0 && D == 0) + return BranchProbability::getOne(); + return BranchProbability(N, D); } |