diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-03-09 14:42:55 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-03-09 14:42:55 +0000 |
commit | 4b484628f452dcd119ad855f114ca29d26829d90 (patch) | |
tree | 929880ca761b7712dd5a3f0493ad9cb6208a98fb | |
parent | c52fffeb1737fef4bc21c2068c3c6ac2c60a4e19 (diff) | |
download | llvm-4b484628f452dcd119ad855f114ca29d26829d90.tar.gz llvm-4b484628f452dcd119ad855f114ca29d26829d90.tar.bz2 llvm-4b484628f452dcd119ad855f114ca29d26829d90.tar.xz |
SimplifyCFG: Simplify the weight scaling algorithm.
No change in functionality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203413 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Utils/SimplifyCFG.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index 80f122ab83..5b3bdbe4be 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -732,8 +732,7 @@ static void GetBranchWeights(TerminatorInst *TI, MDNode* MD = TI->getMetadata(LLVMContext::MD_prof); assert(MD); for (unsigned i = 1, e = MD->getNumOperands(); i < e; ++i) { - ConstantInt* CI = dyn_cast<ConstantInt>(MD->getOperand(i)); - assert(CI); + ConstantInt *CI = cast<ConstantInt>(MD->getOperand(i)); Weights.push_back(CI->getValue().getZExtValue()); } @@ -750,19 +749,11 @@ static void GetBranchWeights(TerminatorInst *TI, /// Keep halving the weights until all can fit in uint32_t. static void FitWeights(MutableArrayRef<uint64_t> Weights) { - while (true) { - bool Halve = false; - for (unsigned i = 0; i < Weights.size(); ++i) - if (Weights[i] > UINT_MAX) { - Halve = true; - break; - } - - if (! Halve) - return; - - for (unsigned i = 0; i < Weights.size(); ++i) - Weights[i] /= 2; + uint64_t Max = *std::max_element(Weights.begin(), Weights.end()); + if (Max > UINT_MAX) { + unsigned Offset = 32 - countLeadingZeros(Max); + for (uint64_t &I : Weights) + I >>= Offset; } } |