Merging r257925, r257929, r257930, and r257997:
[oota-llvm.git] / lib / Analysis / BranchProbabilityInfo.cpp
index c7c2f436e8c43ed87551748ce4d8332b8d9ea1ab..cf0cc8da6ef80597191696d31fc2f04ef906e90b 100644 (file)
@@ -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");