LLVM API Documentation

APInt.h
Go to the documentation of this file.
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