summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/BranchProbabilityInfo.cpp
diff options
context:
space:
mode:
authorCong Hou <congh@google.com>2015-12-22 23:45:55 +0000
committerCong Hou <congh@google.com>2015-12-22 23:45:55 +0000
commit6a2c71af0bc5beebf954e1970233fbeb3be0bf1c (patch)
treed6df30c77c756af4124e8d4d36c36e7c1f255e9b /llvm/lib/Analysis/BranchProbabilityInfo.cpp
parent240529892b5ab600b2f6f356cc2addeacdef0849 (diff)
downloadbcm5719-llvm-6a2c71af0bc5beebf954e1970233fbeb3be0bf1c.tar.gz
bcm5719-llvm-6a2c71af0bc5beebf954e1970233fbeb3be0bf1c.zip
[BPI] Fix two potential divide-by-zero operations that are introduced in r256263.
llvm-svn: 256303
Diffstat (limited to 'llvm/lib/Analysis/BranchProbabilityInfo.cpp')
-rw-r--r--llvm/lib/Analysis/BranchProbabilityInfo.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp
index c7c2f436e8c..cf0cc8da6ef 100644
--- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp
+++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp
@@ -221,8 +221,14 @@ bool BranchProbabilityInfo::calcMetadataWeights(BasicBlock *BB) {
Weights[i] /= ScalingFactor;
WeightSum += Weights[i];
}
- for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
- setEdgeProbability(BB, i, {Weights[i], static_cast<uint32_t>(WeightSum)});
+
+ if (WeightSum == 0) {
+ for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
+ setEdgeProbability(BB, i, {1, e});
+ } else {
+ for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
+ setEdgeProbability(BB, i, {Weights[i], static_cast<uint32_t>(WeightSum)});
+ }
assert(WeightSum <= UINT32_MAX &&
"Expected weights to scale down to 32 bits");
OpenPOWER on IntegriCloud