LLVM API Documentation
00001 //===-- llvm/ADT/APInt.h - For Arbitrary Precision Integer -----*- C++ -*--===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 /// 00010 /// \file 00011 /// \brief This file implements a class to represent arbitrary precision 00012 /// integral constant values and operations on them. 00013 /// 00014 //===----------------------------------------------------------------------===// 00015 00016 #ifndef LLVM_ADT_APINT_H 00017 #define LLVM_ADT_APINT_H 00018 00019 #include "llvm/ADT/ArrayRef.h" 00020 #include "llvm/Support/Compiler.h" 00021 #include "llvm/Support/MathExtras.h" 00022 #include <cassert> 00023 #include <climits> 00024 #include <cstring> 00025 #include <string> 00026 00027 namespace llvm { 00028 class Deserializer; 00029 class FoldingSetNodeID; 00030 class Serializer; 00031 class StringRef; 00032 class hash_code; 00033 class raw_ostream; 00034 00035 template <typename T> class SmallVectorImpl; 00036 00037 // An unsigned host type used as a single part of a multi-part 00038 // bignum. 00039 typedef uint64_t integerPart; 00040 00041 const unsigned int host_char_bit = 8; 00042 const unsigned int integerPartWidth = 00043 host_char_bit * static_cast<unsigned int>(sizeof(integerPart)); 00044 00045 //===----------------------------------------------------------------------===// 00046 // APInt Class 00047 //===----------------------------------------------------------------------===// 00048 00049 /// \brief Class for arbitrary precision integers. 00050 /// 00051 /// APInt is a functional replacement for common case unsigned integer type like 00052 /// "unsigned", "unsigned long" or "uint64_t", but also allows non-byte-width 00053 /// integer sizes and large integer value types such as 3-bits, 15-bits, or more 00054 /// than 64-bits of precision. APInt provides a variety of arithmetic operators 00055 /// and methods to manipulate integer values of any bit-width. It supports both 00056 /// the typical integer arithmetic and comparison operations as well as bitwise 00057 /// manipulation. 00058 /// 00059 /// The class has several invariants worth noting: 00060 /// * All bit, byte, and word positions are zero-based. 00061 /// * Once the bit width is set, it doesn't change except by the Truncate, 00062 /// SignExtend, or ZeroExtend operations. 00063 /// * All binary operators must be on APInt instances of the same bit width. 00064 /// Attempting to use these operators on instances with different bit 00065 /// widths will yield an assertion. 00066 /// * The value is stored canonically as an unsigned value. For operations 00067 /// where it makes a difference, there are both signed and unsigned variants 00068 /// of the operation. For example, sdiv and udiv. However, because the bit 00069 /// widths must be the same, operations such as Mul and Add produce the same 00070 /// results regardless of whether the values are interpreted as signed or 00071 /// not. 00072 /// * In general, the class tries to follow the style of computation that LLVM 00073 /// uses in its IR. This simplifies its use for LLVM. 00074 /// 00075 class APInt { 00076 unsigned BitWidth; ///< The number of bits in this APInt. 00077 00078 /// This union is used to store the integer value. When the 00079 /// integer bit-width <= 64, it uses VAL, otherwise it uses pVal. 00080 union { 00081 uint64_t VAL; ///< Used to store the <= 64 bits integer value. 00082 uint64_t *pVal; ///< Used to store the >64 bits integer value. 00083 }; 00084 00085 /// This enum is used to hold the constants we needed for APInt. 00086 enum { 00087 /// Bits in a word 00088 APINT_BITS_PER_WORD = 00089 static_cast<unsigned int>(sizeof(uint64_t)) * CHAR_BIT, 00090 /// Byte size of a word 00091 APINT_WORD_SIZE = static_cast<unsigned int>(sizeof(uint64_t)) 00092 }; 00093 00094 /// \brief Fast internal constructor 00095 /// 00096 /// This constructor is used only internally for speed of construction of 00097 /// temporaries. It is unsafe for general use so it is not public. 00098 APInt(uint64_t *val, unsigned bits) : BitWidth(bits), pVal(val) {} 00099 00100 /// \brief Determine if this APInt just has one word to store value. 00101 /// 00102 /// \returns true if the number of bits <= 64, false otherwise. 00103 bool isSingleWord() const { return BitWidth <= APINT_BITS_PER_WORD; } 00104 00105 /// \brief Determine which word a bit is in. 00106 /// 00107 /// \returns the word position for the specified bit position. 00108 static unsigned whichWord(unsigned bitPosition) { 00109 return bitPosition / APINT_BITS_PER_WORD; 00110 } 00111 00112 /// \brief Determine which bit in a word a bit is in. 00113 /// 00114 /// \returns the bit position in a word for the specified bit position 00115 /// in the APInt. 00116 static unsigned whichBit(unsigned bitPosition) { 00117 return bitPosition % APINT_BITS_PER_WORD; 00118 } 00119 00120 /// \brief Get a single bit mask. 00121 /// 00122 /// \returns a uint64_t with only bit at "whichBit(bitPosition)" set 00123 /// This method generates and returns a uint64_t (word) mask for a single 00124 /// bit at a specific bit position. This is used to mask the bit in the 00125 /// corresponding word. 00126 static uint64_t maskBit(unsigned bitPosition) { 00127 return 1ULL << whichBit(bitPosition); 00128 } 00129 00130 /// \brief Clear unused high order bits 00131 /// 00132 /// This method is used internally to clear the to "N" bits in the high order 00133 /// word that are not used by the APInt. This is needed after the most 00134 /// significant word is assigned a value to ensure that those bits are 00135 /// zero'd out. 00136 APInt &clearUnusedBits() { 00137 // Compute how many bits are used in the final word 00138 unsigned wordBits = BitWidth % APINT_BITS_PER_WORD; 00139 if (wordBits == 0) 00140 // If all bits are used, we want to leave the value alone. This also 00141 // avoids the undefined behavior of >> when the shift is the same size as 00142 // the word size (64). 00143 return *this; 00144 00145 // Mask out the high bits. 00146 uint64_t mask = ~uint64_t(0ULL) >> (APINT_BITS_PER_WORD - wordBits); 00147 if (isSingleWord()) 00148 VAL &= mask; 00149 else 00150 pVal[getNumWords() - 1] &= mask; 00151 return *this; 00152 } 00153 00154 /// \brief Get the word corresponding to a bit position 00155 /// \returns the corresponding word for the specified bit position. 00156 uint64_t getWord(unsigned bitPosition) const { 00157 return isSingleWord() ? VAL : pVal[whichWord(bitPosition)]; 00158 } 00159 00160 /// \brief Convert a char array into an APInt 00161 /// 00162 /// \param radix 2, 8, 10, 16, or 36 00163 /// Converts a string into a number. The string must be non-empty 00164 /// and well-formed as a number of the given base. The bit-width 00165 /// must be sufficient to hold the result. 00166 /// 00167 /// This is used by the constructors that take string arguments. 00168 /// 00169 /// StringRef::getAsInteger is superficially similar but (1) does 00170 /// not assume that the string is well-formed and (2) grows the 00171 /// result to hold the input. 00172 void fromString(unsigned numBits, StringRef str, uint8_t radix); 00173 00174 /// \brief An internal division function for dividing APInts. 00175 /// 00176 /// This is used by the toString method to divide by the radix. It simply 00177 /// provides a more convenient form of divide for internal use since KnuthDiv 00178 /// has specific constraints on its inputs. If those constraints are not met 00179 /// then it provides a simpler form of divide. 00180 static void divide(const APInt LHS, unsigned lhsWords, const APInt &RHS, 00181 unsigned rhsWords, APInt *Quotient, APInt *Remainder); 00182 00183 /// out-of-line slow case for inline constructor 00184 void initSlowCase(unsigned numBits, uint64_t val, bool isSigned); 00185 00186 /// shared code between two array constructors 00187 void initFromArray(ArrayRef<uint64_t> array); 00188 00189 /// out-of-line slow case for inline copy constructor 00190 void initSlowCase(const APInt &that); 00191 00192 /// out-of-line slow case for shl 00193 APInt shlSlowCase(unsigned shiftAmt) const; 00194 00195 /// out-of-line slow case for operator& 00196 APInt AndSlowCase(const APInt &RHS) const; 00197 00198 /// out-of-line slow case for operator| 00199 APInt OrSlowCase(const APInt &RHS) const; 00200 00201 /// out-of-line slow case for operator^ 00202 APInt XorSlowCase(const APInt &RHS) const; 00203 00204 /// out-of-line slow case for operator= 00205 APInt &AssignSlowCase(const APInt &RHS); 00206 00207 /// out-of-line slow case for operator== 00208 bool EqualSlowCase(const APInt &RHS) const; 00209 00210 /// out-of-line slow case for operator== 00211 bool EqualSlowCase(uint64_t Val) const; 00212 00213 /// out-of-line slow case for countLeadingZeros 00214 unsigned countLeadingZerosSlowCase() const; 00215 00216 /// out-of-line slow case for countTrailingOnes 00217 unsigned countTrailingOnesSlowCase() const; 00218 00219 /// out-of-line slow case for countPopulation 00220 unsigned countPopulationSlowCase() const; 00221 00222 public: 00223 /// \name Constructors 00224 /// @{ 00225 00226 /// \brief Create a new APInt of numBits width, initialized as val. 00227 /// 00228 /// If isSigned is true then val is treated as if it were a signed value 00229 /// (i.e. as an int64_t) and the appropriate sign extension to the bit width 00230 /// will be done. Otherwise, no sign extension occurs (high order bits beyond 00231 /// the range of val are zero filled). 00232 /// 00233 /// \param numBits the bit width of the constructed APInt 00234 /// \param val the initial value of the APInt 00235 /// \param isSigned how to treat signedness of val 00236 APInt(unsigned numBits, uint64_t val, bool isSigned = false) 00237 : BitWidth(numBits), VAL(0) { 00238 assert(BitWidth && "bitwidth too small"); 00239 if (isSingleWord()) 00240 VAL = val; 00241 else 00242 initSlowCase(numBits, val, isSigned); 00243 clearUnusedBits(); 00244 } 00245 00246 /// \brief Construct an APInt of numBits width, initialized as bigVal[]. 00247 /// 00248 /// Note that bigVal.size() can be smaller or larger than the corresponding 00249 /// bit width but any extraneous bits will be dropped. 00250 /// 00251 /// \param numBits the bit width of the constructed APInt 00252 /// \param bigVal a sequence of words to form the initial value of the APInt 00253 APInt(unsigned numBits, ArrayRef<uint64_t> bigVal); 00254 00255 /// Equivalent to APInt(numBits, ArrayRef<uint64_t>(bigVal, numWords)), but 00256 /// deprecated because this constructor is prone to ambiguity with the 00257 /// APInt(unsigned, uint64_t, bool) constructor. 00258 /// 00259 /// If this overload is ever deleted, care should be taken to prevent calls 00260 /// from being incorrectly captured by the APInt(unsigned, uint64_t, bool) 00261 /// constructor. 00262 APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[]); 00263 00264 /// \brief Construct an APInt from a string representation. 00265 /// 00266 /// This constructor interprets the string \p str in the given radix. The 00267 /// interpretation stops when the first character that is not suitable for the 00268 /// radix is encountered, or the end of the string. Acceptable radix values 00269 /// are 2, 8, 10, 16, and 36. It is an error for the value implied by the 00270 /// string to require more bits than numBits. 00271 /// 00272 /// \param numBits the bit width of the constructed APInt 00273 /// \param str the string to be interpreted 00274 /// \param radix the radix to use for the conversion 00275 APInt(unsigned numBits, StringRef str, uint8_t radix); 00276 00277 /// Simply makes *this a copy of that. 00278 /// @brief Copy Constructor. 00279 APInt(const APInt &that) : BitWidth(that.BitWidth), VAL(0) { 00280 assert(BitWidth && "bitwidth too small"); 00281 if (isSingleWord()) 00282 VAL = that.VAL; 00283 else 00284 initSlowCase(that); 00285 } 00286 00287 /// \brief Move Constructor. 00288 APInt(APInt &&that) : BitWidth(that.BitWidth), VAL(that.VAL) { 00289 that.BitWidth = 0; 00290 } 00291 00292 /// \brief Destructor. 00293 ~APInt() { 00294 if (needsCleanup()) 00295 delete[] pVal; 00296 } 00297 00298 /// \brief Default constructor that creates an uninitialized APInt. 00299 /// 00300 /// This is useful for object deserialization (pair this with the static 00301 /// method Read). 00302 explicit APInt() : BitWidth(1) {} 00303 00304 /// \brief Returns whether this instance allocated memory. 00305 bool needsCleanup() const { return !isSingleWord(); } 00306 00307 /// Used to insert APInt objects, or objects that contain APInt objects, into 00308 /// FoldingSets. 00309 void Profile(FoldingSetNodeID &id) const; 00310 00311 /// @} 00312 /// \name Value Tests 00313 /// @{ 00314 00315 /// \brief Determine sign of this APInt. 00316 /// 00317 /// This tests the high bit of this APInt to determine if it is set. 00318 /// 00319 /// \returns true if this APInt is negative, false otherwise 00320 bool isNegative() const { return (*this)[BitWidth - 1]; } 00321 00322 /// \brief Determine if this APInt Value is non-negative (>= 0) 00323 /// 00324 /// This tests the high bit of the APInt to determine if it is unset. 00325 bool isNonNegative() const { return !isNegative(); } 00326 00327 /// \brief Determine if this APInt Value is positive. 00328 /// 00329 /// This tests if the value of this APInt is positive (> 0). Note 00330 /// that 0 is not a positive value. 00331 /// 00332 /// \returns true if this APInt is positive. 00333 bool isStrictlyPositive() const { return isNonNegative() && !!*this; } 00334 00335 /// \brief Determine if all bits are set 00336 /// 00337 /// This checks to see if the value has all bits of the APInt are set or not. 00338 bool isAllOnesValue() const { 00339 if (isSingleWord()) 00340 return VAL == ~integerPart(0) >> (APINT_BITS_PER_WORD - BitWidth); 00341 return countPopulationSlowCase() == BitWidth; 00342 } 00343 00344 /// \brief Determine if this is the largest unsigned value. 00345 /// 00346 /// This checks to see if the value of this APInt is the maximum unsigned 00347 /// value for the APInt's bit width. 00348 bool isMaxValue() const { return isAllOnesValue(); } 00349 00350 /// \brief Determine if this is the largest signed value. 00351 /// 00352 /// This checks to see if the value of this APInt is the maximum signed 00353 /// value for the APInt's bit width. 00354 bool isMaxSignedValue() const { 00355 return BitWidth == 1 ? VAL == 0 00356 : !isNegative() && countPopulation() == BitWidth - 1; 00357 } 00358 00359 /// \brief Determine if this is the smallest unsigned value. 00360 /// 00361 /// This checks to see if the value of this APInt is the minimum unsigned 00362 /// value for the APInt's bit width. 00363 bool isMinValue() const { return !*this; } 00364 00365 /// \brief Determine if this is the smallest signed value. 00366 /// 00367 /// This checks to see if the value of this APInt is the minimum signed 00368 /// value for the APInt's bit width. 00369 bool isMinSignedValue() const { 00370 return BitWidth == 1 ? VAL == 1 : isNegative() && isPowerOf2(); 00371 } 00372 00373 /// \brief Check if this APInt has an N-bits unsigned integer value. 00374 bool isIntN(unsigned N) const { 00375 assert(N && "N == 0 ???"); 00376 return getActiveBits() <= N; 00377 } 00378 00379 /// \brief Check if this APInt has an N-bits signed integer value. 00380 bool isSignedIntN(unsigned N) const { 00381 assert(N && "N == 0 ???"); 00382 return getMinSignedBits() <= N; 00383 } 00384 00385 /// \brief Check if this APInt's value is a power of two greater than zero. 00386 /// 00387 /// \returns true if the argument APInt value is a power of two > 0. 00388 bool isPowerOf2() const { 00389 if (isSingleWord()) 00390 return isPowerOf2_64(VAL); 00391 return countPopulationSlowCase() == 1; 00392 } 00393 00394 /// \brief Check if the APInt's value is returned by getSignBit. 00395 /// 00396 /// \returns true if this is the value returned by getSignBit. 00397 bool isSignBit() const { return isMinSignedValue(); } 00398 00399 /// \brief Convert APInt to a boolean value. 00400 /// 00401 /// This converts the APInt to a boolean value as a test against zero. 00402 bool getBoolValue() const { return !!*this; } 00403 00404 /// If this value is smaller than the specified limit, return it, otherwise 00405 /// return the limit value. This causes the value to saturate to the limit. 00406 uint64_t getLimitedValue(uint64_t Limit = ~0ULL) const { 00407 return (getActiveBits() > 64 || getZExtValue() > Limit) ? Limit 00408 : getZExtValue(); 00409 } 00410 00411 /// @} 00412 /// \name Value Generators 00413 /// @{ 00414 00415 /// \brief Gets maximum unsigned value of APInt for specific bit width. 00416 static APInt getMaxValue(unsigned numBits) { 00417 return getAllOnesValue(numBits); 00418 } 00419 00420 /// \brief Gets maximum signed value of APInt for a specific bit width. 00421 static APInt getSignedMaxValue(unsigned numBits) { 00422 APInt API = getAllOnesValue(numBits); 00423 API.clearBit(numBits - 1); 00424 return API; 00425 } 00426 00427 /// \brief Gets minimum unsigned value of APInt for a specific bit width. 00428 static APInt getMinValue(unsigned numBits) { return APInt(numBits, 0); } 00429 00430 /// \brief Gets minimum signed value of APInt for a specific bit width. 00431 static APInt getSignedMinValue(unsigned numBits) { 00432 APInt API(numBits, 0); 00433 API.setBit(numBits - 1); 00434 return API; 00435 } 00436 00437 /// \brief Get the SignBit for a specific bit width. 00438 /// 00439 /// This is just a wrapper function of getSignedMinValue(), and it helps code 00440 /// readability when we want to get a SignBit. 00441 static APInt getSignBit(unsigned BitWidth) { 00442 return getSignedMinValue(BitWidth); 00443 } 00444 00445 /// \brief Get the all-ones value. 00446 /// 00447 /// \returns the all-ones value for an APInt of the specified bit-width. 00448 static APInt getAllOnesValue(unsigned numBits) { 00449 return APInt(numBits, UINT64_MAX, true); 00450 } 00451 00452 /// \brief Get the '0' value. 00453 /// 00454 /// \returns the '0' value for an APInt of the specified bit-width. 00455 static APInt getNullValue(unsigned numBits) { return APInt(numBits, 0); } 00456 00457 /// \brief Compute an APInt containing numBits highbits from this APInt. 00458 /// 00459 /// Get an APInt with the same BitWidth as this APInt, just zero mask 00460 /// the low bits and right shift to the least significant bit. 00461 /// 00462 /// \returns the high "numBits" bits of this APInt. 00463 APInt getHiBits(unsigned numBits) const; 00464 00465 /// \brief Compute an APInt containing numBits lowbits from this APInt. 00466 /// 00467 /// Get an APInt with the same BitWidth as this APInt, just zero mask 00468 /// the high bits. 00469 /// 00470 /// \returns the low "numBits" bits of this APInt. 00471 APInt getLoBits(unsigned numBits) const; 00472 00473 /// \brief Return an APInt with exactly one bit set in the result. 00474 static APInt getOneBitSet(unsigned numBits, unsigned BitNo) { 00475 APInt Res(numBits, 0); 00476 Res.setBit(BitNo); 00477 return Res; 00478 } 00479 00480 /// \brief Get a value with a block of bits set. 00481 /// 00482 /// Constructs an APInt value that has a contiguous range of bits set. The 00483 /// bits from loBit (inclusive) to hiBit (exclusive) will be set. All other 00484 /// bits will be zero. For example, with parameters(32, 0, 16) you would get 00485 /// 0x0000FFFF. If hiBit is less than loBit then the set bits "wrap". For 00486 /// example, with parameters (32, 28, 4), you would get 0xF000000F. 00487 /// 00488 /// \param numBits the intended bit width of the result 00489 /// \param loBit the index of the lowest bit set. 00490 /// \param hiBit the index of the highest bit set. 00491 /// 00492 /// \returns An APInt value with the requested bits set. 00493 static APInt getBitsSet(unsigned numBits, unsigned loBit, unsigned hiBit) { 00494 assert(hiBit <= numBits && "hiBit out of range"); 00495 assert(loBit < numBits && "loBit out of range"); 00496 if (hiBit < loBit) 00497 return getLowBitsSet(numBits, hiBit) | 00498 getHighBitsSet(numBits, numBits - loBit); 00499 return getLowBitsSet(numBits, hiBit - loBit).shl(loBit); 00500 } 00501 00502 /// \brief Get a value with high bits set 00503 /// 00504 /// Constructs an APInt value that has the top hiBitsSet bits set. 00505 /// 00506 /// \param numBits the bitwidth of the result 00507 /// \param hiBitsSet the number of high-order bits set in the result. 00508 static APInt getHighBitsSet(unsigned numBits, unsigned hiBitsSet) { 00509 assert(hiBitsSet <= numBits && "Too many bits to set!"); 00510 // Handle a degenerate case, to avoid shifting by word size 00511 if (hiBitsSet == 0) 00512 return APInt(numBits, 0); 00513 unsigned shiftAmt = numBits - hiBitsSet; 00514 // For small values, return quickly 00515 if (numBits <= APINT_BITS_PER_WORD) 00516 return APInt(numBits, ~0ULL << shiftAmt); 00517 return getAllOnesValue(numBits).shl(shiftAmt); 00518 } 00519 00520 /// \brief Get a value with low bits set 00521 /// 00522 /// Constructs an APInt value that has the bottom loBitsSet bits set. 00523 /// 00524 /// \param numBits the bitwidth of the result 00525 /// \param loBitsSet the number of low-order bits set in the result. 00526 static APInt getLowBitsSet(unsigned numBits, unsigned loBitsSet) { 00527 assert(loBitsSet <= numBits && "Too many bits to set!"); 00528 // Handle a degenerate case, to avoid shifting by word size 00529 if (loBitsSet == 0) 00530 return APInt(numBits, 0); 00531 if (loBitsSet == APINT_BITS_PER_WORD) 00532 return APInt(numBits, UINT64_MAX); 00533 // For small values, return quickly. 00534 if (loBitsSet <= APINT_BITS_PER_WORD) 00535 return APInt(numBits, UINT64_MAX >> (APINT_BITS_PER_WORD - loBitsSet)); 00536 return getAllOnesValue(numBits).lshr(numBits - loBitsSet); 00537 } 00538 00539 /// \brief Return a value containing V broadcasted over NewLen bits. 00540 static APInt getSplat(unsigned NewLen, const APInt &V) { 00541 assert(NewLen >= V.getBitWidth() && "Can't splat to smaller bit width!"); 00542 00543 APInt Val = V.zextOrSelf(NewLen); 00544 for (unsigned I = V.getBitWidth(); I < NewLen; I <<= 1) 00545 Val |= Val << I; 00546 00547 return Val; 00548 } 00549 00550 /// \brief Determine if two APInts have the same value, after zero-extending 00551 /// one of them (if needed!) to ensure that the bit-widths match. 00552 static bool isSameValue(const APInt &I1, const APInt &I2) { 00553 if (I1.getBitWidth() == I2.getBitWidth()) 00554 return I1 == I2; 00555 00556 if (I1.getBitWidth() > I2.getBitWidth()) 00557 return I1 == I2.zext(I1.getBitWidth()); 00558 00559 return I1.zext(I2.getBitWidth()) == I2; 00560 } 00561 00562 /// \brief Overload to compute a hash_code for an APInt value. 00563 friend hash_code hash_value(const APInt &Arg); 00564 00565 /// This function returns a pointer to the internal storage of the APInt. 00566 /// This is useful for writing out the APInt in binary form without any 00567 /// conversions. 00568 const uint64_t *getRawData() const { 00569 if (isSingleWord()) 00570 return &VAL; 00571 return &pVal[0]; 00572 } 00573 00574 /// @} 00575 /// \name Unary Operators 00576 /// @{ 00577 00578 /// \brief Postfix increment operator. 00579 /// 00580 /// \returns a new APInt value representing *this incremented by one 00581 const APInt operator++(int) { 00582 APInt API(*this); 00583 ++(*this); 00584 return API; 00585 } 00586 00587 /// \brief Prefix increment operator. 00588 /// 00589 /// \returns *this incremented by one 00590 APInt &operator++(); 00591 00592 /// \brief Postfix decrement operator. 00593 /// 00594 /// \returns a new APInt representing *this decremented by one. 00595 const APInt operator--(int) { 00596 APInt API(*this); 00597 --(*this); 00598 return API; 00599 } 00600 00601 /// \brief Prefix decrement operator. 00602 /// 00603 /// \returns *this decremented by one. 00604 APInt &operator--(); 00605 00606 /// \brief Unary bitwise complement operator. 00607 /// 00608 /// Performs a bitwise complement operation on this APInt. 00609 /// 00610 /// \returns an APInt that is the bitwise complement of *this 00611 APInt operator~() const { 00612 APInt Result(*this); 00613 Result.flipAllBits(); 00614 return Result; 00615 } 00616 00617 /// \brief Unary negation operator 00618 /// 00619 /// Negates *this using two's complement logic. 00620 /// 00621 /// \returns An APInt value representing the negation of *this. 00622 APInt operator-() const { return APInt(BitWidth, 0) - (*this); } 00623 00624 /// \brief Logical negation operator. 00625 /// 00626 /// Performs logical negation operation on this APInt. 00627 /// 00628 /// \returns true if *this is zero, false otherwise. 00629 bool operator!() const { 00630 if (isSingleWord()) 00631 return !VAL; 00632 00633 for (unsigned i = 0; i != getNumWords(); ++i) 00634 if (pVal[i]) 00635 return false; 00636 return true; 00637 } 00638 00639 /// @} 00640 /// \name Assignment Operators 00641 /// @{ 00642 00643 /// \brief Copy assignment operator. 00644 /// 00645 /// \returns *this after assignment of RHS. 00646 APInt &operator=(const APInt &RHS) { 00647 // If the bitwidths are the same, we can avoid mucking with memory 00648 if (isSingleWord() && RHS.isSingleWord()) { 00649 VAL = RHS.VAL; 00650 BitWidth = RHS.BitWidth; 00651 return clearUnusedBits(); 00652 } 00653 00654 return AssignSlowCase(RHS); 00655 } 00656 00657 /// @brief Move assignment operator. 00658 APInt &operator=(APInt &&that) { 00659 if (!isSingleWord()) { 00660 // The MSVC STL shipped in 2013 requires that self move assignment be a 00661 // no-op. Otherwise algorithms like stable_sort will produce answers 00662 // where half of the output is left in a moved-from state. 00663 if (this == &that) 00664 return *this; 00665 delete[] pVal; 00666 } 00667 00668 VAL = that.VAL; 00669 00670 // If 'this == &that', avoid zeroing our own bitwidth by storing to 'that' 00671 // first. 00672 unsigned ThatBitWidth = that.BitWidth; 00673 that.BitWidth = 0; 00674 BitWidth = ThatBitWidth; 00675 00676 return *this; 00677 } 00678 00679 /// \brief Assignment operator. 00680 /// 00681 /// The RHS value is assigned to *this. If the significant bits in RHS exceed 00682 /// the bit width, the excess bits are truncated. If the bit width is larger 00683 /// than 64, the value is zero filled in the unspecified high order bits. 00684 /// 00685 /// \returns *this after assignment of RHS value. 00686 APInt &operator=(uint64_t RHS); 00687 00688 /// \brief Bitwise AND assignment operator. 00689 /// 00690 /// Performs a bitwise AND operation on this APInt and RHS. The result is 00691 /// assigned to *this. 00692 /// 00693 /// \returns *this after ANDing with RHS. 00694 APInt &operator&=(const APInt &RHS); 00695 00696 /// \brief Bitwise OR assignment operator. 00697 /// 00698 /// Performs a bitwise OR operation on this APInt and RHS. The result is 00699 /// assigned *this; 00700 /// 00701 /// \returns *this after ORing with RHS. 00702 APInt &operator|=(const APInt &RHS); 00703 00704 /// \brief Bitwise OR assignment operator. 00705 /// 00706 /// Performs a bitwise OR operation on this APInt and RHS. RHS is 00707 /// logically zero-extended or truncated to match the bit-width of 00708 /// the LHS. 00709 APInt &operator|=(uint64_t RHS) { 00710 if (isSingleWord()) { 00711 VAL |= RHS; 00712 clearUnusedBits(); 00713 } else { 00714 pVal[0] |= RHS; 00715 } 00716 return *this; 00717 } 00718 00719 /// \brief Bitwise XOR assignment operator. 00720 /// 00721 /// Performs a bitwise XOR operation on this APInt and RHS. The result is 00722 /// assigned to *this. 00723 /// 00724 /// \returns *this after XORing with RHS. 00725 APInt &operator^=(const APInt &RHS); 00726 00727 /// \brief Multiplication assignment operator. 00728 /// 00729 /// Multiplies this APInt by RHS and assigns the result to *this. 00730 /// 00731 /// \returns *this 00732 APInt &operator*=(const APInt &RHS); 00733 00734 /// \brief Addition assignment operator. 00735 /// 00736 /// Adds RHS to *this and assigns the result to *this. 00737 /// 00738 /// \returns *this 00739 APInt &operator+=(const APInt &RHS); 00740 00741 /// \brief Subtraction assignment operator. 00742 /// 00743 /// Subtracts RHS from *this and assigns the result to *this. 00744 /// 00745 /// \returns *this 00746 APInt &operator-=(const APInt &RHS); 00747 00748 /// \brief Left-shift assignment function. 00749 /// 00750 /// Shifts *this left by shiftAmt and assigns the result to *this. 00751 /// 00752 /// \returns *this after shifting left by shiftAmt 00753 APInt &operator<<=(unsigned shiftAmt) { 00754 *this = shl(shiftAmt); 00755 return *this; 00756 } 00757 00758 /// @} 00759 /// \name Binary Operators 00760 /// @{ 00761 00762 /// \brief Bitwise AND operator. 00763 /// 00764 /// Performs a bitwise AND operation on *this and RHS. 00765 /// 00766 /// \returns An APInt value representing the bitwise AND of *this and RHS. 00767 APInt operator&(const APInt &RHS) const { 00768 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 00769 if (isSingleWord()) 00770 return APInt(getBitWidth(), VAL & RHS.VAL); 00771 return AndSlowCase(RHS); 00772 } 00773 APInt LLVM_ATTRIBUTE_UNUSED_RESULT And(const APInt &RHS) const { 00774 return this->operator&(RHS); 00775 } 00776 00777 /// \brief Bitwise OR operator. 00778 /// 00779 /// Performs a bitwise OR operation on *this and RHS. 00780 /// 00781 /// \returns An APInt value representing the bitwise OR of *this and RHS. 00782 APInt operator|(const APInt &RHS) const { 00783 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 00784 if (isSingleWord()) 00785 return APInt(getBitWidth(), VAL | RHS.VAL); 00786 return OrSlowCase(RHS); 00787 } 00788 00789 /// \brief Bitwise OR function. 00790 /// 00791 /// Performs a bitwise or on *this and RHS. This is implemented bny simply 00792 /// calling operator|. 00793 /// 00794 /// \returns An APInt value representing the bitwise OR of *this and RHS. 00795 APInt LLVM_ATTRIBUTE_UNUSED_RESULT Or(const APInt &RHS) const { 00796 return this->operator|(RHS); 00797 } 00798 00799 /// \brief Bitwise XOR operator. 00800 /// 00801 /// Performs a bitwise XOR operation on *this and RHS. 00802 /// 00803 /// \returns An APInt value representing the bitwise XOR of *this and RHS. 00804 APInt operator^(const APInt &RHS) const { 00805 assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); 00806 if (isSingleWord()) 00807 return APInt(BitWidth, VAL ^ RHS.VAL); 00808 return XorSlowCase(RHS); 00809 } 00810 00811 /// \brief Bitwise XOR function. 00812 /// 00813 /// Performs a bitwise XOR operation on *this and RHS. This is implemented 00814 /// through the usage of operator^. 00815 /// 00816 /// \returns An APInt value representing the bitwise XOR of *this and RHS. 00817 APInt LLVM_ATTRIBUTE_UNUSED_RESULT Xor(const APInt &RHS) const { 00818 return this->operator^(RHS); 00819 } 00820 00821 /// \brief Multiplication operator. 00822 /// 00823 /// Multiplies this APInt by RHS and returns the result. 00824 APInt operator*(const APInt &RHS) const; 00825 00826 /// \brief Addition operator. 00827 /// 00828 /// Adds RHS to this APInt and returns the result. 00829 APInt operator+(const APInt &RHS) const; 00830 APInt operator+(uint64_t RHS) const { return (*this) + APInt(BitWidth, RHS); } 00831 00832 /// \brief Subtraction operator. 00833 /// 00834 /// Subtracts RHS from this APInt and returns the result. 00835 APInt operator-(const APInt &RHS) const; 00836 APInt operator-(uint64_t RHS) const { return (*this) - APInt(BitWidth, RHS); } 00837 00838 /// \brief Left logical shift operator. 00839 /// 00840 /// Shifts this APInt left by \p Bits and returns the result. 00841 APInt operator<<(unsigned Bits) const { return shl(Bits); } 00842 00843 /// \brief Left logical shift operator. 00844 /// 00845 /// Shifts this APInt left by \p Bits and returns the result. 00846 APInt operator<<(const APInt &Bits) const { return shl(Bits); } 00847 00848 /// \brief Arithmetic right-shift function. 00849 /// 00850 /// Arithmetic right-shift this APInt by shiftAmt. 00851 APInt LLVM_ATTRIBUTE_UNUSED_RESULT ashr(unsigned shiftAmt) const; 00852 00853 /// \brief Logical right-shift function. 00854 /// 00855 /// Logical right-shift this APInt by shiftAmt. 00856 APInt LLVM_ATTRIBUTE_UNUSED_RESULT lshr(unsigned shiftAmt) const; 00857 00858 /// \brief Left-shift function. 00859 /// 00860 /// Left-shift this APInt by shiftAmt. 00861 APInt LLVM_ATTRIBUTE_UNUSED_RESULT shl(unsigned shiftAmt) const { 00862 assert(shiftAmt <= BitWidth && "Invalid shift amount"); 00863 if (isSingleWord()) { 00864 if (shiftAmt >= BitWidth) 00865 return APInt(BitWidth, 0); // avoid undefined shift results 00866 return APInt(BitWidth, VAL << shiftAmt); 00867 } 00868 return shlSlowCase(shiftAmt); 00869 } 00870 00871 /// \brief Rotate left by rotateAmt. 00872 APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotl(unsigned rotateAmt) const; 00873 00874 /// \brief Rotate right by rotateAmt. 00875 APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotr(unsigned rotateAmt) const; 00876 00877 /// \brief Arithmetic right-shift function. 00878 /// 00879 /// Arithmetic right-shift this APInt by shiftAmt. 00880 APInt LLVM_ATTRIBUTE_UNUSED_RESULT ashr(const APInt &shiftAmt) const; 00881 00882 /// \brief Logical right-shift function. 00883 /// 00884 /// Logical right-shift this APInt by shiftAmt. 00885 APInt LLVM_ATTRIBUTE_UNUSED_RESULT lshr(const APInt &shiftAmt) const; 00886 00887 /// \brief Left-shift function. 00888 /// 00889 /// Left-shift this APInt by shiftAmt. 00890 APInt LLVM_ATTRIBUTE_UNUSED_RESULT shl(const APInt &shiftAmt) const; 00891 00892 /// \brief Rotate left by rotateAmt. 00893 APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotl(const APInt &rotateAmt) const; 00894 00895 /// \brief Rotate right by rotateAmt. 00896 APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotr(const APInt &rotateAmt) const; 00897 00898 /// \brief Unsigned division operation. 00899 /// 00900 /// Perform an unsigned divide operation on this APInt by RHS. Both this and 00901 /// RHS are treated as unsigned quantities for purposes of this division. 00902 /// 00903 /// \returns a new APInt value containing the division result 00904 APInt LLVM_ATTRIBUTE_UNUSED_RESULT udiv(const APInt &RHS) const; 00905 00906 /// \brief Signed division function for APInt. 00907 /// 00908 /// Signed divide this APInt by APInt RHS. 00909 APInt LLVM_ATTRIBUTE_UNUSED_RESULT sdiv(const APInt &RHS) const; 00910 00911 /// \brief Unsigned remainder operation. 00912 /// 00913 /// Perform an unsigned remainder operation on this APInt with RHS being the 00914 /// divisor. Both this and RHS are treated as unsigned quantities for purposes 00915 /// of this operation. Note that this is a true remainder operation and not a 00916 /// modulo operation because the sign follows the sign of the dividend which 00917 /// is *this. 00918 /// 00919 /// \returns a new APInt value containing the remainder result 00920 APInt LLVM_ATTRIBUTE_UNUSED_RESULT urem(const APInt &RHS) const; 00921 00922 /// \brief Function for signed remainder operation. 00923 /// 00924 /// Signed remainder operation on APInt. 00925 APInt LLVM_ATTRIBUTE_UNUSED_RESULT srem(const APInt &RHS) const; 00926 00927 /// \brief Dual division/remainder interface. 00928 /// 00929 /// Sometimes it is convenient to divide two APInt values and obtain both the 00930 /// quotient and remainder. This function does both operations in the same 00931 /// computation making it a little more efficient. The pair of input arguments 00932 /// may overlap with the pair of output arguments. It is safe to call 00933 /// udivrem(X, Y, X, Y), for example. 00934 static void udivrem(const APInt &LHS, const APInt &RHS, APInt &Quotient, 00935 APInt &Remainder); 00936 00937 static void sdivrem(const APInt &LHS, const APInt &RHS, APInt &Quotient, 00938 APInt &Remainder); 00939 00940 // Operations that return overflow indicators. 00941 APInt sadd_ov(const APInt &RHS, bool &Overflow) const; 00942 APInt uadd_ov(const APInt &RHS, bool &Overflow) const; 00943 APInt ssub_ov(const APInt &RHS, bool &Overflow) const; 00944 APInt usub_ov(const APInt &RHS, bool &Overflow) const; 00945 APInt sdiv_ov(const APInt &RHS, bool &Overflow) const; 00946 APInt smul_ov(const APInt &RHS, bool &Overflow) const; 00947 APInt umul_ov(const APInt &RHS, bool &Overflow) const; 00948 APInt sshl_ov(unsigned Amt, bool &Overflow) const; 00949 00950 /// \brief Array-indexing support. 00951 /// 00952 /// \returns the bit value at bitPosition 00953 bool operator[](unsigned bitPosition) const { 00954 assert(bitPosition < getBitWidth() && "Bit position out of bounds!"); 00955 return (maskBit(bitPosition) & 00956 (isSingleWord() ? VAL : pVal[whichWord(bitPosition)])) != 00957 0; 00958 } 00959 00960 /// @} 00961 /// \name Comparison Operators 00962 /// @{ 00963 00964 /// \brief Equality operator. 00965 /// 00966 /// Compares this APInt with RHS for the validity of the equality 00967 /// relationship. 00968 bool operator==(const APInt &RHS) const { 00969 assert(BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"); 00970 if (isSingleWord()) 00971 return VAL == RHS.VAL; 00972 return EqualSlowCase(RHS); 00973 } 00974 00975 /// \brief Equality operator. 00976 /// 00977 /// Compares this APInt with a uint64_t for the validity of the equality 00978 /// relationship. 00979 /// 00980 /// \returns true if *this == Val 00981 bool operator==(uint64_t Val) const { 00982 if (isSingleWord()) 00983 return VAL == Val; 00984 return EqualSlowCase(Val); 00985 } 00986 00987 /// \brief Equality comparison. 00988 /// 00989 /// Compares this APInt with RHS for the validity of the equality 00990 /// relationship. 00991 /// 00992 /// \returns true if *this == Val 00993 bool eq(const APInt &RHS) const { return (*this) == RHS; } 00994 00995 /// \brief Inequality operator. 00996 /// 00997 /// Compares this APInt with RHS for the validity of the inequality 00998 /// relationship. 00999 /// 01000 /// \returns true if *this != Val 01001 bool operator!=(const APInt &RHS) const { return !((*this) == RHS); } 01002 01003 /// \brief Inequality operator. 01004 /// 01005 /// Compares this APInt with a uint64_t for the validity of the inequality 01006 /// relationship. 01007 /// 01008 /// \returns true if *this != Val 01009 bool operator!=(uint64_t Val) const { return !((*this) == Val); } 01010 01011 /// \brief Inequality comparison 01012 /// 01013 /// Compares this APInt with RHS for the validity of the inequality 01014 /// relationship. 01015 /// 01016 /// \returns true if *this != Val 01017 bool ne(const APInt &RHS) const { return !((*this) == RHS); } 01018 01019 /// \brief Unsigned less than comparison 01020 /// 01021 /// Regards both *this and RHS as unsigned quantities and compares them for 01022 /// the validity of the less-than relationship. 01023 /// 01024 /// \returns true if *this < RHS when both are considered unsigned. 01025 bool ult(const APInt &RHS) const; 01026 01027 /// \brief Unsigned less than comparison 01028 /// 01029 /// Regards both *this as an unsigned quantity and compares it with RHS for 01030 /// the validity of the less-than relationship. 01031 /// 01032 /// \returns true if *this < RHS when considered unsigned. 01033 bool ult(uint64_t RHS) const { return ult(APInt(getBitWidth(), RHS)); } 01034 01035 /// \brief Signed less than comparison 01036 /// 01037 /// Regards both *this and RHS as signed quantities and compares them for 01038 /// validity of the less-than relationship. 01039 /// 01040 /// \returns true if *this < RHS when both are considered signed. 01041 bool slt(const APInt &RHS) const; 01042 01043 /// \brief Signed less than comparison 01044 /// 01045 /// Regards both *this as a signed quantity and compares it with RHS for 01046 /// the validity of the less-than relationship. 01047 /// 01048 /// \returns true if *this < RHS when considered signed. 01049 bool slt(uint64_t RHS) const { return slt(APInt(getBitWidth(), RHS)); } 01050 01051 /// \brief Unsigned less or equal comparison 01052 /// 01053 /// Regards both *this and RHS as unsigned quantities and compares them for 01054 /// validity of the less-or-equal relationship. 01055 /// 01056 /// \returns true if *this <= RHS when both are considered unsigned. 01057 bool ule(const APInt &RHS) const { return ult(RHS) || eq(RHS); } 01058 01059 /// \brief Unsigned less or equal comparison 01060 /// 01061 /// Regards both *this as an unsigned quantity and compares it with RHS for 01062 /// the validity of the less-or-equal relationship. 01063 /// 01064 /// \returns true if *this <= RHS when considered unsigned. 01065 bool ule(uint64_t RHS) const { return ule(APInt(getBitWidth(), RHS)); } 01066 01067 /// \brief Signed less or equal comparison 01068 /// 01069 /// Regards both *this and RHS as signed quantities and compares them for 01070 /// validity of the less-or-equal relationship. 01071 /// 01072 /// \returns true if *this <= RHS when both are considered signed. 01073 bool sle(const APInt &RHS) const { return slt(RHS) || eq(RHS); } 01074 01075 /// \brief Signed less or equal comparison 01076 /// 01077 /// Regards both *this as a signed quantity and compares it with RHS for the 01078 /// validity of the less-or-equal relationship. 01079 /// 01080 /// \returns true if *this <= RHS when considered signed. 01081 bool sle(uint64_t RHS) const { return sle(APInt(getBitWidth(), RHS)); } 01082 01083 /// \brief Unsigned greather than comparison 01084 /// 01085 /// Regards both *this and RHS as unsigned quantities and compares them for 01086 /// the validity of the greater-than relationship. 01087 /// 01088 /// \returns true if *this > RHS when both are considered unsigned. 01089 bool ugt(const APInt &RHS) const { return !ult(RHS) && !eq(RHS); } 01090 01091 /// \brief Unsigned greater than comparison 01092 /// 01093 /// Regards both *this as an unsigned quantity and compares it with RHS for 01094 /// the validity of the greater-than relationship. 01095 /// 01096 /// \returns true if *this > RHS when considered unsigned. 01097 bool ugt(uint64_t RHS) const { return ugt(APInt(getBitWidth(), RHS)); } 01098 01099 /// \brief Signed greather than comparison 01100 /// 01101 /// Regards both *this and RHS as signed quantities and compares them for the 01102 /// validity of the greater-than relationship. 01103 /// 01104 /// \returns true if *this > RHS when both are considered signed. 01105 bool sgt(const APInt &RHS) const { return !slt(RHS) && !eq(RHS); } 01106 01107 /// \brief Signed greater than comparison 01108 /// 01109 /// Regards both *this as a signed quantity and compares it with RHS for 01110 /// the validity of the greater-than relationship. 01111 /// 01112 /// \returns true if *this > RHS when considered signed. 01113 bool sgt(uint64_t RHS) const { return sgt(APInt(getBitWidth(), RHS)); } 01114 01115 /// \brief Unsigned greater or equal comparison 01116 /// 01117 /// Regards both *this and RHS as unsigned quantities and compares them for 01118 /// validity of the greater-or-equal relationship. 01119 /// 01120 /// \returns true if *this >= RHS when both are considered unsigned. 01121 bool uge(const APInt &RHS) const { return !ult(RHS); } 01122 01123 /// \brief Unsigned greater or equal comparison 01124 /// 01125 /// Regards both *this as an unsigned quantity and compares it with RHS for 01126 /// the validity of the greater-or-equal relationship. 01127 /// 01128 /// \returns true if *this >= RHS when considered unsigned. 01129 bool uge(uint64_t RHS) const { return uge(APInt(getBitWidth(), RHS)); } 01130 01131 /// \brief Signed greather or equal comparison 01132 /// 01133 /// Regards both *this and RHS as signed quantities and compares them for 01134 /// validity of the greater-or-equal relationship. 01135 /// 01136 /// \returns true if *this >= RHS when both are considered signed. 01137 bool sge(const APInt &RHS) const { return !slt(RHS); } 01138 01139 /// \brief Signed greater or equal comparison 01140 /// 01141 /// Regards both *this as a signed quantity and compares it with RHS for 01142 /// the validity of the greater-or-equal relationship. 01143 /// 01144 /// \returns true if *this >= RHS when considered signed. 01145 bool sge(uint64_t RHS) const { return sge(APInt(getBitWidth(), RHS)); } 01146 01147 /// This operation tests if there are any pairs of corresponding bits 01148 /// between this APInt and RHS that are both set. 01149 bool intersects(const APInt &RHS) const { return (*this & RHS) != 0; } 01150 01151 /// @} 01152 /// \name Resizing Operators 01153 /// @{ 01154 01155 /// \brief Truncate to new width. 01156 /// 01157 /// Truncate the APInt to a specified width. It is an error to specify a width 01158 /// that is greater than or equal to the current width. 01159 APInt LLVM_ATTRIBUTE_UNUSED_RESULT trunc(unsigned width) const; 01160 01161 /// \brief Sign extend to a new width. 01162 /// 01163 /// This operation sign extends the APInt to a new width. If the high order 01164 /// bit is set, the fill on the left will be done with 1 bits, otherwise zero. 01165 /// It is an error to specify a width that is less than or equal to the 01166 /// current width. 01167 APInt LLVM_ATTRIBUTE_UNUSED_RESULT sext(unsigned width) const; 01168 01169 /// \brief Zero extend to a new width. 01170 /// 01171 /// This operation zero extends the APInt to a new width. The high order bits 01172 /// are filled with 0 bits. It is an error to specify a width that is less 01173 /// than or equal to the current width. 01174 APInt LLVM_ATTRIBUTE_UNUSED_RESULT zext(unsigned width) const; 01175 01176 /// \brief Sign extend or truncate to width 01177 /// 01178 /// Make this APInt have the bit width given by \p width. The value is sign 01179 /// extended, truncated, or left alone to make it that width. 01180 APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrTrunc(unsigned width) const; 01181 01182 /// \brief Zero extend or truncate to width 01183 /// 01184 /// Make this APInt have the bit width given by \p width. The value is zero 01185 /// extended, truncated, or left alone to make it that width. 01186 APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrTrunc(unsigned width) const; 01187 01188 /// \brief Sign extend or truncate to width 01189 /// 01190 /// Make this APInt have the bit width given by \p width. The value is sign 01191 /// extended, or left alone to make it that width. 01192 APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrSelf(unsigned width) const; 01193 01194 /// \brief Zero extend or truncate to width 01195 /// 01196 /// Make this APInt have the bit width given by \p width. The value is zero 01197 /// extended, or left alone to make it that width. 01198 APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrSelf(unsigned width) const; 01199 01200 /// @} 01201 /// \name Bit Manipulation Operators 01202 /// @{ 01203 01204 /// \brief Set every bit to 1. 01205 void setAllBits() { 01206 if (isSingleWord()) 01207 VAL = UINT64_MAX; 01208 else { 01209 // Set all the bits in all the words. 01210 for (unsigned i = 0; i < getNumWords(); ++i) 01211 pVal[i] = UINT64_MAX; 01212 } 01213 // Clear the unused ones 01214 clearUnusedBits(); 01215 } 01216 01217 /// \brief Set a given bit to 1. 01218 /// 01219 /// Set the given bit to 1 whose position is given as "bitPosition". 01220 void setBit(unsigned bitPosition); 01221 01222 /// \brief Set every bit to 0. 01223 void clearAllBits() { 01224 if (isSingleWord()) 01225 VAL = 0; 01226 else 01227 memset(pVal, 0, getNumWords() * APINT_WORD_SIZE); 01228 } 01229 01230 /// \brief Set a given bit to 0. 01231 /// 01232 /// Set the given bit to 0 whose position is given as "bitPosition". 01233 void clearBit(unsigned bitPosition); 01234 01235 /// \brief Toggle every bit to its opposite value. 01236 void flipAllBits() { 01237 if (isSingleWord()) 01238 VAL ^= UINT64_MAX; 01239 else { 01240 for (unsigned i = 0; i < getNumWords(); ++i) 01241 pVal[i] ^= UINT64_MAX; 01242 } 01243 clearUnusedBits(); 01244 } 01245 01246 /// \brief Toggles a given bit to its opposite value. 01247 /// 01248 /// Toggle a given bit to its opposite value whose position is given 01249 /// as "bitPosition". 01250 void flipBit(unsigned bitPosition); 01251 01252 /// @} 01253 /// \name Value Characterization Functions 01254 /// @{ 01255 01256 /// \brief Return the number of bits in the APInt. 01257 unsigned getBitWidth() const { return BitWidth; } 01258 01259 /// \brief Get the number of words. 01260 /// 01261 /// Here one word's bitwidth equals to that of uint64_t. 01262 /// 01263 /// \returns the number of words to hold the integer value of this APInt. 01264 unsigned getNumWords() const { return getNumWords(BitWidth); } 01265 01266 /// \brief Get the number of words. 01267 /// 01268 /// *NOTE* Here one word's bitwidth equals to that of uint64_t. 01269 /// 01270 /// \returns the number of words to hold the integer value with a given bit 01271 /// width. 01272 static unsigned getNumWords(unsigned BitWidth) { 01273 return ((uint64_t)BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; 01274 } 01275 01276 /// \brief Compute the number of active bits in the value 01277 /// 01278 /// This function returns the number of active bits which is defined as the 01279 /// bit width minus the number of leading zeros. This is used in several 01280 /// computations to see how "wide" the value is. 01281 unsigned getActiveBits() const { return BitWidth - countLeadingZeros(); } 01282 01283 /// \brief Compute the number of active words in the value of this APInt. 01284 /// 01285 /// This is used in conjunction with getActiveData to extract the raw value of 01286 /// the APInt. 01287 unsigned getActiveWords() const { 01288 unsigned numActiveBits = getActiveBits(); 01289 return numActiveBits ? whichWord(numActiveBits - 1) + 1 : 1; 01290 } 01291 01292 /// \brief Get the minimum bit size for this signed APInt 01293 /// 01294 /// Computes the minimum bit width for this APInt while considering it to be a 01295 /// signed (and probably negative) value. If the value is not negative, this 01296 /// function returns the same value as getActiveBits()+1. Otherwise, it 01297 /// returns the smallest bit width that will retain the negative value. For 01298 /// example, -1 can be written as 0b1 or 0xFFFFFFFFFF. 0b1 is shorter and so 01299 /// for -1, this function will always return 1. 01300 unsigned getMinSignedBits() const { 01301 if (isNegative()) 01302 return BitWidth - countLeadingOnes() + 1; 01303 return getActiveBits() + 1; 01304 } 01305 01306 /// \brief Get zero extended value 01307 /// 01308 /// This method attempts to return the value of this APInt as a zero extended 01309 /// uint64_t. The bitwidth must be <= 64 or the value must fit within a 01310 /// uint64_t. Otherwise an assertion will result. 01311 uint64_t getZExtValue() const { 01312 if (isSingleWord()) 01313 return VAL; 01314 assert(getActiveBits() <= 64 && "Too many bits for uint64_t"); 01315 return pVal[0]; 01316 } 01317 01318 /// \brief Get sign extended value 01319 /// 01320 /// This method attempts to return the value of this APInt as a sign extended 01321 /// int64_t. The bit width must be <= 64 or the value must fit within an 01322 /// int64_t. Otherwise an assertion will result. 01323 int64_t getSExtValue() const { 01324 if (isSingleWord()) 01325 return int64_t(VAL << (APINT_BITS_PER_WORD - BitWidth)) >> 01326 (APINT_BITS_PER_WORD - BitWidth); 01327 assert(getMinSignedBits() <= 64 && "Too many bits for int64_t"); 01328 return int64_t(pVal[0]); 01329 } 01330 01331 /// \brief Get bits required for string value. 01332 /// 01333 /// This method determines how many bits are required to hold the APInt 01334 /// equivalent of the string given by \p str. 01335 static unsigned getBitsNeeded(StringRef str, uint8_t radix); 01336 01337 /// \brief The APInt version of the countLeadingZeros functions in 01338 /// MathExtras.h. 01339 /// 01340 /// It counts the number of zeros from the most significant bit to the first 01341 /// one bit. 01342 /// 01343 /// \returns BitWidth if the value is zero, otherwise returns the number of 01344 /// zeros from the most significant bit to the first one bits. 01345 unsigned countLeadingZeros() const { 01346 if (isSingleWord()) { 01347 unsigned unusedBits = APINT_BITS_PER_WORD - BitWidth; 01348 return llvm::countLeadingZeros(VAL) - unusedBits; 01349 } 01350 return countLeadingZerosSlowCase(); 01351 } 01352 01353 /// \brief Count the number of leading one bits. 01354 /// 01355 /// This function is an APInt version of the countLeadingOnes_{32,64} 01356 /// functions in MathExtras.h. It counts the number of ones from the most 01357 /// significant bit to the first zero bit. 01358 /// 01359 /// \returns 0 if the high order bit is not set, otherwise returns the number 01360 /// of 1 bits from the most significant to the least 01361 unsigned countLeadingOnes() const; 01362 01363 /// Computes the number of leading bits of this APInt that are equal to its 01364 /// sign bit. 01365 unsigned getNumSignBits() const { 01366 return isNegative() ? countLeadingOnes() : countLeadingZeros(); 01367 } 01368 01369 /// \brief Count the number of trailing zero bits. 01370 /// 01371 /// This function is an APInt version of the countTrailingZeros_{32,64} 01372 /// functions in MathExtras.h. It counts the number of zeros from the least 01373 /// significant bit to the first set bit. 01374 /// 01375 /// \returns BitWidth if the value is zero, otherwise returns the number of 01376 /// zeros from the least significant bit to the first one bit. 01377 unsigned countTrailingZeros() const; 01378 01379 /// \brief Count the number of trailing one bits. 01380 /// 01381 /// This function is an APInt version of the countTrailingOnes_{32,64} 01382 /// functions in MathExtras.h. It counts the number of ones from the least 01383 /// significant bit to the first zero bit. 01384 /// 01385 /// \returns BitWidth if the value is all ones, otherwise returns the number 01386 /// of ones from the least significant bit to the first zero bit. 01387 unsigned countTrailingOnes() const { 01388 if (isSingleWord()) 01389 return CountTrailingOnes_64(VAL); 01390 return countTrailingOnesSlowCase(); 01391 } 01392 01393 /// \brief Count the number of bits set. 01394 /// 01395 /// This function is an APInt version of the countPopulation_{32,64} functions 01396 /// in MathExtras.h. It counts the number of 1 bits in the APInt value. 01397 /// 01398 /// \returns 0 if the value is zero, otherwise returns the number of set bits. 01399 unsigned countPopulation() const { 01400 if (isSingleWord()) 01401 return CountPopulation_64(VAL); 01402 return countPopulationSlowCase(); 01403 } 01404 01405 /// @} 01406 /// \name Conversion Functions 01407 /// @{ 01408 void print(raw_ostream &OS, bool isSigned) const; 01409 01410 /// Converts an APInt to a string and append it to Str. Str is commonly a 01411 /// SmallString. 01412 void toString(SmallVectorImpl<char> &Str, unsigned Radix, bool Signed, 01413 bool formatAsCLiteral = false) const; 01414 01415 /// Considers the APInt to be unsigned and converts it into a string in the 01416 /// radix given. The radix can be 2, 8, 10 16, or 36. 01417 void toStringUnsigned(SmallVectorImpl<char> &Str, unsigned Radix = 10) const { 01418 toString(Str, Radix, false, false); 01419 } 01420 01421 /// Considers the APInt to be signed and converts it into a string in the 01422 /// radix given. The radix can be 2, 8, 10, 16, or 36. 01423 void toStringSigned(SmallVectorImpl<char> &Str, unsigned Radix = 10) const { 01424 toString(Str, Radix, true, false); 01425 } 01426 01427 /// \brief Return the APInt as a std::string. 01428 /// 01429 /// Note that this is an inefficient method. It is better to pass in a 01430 /// SmallVector/SmallString to the methods above to avoid thrashing the heap 01431 /// for the string. 01432 std::string toString(unsigned Radix, bool Signed) const; 01433 01434 /// \returns a byte-swapped representation of this APInt Value. 01435 APInt LLVM_ATTRIBUTE_UNUSED_RESULT byteSwap() const; 01436 01437 /// \brief Converts this APInt to a double value. 01438 double roundToDouble(bool isSigned) const; 01439 01440 /// \brief Converts this unsigned APInt to a double value. 01441 double roundToDouble() const { return roundToDouble(false); } 01442 01443 /// \brief Converts this signed APInt to a double value. 01444 double signedRoundToDouble() const { return roundToDouble(true); } 01445 01446 /// \brief Converts APInt bits to a double 01447 /// 01448 /// The conversion does not do a translation from integer to double, it just 01449 /// re-interprets the bits as a double. Note that it is valid to do this on 01450 /// any bit width. Exactly 64 bits will be translated. 01451 double bitsToDouble() const { 01452 union { 01453 uint64_t I; 01454 double D; 01455 } T; 01456 T.I = (isSingleWord() ? VAL : pVal[0]); 01457 return T.D; 01458 } 01459 01460 /// \brief Converts APInt bits to a double 01461 /// 01462 /// The conversion does not do a translation from integer to float, it just 01463 /// re-interprets the bits as a float. Note that it is valid to do this on 01464 /// any bit width. Exactly 32 bits will be translated. 01465 float bitsToFloat() const { 01466 union { 01467 unsigned I; 01468 float F; 01469 } T; 01470 T.I = unsigned((isSingleWord() ? VAL : pVal[0])); 01471 return T.F; 01472 } 01473 01474 /// \brief Converts a double to APInt bits. 01475 /// 01476 /// The conversion does not do a translation from double to integer, it just 01477 /// re-interprets the bits of the double. 01478 static APInt LLVM_ATTRIBUTE_UNUSED_RESULT doubleToBits(double V) { 01479 union { 01480 uint64_t I; 01481 double D; 01482 } T; 01483 T.D = V; 01484 return APInt(sizeof T * CHAR_BIT, T.I); 01485 } 01486 01487 /// \brief Converts a float to APInt bits. 01488 /// 01489 /// The conversion does not do a translation from float to integer, it just 01490 /// re-interprets the bits of the float. 01491 static APInt LLVM_ATTRIBUTE_UNUSED_RESULT floatToBits(float V) { 01492 union { 01493 unsigned I; 01494 float F; 01495 } T; 01496 T.F = V; 01497 return APInt(sizeof T * CHAR_BIT, T.I); 01498 } 01499 01500 /// @} 01501 /// \name Mathematics Operations 01502 /// @{ 01503 01504 /// \returns the floor log base 2 of this APInt. 01505 unsigned logBase2() const { return BitWidth - 1 - countLeadingZeros(); } 01506 01507 /// \returns the ceil log base 2 of this APInt. 01508 unsigned ceilLogBase2() const { 01509 return BitWidth - (*this - 1).countLeadingZeros(); 01510 } 01511 01512 /// \returns the nearest log base 2 of this APInt. Ties round up. 01513 /// 01514 /// NOTE: When we have a BitWidth of 1, we define: 01515 /// 01516 /// log2(0) = UINT32_MAX 01517 /// log2(1) = 0 01518 /// 01519 /// to get around any mathematical concerns resulting from 01520 /// referencing 2 in a space where 2 does no exist. 01521 unsigned nearestLogBase2() const { 01522 // Special case when we have a bitwidth of 1. If VAL is 1, then we 01523 // get 0. If VAL is 0, we get UINT64_MAX which gets truncated to 01524 // UINT32_MAX. 01525 if (BitWidth == 1) 01526 return VAL - 1; 01527 01528 // Handle the zero case. 01529 if (!getBoolValue()) 01530 return UINT32_MAX; 01531 01532 // The non-zero case is handled by computing: 01533 // 01534 // nearestLogBase2(x) = logBase2(x) + x[logBase2(x)-1]. 01535 // 01536 // where x[i] is referring to the value of the ith bit of x. 01537 unsigned lg = logBase2(); 01538 return lg + unsigned((*this)[lg - 1]); 01539 } 01540 01541 /// \returns the log base 2 of this APInt if its an exact power of two, -1 01542 /// otherwise 01543 int32_t exactLogBase2() const { 01544 if (!isPowerOf2()) 01545 return -1; 01546 return logBase2(); 01547 } 01548 01549 /// \brief Compute the square root 01550 APInt LLVM_ATTRIBUTE_UNUSED_RESULT sqrt() const; 01551 01552 /// \brief Get the absolute value; 01553 /// 01554 /// If *this is < 0 then return -(*this), otherwise *this; 01555 APInt LLVM_ATTRIBUTE_UNUSED_RESULT abs() const { 01556 if (isNegative()) 01557 return -(*this); 01558 return *this; 01559 } 01560 01561 /// \returns the multiplicative inverse for a given modulo. 01562 APInt multiplicativeInverse(const APInt &modulo) const; 01563 01564 /// @} 01565 /// \name Support for division by constant 01566 /// @{ 01567 01568 /// Calculate the magic number for signed division by a constant. 01569 struct ms; 01570 ms magic() const; 01571 01572 /// Calculate the magic number for unsigned division by a constant. 01573 struct mu; 01574 mu magicu(unsigned LeadingZeros = 0) const; 01575 01576 /// @} 01577 /// \name Building-block Operations for APInt and APFloat 01578 /// @{ 01579 01580 // These building block operations operate on a representation of arbitrary 01581 // precision, two's-complement, bignum integer values. They should be 01582 // sufficient to implement APInt and APFloat bignum requirements. Inputs are 01583 // generally a pointer to the base of an array of integer parts, representing 01584 // an unsigned bignum, and a count of how many parts there are. 01585 01586 /// Sets the least significant part of a bignum to the input value, and zeroes 01587 /// out higher parts. 01588 static void tcSet(integerPart *, integerPart, unsigned int); 01589 01590 /// Assign one bignum to another. 01591 static void tcAssign(integerPart *, const integerPart *, unsigned int); 01592 01593 /// Returns true if a bignum is zero, false otherwise. 01594 static bool tcIsZero(const integerPart *, unsigned int); 01595 01596 /// Extract the given bit of a bignum; returns 0 or 1. Zero-based. 01597 static int tcExtractBit(const integerPart *, unsigned int bit); 01598 01599 /// Copy the bit vector of width srcBITS from SRC, starting at bit srcLSB, to 01600 /// DST, of dstCOUNT parts, such that the bit srcLSB becomes the least 01601 /// significant bit of DST. All high bits above srcBITS in DST are 01602 /// zero-filled. 01603 static void tcExtract(integerPart *, unsigned int dstCount, 01604 const integerPart *, unsigned int srcBits, 01605 unsigned int srcLSB); 01606 01607 /// Set the given bit of a bignum. Zero-based. 01608 static void tcSetBit(integerPart *, unsigned int bit); 01609 01610 /// Clear the given bit of a bignum. Zero-based. 01611 static void tcClearBit(integerPart *, unsigned int bit); 01612 01613 /// Returns the bit number of the least or most significant set bit of a 01614 /// number. If the input number has no bits set -1U is returned. 01615 static unsigned int tcLSB(const integerPart *, unsigned int); 01616 static unsigned int tcMSB(const integerPart *parts, unsigned int n); 01617 01618 /// Negate a bignum in-place. 01619 static void tcNegate(integerPart *, unsigned int); 01620 01621 /// DST += RHS + CARRY where CARRY is zero or one. Returns the carry flag. 01622 static integerPart tcAdd(integerPart *, const integerPart *, 01623 integerPart carry, unsigned); 01624 01625 /// DST -= RHS + CARRY where CARRY is zero or one. Returns the carry flag. 01626 static integerPart tcSubtract(integerPart *, const integerPart *, 01627 integerPart carry, unsigned); 01628 01629 /// DST += SRC * MULTIPLIER + PART if add is true 01630 /// DST = SRC * MULTIPLIER + PART if add is false 01631 /// 01632 /// Requires 0 <= DSTPARTS <= SRCPARTS + 1. If DST overlaps SRC they must 01633 /// start at the same point, i.e. DST == SRC. 01634 /// 01635 /// If DSTPARTS == SRC_PARTS + 1 no overflow occurs and zero is returned. 01636 /// Otherwise DST is filled with the least significant DSTPARTS parts of the 01637 /// result, and if all of the omitted higher parts were zero return zero, 01638 /// otherwise overflow occurred and return one. 01639 static int tcMultiplyPart(integerPart *dst, const integerPart *src, 01640 integerPart multiplier, integerPart carry, 01641 unsigned int srcParts, unsigned int dstParts, 01642 bool add); 01643 01644 /// DST = LHS * RHS, where DST has the same width as the operands and is 01645 /// filled with the least significant parts of the result. Returns one if 01646 /// overflow occurred, otherwise zero. DST must be disjoint from both 01647 /// operands. 01648 static int tcMultiply(integerPart *, const integerPart *, const integerPart *, 01649 unsigned); 01650 01651 /// DST = LHS * RHS, where DST has width the sum of the widths of the 01652 /// operands. No overflow occurs. DST must be disjoint from both 01653 /// operands. Returns the number of parts required to hold the result. 01654 static unsigned int tcFullMultiply(integerPart *, const integerPart *, 01655 const integerPart *, unsigned, unsigned); 01656 01657 /// If RHS is zero LHS and REMAINDER are left unchanged, return one. 01658 /// Otherwise set LHS to LHS / RHS with the fractional part discarded, set 01659 /// REMAINDER to the remainder, return zero. i.e. 01660 /// 01661 /// OLD_LHS = RHS * LHS + REMAINDER 01662 /// 01663 /// SCRATCH is a bignum of the same size as the operands and result for use by 01664 /// the routine; its contents need not be initialized and are destroyed. LHS, 01665 /// REMAINDER and SCRATCH must be distinct. 01666 static int tcDivide(integerPart *lhs, const integerPart *rhs, 01667 integerPart *remainder, integerPart *scratch, 01668 unsigned int parts); 01669 01670 /// Shift a bignum left COUNT bits. Shifted in bits are zero. There are no 01671 /// restrictions on COUNT. 01672 static void tcShiftLeft(integerPart *, unsigned int parts, 01673 unsigned int count); 01674 01675 /// Shift a bignum right COUNT bits. Shifted in bits are zero. There are no 01676 /// restrictions on COUNT. 01677 static void tcShiftRight(integerPart *, unsigned int parts, 01678 unsigned int count); 01679 01680 /// The obvious AND, OR and XOR and complement operations. 01681 static void tcAnd(integerPart *, const integerPart *, unsigned int); 01682 static void tcOr(integerPart *, const integerPart *, unsigned int); 01683 static void tcXor(integerPart *, const integerPart *, unsigned int); 01684 static void tcComplement(integerPart *, unsigned int); 01685 01686 /// Comparison (unsigned) of two bignums. 01687 static int tcCompare(const integerPart *, const integerPart *, unsigned int); 01688 01689 /// Increment a bignum in-place. Return the carry flag. 01690 static integerPart tcIncrement(integerPart *, unsigned int); 01691 01692 /// Decrement a bignum in-place. Return the borrow flag. 01693 static integerPart tcDecrement(integerPart *, unsigned int); 01694 01695 /// Set the least significant BITS and clear the rest. 01696 static void tcSetLeastSignificantBits(integerPart *, unsigned int, 01697 unsigned int bits); 01698 01699 /// \brief debug method 01700 void dump() const; 01701 01702 /// @} 01703 }; 01704 01705 /// Magic data for optimising signed division by a constant. 01706 struct APInt::ms { 01707 APInt m; ///< magic number 01708 unsigned s; ///< shift amount 01709 }; 01710 01711 /// Magic data for optimising unsigned division by a constant. 01712 struct APInt::mu { 01713 APInt m; ///< magic number 01714 bool a; ///< add indicator 01715 unsigned s; ///< shift amount 01716 }; 01717 01718 inline bool operator==(uint64_t V1, const APInt &V2) { return V2 == V1; } 01719 01720 inline bool operator!=(uint64_t V1, const APInt &V2) { return V2 != V1; } 01721 01722 inline raw_ostream &operator<<(raw_ostream &OS, const APInt &I) { 01723 I.print(OS, true); 01724 return OS; 01725 } 01726 01727 namespace APIntOps { 01728 01729 /// \brief Determine the smaller of two APInts considered to be signed. 01730 inline APInt smin(const APInt &A, const APInt &B) { return A.slt(B) ? A : B; } 01731 01732 /// \brief Determine the larger of two APInts considered to be signed. 01733 inline APInt smax(const APInt &A, const APInt &B) { return A.sgt(B) ? A : B; } 01734 01735 /// \brief Determine the smaller of two APInts considered to be signed. 01736 inline APInt umin(const APInt &A, const APInt &B) { return A.ult(B) ? A : B; } 01737 01738 /// \brief Determine the larger of two APInts considered to be unsigned. 01739 inline APInt umax(const APInt &A, const APInt &B) { return A.ugt(B) ? A : B; } 01740 01741 /// \brief Check if the specified APInt has a N-bits unsigned integer value. 01742 inline bool isIntN(unsigned N, const APInt &APIVal) { return APIVal.isIntN(N); } 01743 01744 /// \brief Check if the specified APInt has a N-bits signed integer value. 01745 inline bool isSignedIntN(unsigned N, const APInt &APIVal) { 01746 return APIVal.isSignedIntN(N); 01747 } 01748 01749 /// \returns true if the argument APInt value is a sequence of ones starting at 01750 /// the least significant bit with the remainder zero. 01751 inline bool isMask(unsigned numBits, const APInt &APIVal) { 01752 return numBits <= APIVal.getBitWidth() && 01753 APIVal == APInt::getLowBitsSet(APIVal.getBitWidth(), numBits); 01754 } 01755 01756 /// \brief Return true if the argument APInt value contains a sequence of ones 01757 /// with the remainder zero. 01758 inline bool isShiftedMask(unsigned numBits, const APInt &APIVal) { 01759 return isMask(numBits, (APIVal - APInt(numBits, 1)) | APIVal); 01760 } 01761 01762 /// \brief Returns a byte-swapped representation of the specified APInt Value. 01763 inline APInt byteSwap(const APInt &APIVal) { return APIVal.byteSwap(); } 01764 01765 /// \brief Returns the floor log base 2 of the specified APInt value. 01766 inline unsigned logBase2(const APInt &APIVal) { return APIVal.logBase2(); } 01767 01768 /// \brief Compute GCD of two APInt values. 01769 /// 01770 /// This function returns the greatest common divisor of the two APInt values 01771 /// using Euclid's algorithm. 01772 /// 01773 /// \returns the greatest common divisor of Val1 and Val2 01774 APInt GreatestCommonDivisor(const APInt &Val1, const APInt &Val2); 01775 01776 /// \brief Converts the given APInt to a double value. 01777 /// 01778 /// Treats the APInt as an unsigned value for conversion purposes. 01779 inline double RoundAPIntToDouble(const APInt &APIVal) { 01780 return APIVal.roundToDouble(); 01781 } 01782 01783 /// \brief Converts the given APInt to a double value. 01784 /// 01785 /// Treats the APInt as a signed value for conversion purposes. 01786 inline double RoundSignedAPIntToDouble(const APInt &APIVal) { 01787 return APIVal.signedRoundToDouble(); 01788 } 01789 01790 /// \brief Converts the given APInt to a float vlalue. 01791 inline float RoundAPIntToFloat(const APInt &APIVal) { 01792 return float(RoundAPIntToDouble(APIVal)); 01793 } 01794 01795 /// \brief Converts the given APInt to a float value. 01796 /// 01797 /// Treast the APInt as a signed value for conversion purposes. 01798 inline float RoundSignedAPIntToFloat(const APInt &APIVal) { 01799 return float(APIVal.signedRoundToDouble()); 01800 } 01801 01802 /// \brief Converts the given double value into a APInt. 01803 /// 01804 /// This function convert a double value to an APInt value. 01805 APInt RoundDoubleToAPInt(double Double, unsigned width); 01806 01807 /// \brief Converts a float value into a APInt. 01808 /// 01809 /// Converts a float value into an APInt value. 01810 inline APInt RoundFloatToAPInt(float Float, unsigned width) { 01811 return RoundDoubleToAPInt(double(Float), width); 01812 } 01813 01814 /// \brief Arithmetic right-shift function. 01815 /// 01816 /// Arithmetic right-shift the APInt by shiftAmt. 01817 inline APInt ashr(const APInt &LHS, unsigned shiftAmt) { 01818 return LHS.ashr(shiftAmt); 01819 } 01820 01821 /// \brief Logical right-shift function. 01822 /// 01823 /// Logical right-shift the APInt by shiftAmt. 01824 inline APInt lshr(const APInt &LHS, unsigned shiftAmt) { 01825 return LHS.lshr(shiftAmt); 01826 } 01827 01828 /// \brief Left-shift function. 01829 /// 01830 /// Left-shift the APInt by shiftAmt. 01831 inline APInt shl(const APInt &LHS, unsigned shiftAmt) { 01832 return LHS.shl(shiftAmt); 01833 } 01834 01835 /// \brief Signed division function for APInt. 01836 /// 01837 /// Signed divide APInt LHS by APInt RHS. 01838 inline APInt sdiv(const APInt &LHS, const APInt &RHS) { return LHS.sdiv(RHS); } 01839 01840 /// \brief Unsigned division function for APInt. 01841 /// 01842 /// Unsigned divide APInt LHS by APInt RHS. 01843 inline APInt udiv(const APInt &LHS, const APInt &RHS) { return LHS.udiv(RHS); } 01844 01845 /// \brief Function for signed remainder operation. 01846 /// 01847 /// Signed remainder operation on APInt. 01848 inline APInt srem(const APInt &LHS, const APInt &RHS) { return LHS.srem(RHS); } 01849 01850 /// \brief Function for unsigned remainder operation. 01851 /// 01852 /// Unsigned remainder operation on APInt. 01853 inline APInt urem(const APInt &LHS, const APInt &RHS) { return LHS.urem(RHS); } 01854 01855 /// \brief Function for multiplication operation. 01856 /// 01857 /// Performs multiplication on APInt values. 01858 inline APInt mul(const APInt &LHS, const APInt &RHS) { return LHS * RHS; } 01859 01860 /// \brief Function for addition operation. 01861 /// 01862 /// Performs addition on APInt values. 01863 inline APInt add(const APInt &LHS, const APInt &RHS) { return LHS + RHS; } 01864 01865 /// \brief Function for subtraction operation. 01866 /// 01867 /// Performs subtraction on APInt values. 01868 inline APInt sub(const APInt &LHS, const APInt &RHS) { return LHS - RHS; } 01869 01870 /// \brief Bitwise AND function for APInt. 01871 /// 01872 /// Performs bitwise AND operation on APInt LHS and 01873 /// APInt RHS. 01874 inline APInt And(const APInt &LHS, const APInt &RHS) { return LHS & RHS; } 01875 01876 /// \brief Bitwise OR function for APInt. 01877 /// 01878 /// Performs bitwise OR operation on APInt LHS and APInt RHS. 01879 inline APInt Or(const APInt &LHS, const APInt &RHS) { return LHS | RHS; } 01880 01881 /// \brief Bitwise XOR function for APInt. 01882 /// 01883 /// Performs bitwise XOR operation on APInt. 01884 inline APInt Xor(const APInt &LHS, const APInt &RHS) { return LHS ^ RHS; } 01885 01886 /// \brief Bitwise complement function. 01887 /// 01888 /// Performs a bitwise complement operation on APInt. 01889 inline APInt Not(const APInt &APIVal) { return ~APIVal; } 01890 01891 } // End of APIntOps namespace 01892 01893 // See friend declaration above. This additional declaration is required in 01894 // order to compile LLVM with IBM xlC compiler. 01895 hash_code hash_value(const APInt &Arg); 01896 } // End of llvm namespace 01897 01898 #endif