diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-02-26 20:57:12 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-02-26 20:57:12 +0000 |
commit | eed186ee585ece01f877994cd4188518740362b5 (patch) | |
tree | eca4dd1f740ee4c990f2fc605e1069731af7fd03 /llvm | |
parent | 97517ff93093b99d3b4c535d9f6385f296fc1433 (diff) | |
download | bcm5719-llvm-eed186ee585ece01f877994cd4188518740362b5.tar.gz bcm5719-llvm-eed186ee585ece01f877994cd4188518740362b5.zip |
1. Split getValue() into getSExtValue() and getZExtValue() to match
ConstantInt better.
2. Add a getHashValue() method.
llvm-svn: 34641
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/ADT/APInt.h | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index 23dd482b7d1..f37051e71cd 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -447,16 +447,27 @@ public: return BitWidth - countLeadingZeros(); } - /// @returns a uint64_t value from this APInt. If this APInt contains a single - /// word, just returns VAL, otherwise pVal[0]. - inline uint64_t getValue(bool isSigned = false) const { + /// This method attempts to return the value of this APInt as a zero extended + /// uint64_t. The bitwidth must be <= 64 or the value must fit within a + /// uint64_t. Otherwise an assertion will result. + /// @brief Get zero extended value + inline uint64_t getZExtValue() const { if (isSingleWord()) - return isSigned ? int64_t(VAL << (64 - BitWidth)) >> - (64 - BitWidth) : VAL; - uint32_t n = getActiveBits(); - if (n <= 64) - return pVal[0]; - assert(0 && "This APInt's bitwidth > 64"); + return VAL; + assert(getActiveBits() <= 64 && "Too many bits for uint64_t"); + return pVal[0]; + } + + /// This method attempts to return the value of this APInt as a sign extended + /// int64_t. The bit width must be <= 64 or the value must fit within an + /// int64_t. Otherwise an assertion will result. + /// @brief Get sign extended value + inline int64_t getSExtValue() const { + if (isSingleWord()) + return int64_t(VAL << (APINT_BITS_PER_WORD - BitWidth)) >> + (APINT_BITS_PER_WORD - BitWidth); + assert(getActiveBits() <= 64 && "Too many bits for int64_t"); + return int64_t(pVal[0]); } /// @returns the largest value for an APInt of the specified bit-width and @@ -478,6 +489,11 @@ public: /// @brief Get the '0' value. static APInt getNullValue(uint32_t numBits); + /// The hash value is computed as the sum of the words and the bit width. + /// @returns A hash value computed from the sum of the APInt words. + /// @brief Get a hash value based on this APInt + uint64_t getHashValue() const; + /// This converts the APInt to a boolean valy as a test against zero. /// @brief Boolean conversion function. inline bool getBoolValue() const { |