diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-12-04 18:05:36 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-12-04 18:05:36 +0000 |
commit | fd6d53fbad9d3f48da4910ebba12d9d2a3c24bd8 (patch) | |
tree | 63458a991f69ce7f68167890448f32f89d8888ad | |
parent | bd7d2622a2ee828a02017dca19170b6f79ff6684 (diff) | |
download | external_llvm-fd6d53fbad9d3f48da4910ebba12d9d2a3c24bd8.zip external_llvm-fd6d53fbad9d3f48da4910ebba12d9d2a3c24bd8.tar.gz external_llvm-fd6d53fbad9d3f48da4910ebba12d9d2a3c24bd8.tar.bz2 |
APInt: microoptimize a few methods.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120912 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/APInt.h | 15 | ||||
-rw-r--r-- | lib/Support/APInt.cpp | 4 |
2 files changed, 9 insertions, 10 deletions
diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index b3cd38a..722c6ba 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -296,7 +296,7 @@ public: /// @returns true if this APInt is positive. /// @brief Determine if this APInt Value is positive. bool isStrictlyPositive() const { - return isNonNegative() && (*this) != 0; + return isNonNegative() && !!*this; } /// This checks to see if the value has all bits of the APInt are set or not. @@ -324,15 +324,14 @@ public: /// value for the APInt's bit width. /// @brief Determine if this is the smallest unsigned value. bool isMinValue() const { - return countPopulation() == 0; + return !*this; } /// This checks to see if the value of this APInt is the minimum signed /// value for the APInt's bit width. /// @brief Determine if this is the smallest signed value. bool isMinSignedValue() const { - return BitWidth == 1 ? VAL == 1 : - isNegative() && countPopulation() == 1; + return BitWidth == 1 ? VAL == 1 : isNegative() && isPowerOf2(); } /// @brief Check if this APInt has an N-bits unsigned integer value. @@ -355,7 +354,11 @@ public: } /// @returns true if the argument APInt value is a power of two > 0. - bool isPowerOf2() const; + bool isPowerOf2() const { + if (isSingleWord()) + return isPowerOf2_64(VAL); + return countPopulationSlowCase() == 1; + } /// isSignBit - Return true if this is the value returned by getSignBit. bool isSignBit() const { return isMinSignedValue(); } @@ -363,7 +366,7 @@ public: /// This converts the APInt to a boolean value as a test against zero. /// @brief Boolean conversion function. bool getBoolValue() const { - return *this != 0; + return !!*this; } /// getLimitedValue - If this value is smaller than the specified limit, diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index 9d8f8be..e7ff15c 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -759,10 +759,6 @@ APInt APInt::getLoBits(unsigned numBits) const { BitWidth - numBits); } -bool APInt::isPowerOf2() const { - return (!!*this) && !(*this & (*this - APInt(BitWidth,1))); -} - unsigned APInt::countLeadingZerosSlowCase() const { // Treat the most significand word differently because it might have // meaningless bits set beyond the precision. |