diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-29 16:20:05 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-29 16:20:05 +0000 |
commit | 6919443535aad0df04be44252d6f4a0b6added43 (patch) | |
tree | c5b4b498526d796b4b0f5e301ad1e1ee1886087f /lib | |
parent | 81566c52fd1b5f9214fb826f171eb29cee14507d (diff) | |
download | llvm-6919443535aad0df04be44252d6f4a0b6added43.tar.gz llvm-6919443535aad0df04be44252d6f4a0b6added43.tar.bz2 llvm-6919443535aad0df04be44252d6f4a0b6added43.tar.xz |
blockfreq: Defer to BranchProbability::scale()
`BlockMass` can now defer to `BranchProbability::scale()`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207547 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Analysis/BlockFrequencyInfoImpl.cpp | 26 |
1 files changed, 0 insertions, 26 deletions
diff --git a/lib/Analysis/BlockFrequencyInfoImpl.cpp b/lib/Analysis/BlockFrequencyInfoImpl.cpp index c78ed88ab6..4a61e3446d 100644 --- a/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -311,32 +311,6 @@ std::pair<uint64_t, int16_t> UnsignedFloatBase::multiply64(uint64_t L, // BlockMass implementation. // //===----------------------------------------------------------------------===// -BlockMass &BlockMass::operator*=(const BranchProbability &P) { - uint32_t N = P.getNumerator(), D = P.getDenominator(); - assert(D && "divide by 0"); - assert(N <= D && "fraction greater than 1"); - - // Fast path for multiplying by 1.0. - if (!Mass || N == D) - return *this; - - // Get as much precision as we can. - int Shift = countLeadingZeros(Mass); - uint64_t ShiftedQuotient = (Mass << Shift) / D; - uint64_t Product = ShiftedQuotient * N >> Shift; - - // Now check for what's lost. - uint64_t Left = ShiftedQuotient * (D - N) >> Shift; - uint64_t Lost = Mass - Product - Left; - - // TODO: prove this assertion. - assert(Lost <= UINT32_MAX); - - // Take the product plus a portion of the spoils. - Mass = Product + Lost * N / D; - return *this; -} - UnsignedFloat<uint64_t> BlockMass::toFloat() const { if (isFull()) return UnsignedFloat<uint64_t>(1, 0); |