Index: lib/Analysis/BranchProbabilityInfo.cpp =================================================================== --- lib/Analysis/BranchProbabilityInfo.cpp +++ lib/Analysis/BranchProbabilityInfo.cpp @@ -21,6 +21,7 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -162,12 +163,13 @@ return true; } - BranchProbability UnreachableProb(UR_TAKEN_WEIGHT, - (UR_TAKEN_WEIGHT + UR_NONTAKEN_WEIGHT) * - UnreachableEdges.size()); - BranchProbability ReachableProb(UR_NONTAKEN_WEIGHT, - (UR_TAKEN_WEIGHT + UR_NONTAKEN_WEIGHT) * - ReachableEdges.size()); + BranchProbability UnreachableProb( + UR_TAKEN_WEIGHT, SaturatingMultiply(UR_TAKEN_WEIGHT + UR_NONTAKEN_WEIGHT, + (uint32_t)UnreachableEdges.size())); + BranchProbability ReachableProb( + UR_NONTAKEN_WEIGHT, + SaturatingMultiply(UR_TAKEN_WEIGHT + UR_NONTAKEN_WEIGHT, + (uint32_t)ReachableEdges.size())); for (unsigned SuccIdx : UnreachableEdges) setEdgeProbability(BB, SuccIdx, UnreachableProb); @@ -300,12 +302,13 @@ return true; } - BranchProbability ColdProb(CC_TAKEN_WEIGHT, - (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * - ColdEdges.size()); - BranchProbability NormalProb(CC_NONTAKEN_WEIGHT, - (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * - NormalEdges.size()); + BranchProbability ColdProb( + CC_TAKEN_WEIGHT, SaturatingMultiply(CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT, + (uint32_t)ColdEdges.size())); + BranchProbability NormalProb( + CC_NONTAKEN_WEIGHT, + SaturatingMultiply(CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT, + (uint32_t)NormalEdges.size())); for (unsigned SuccIdx : ColdEdges) setEdgeProbability(BB, SuccIdx, ColdProb);