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(const APInt &Amt, bool &Overflow) const;
00949   APInt ushl_ov(const APInt &Amt, bool &Overflow) const;
00950 
00951   /// \brief Array-indexing support.
00952   ///
00953   /// \returns the bit value at bitPosition
00954   bool operator[](unsigned bitPosition) const {
00955     assert(bitPosition < getBitWidth() && "Bit position out of bounds!");
00956     return (maskBit(bitPosition) &
00957             (isSingleWord() ? VAL : pVal[whichWord(bitPosition)])) !=
00958            0;
00959   }
00960 
00961   /// @}
00962   /// \name Comparison Operators
00963   /// @{
00964 
00965   /// \brief Equality operator.
00966   ///
00967   /// Compares this APInt with RHS for the validity of the equality
00968   /// relationship.
00969   bool operator==(const APInt &RHS) const {
00970     assert(BitWidth == RHS.BitWidth && "Comparison requires equal bit widths");
00971     if (isSingleWord())
00972       return VAL == RHS.VAL;
00973     return EqualSlowCase(RHS);
00974   }
00975 
00976   /// \brief Equality operator.
00977   ///
00978   /// Compares this APInt with a uint64_t for the validity of the equality
00979   /// relationship.
00980   ///
00981   /// \returns true if *this == Val
00982   bool operator==(uint64_t Val) const {
00983     if (isSingleWord())
00984       return VAL == Val;
00985     return EqualSlowCase(Val);
00986   }
00987 
00988   /// \brief Equality comparison.
00989   ///
00990   /// Compares this APInt with RHS for the validity of the equality
00991   /// relationship.
00992   ///
00993   /// \returns true if *this == Val
00994   bool eq(const APInt &RHS) const { return (*this) == RHS; }
00995 
00996   /// \brief Inequality operator.
00997   ///
00998   /// Compares this APInt with RHS for the validity of the inequality
00999   /// relationship.
01000   ///
01001   /// \returns true if *this != Val
01002   bool operator!=(const APInt &RHS) const { return !((*this) == RHS); }
01003 
01004   /// \brief Inequality operator.
01005   ///
01006   /// Compares this APInt with a uint64_t for the validity of the inequality
01007   /// relationship.
01008   ///
01009   /// \returns true if *this != Val
01010   bool operator!=(uint64_t Val) const { return !((*this) == Val); }
01011 
01012   /// \brief Inequality comparison
01013   ///
01014   /// Compares this APInt with RHS for the validity of the inequality
01015   /// relationship.
01016   ///
01017   /// \returns true if *this != Val
01018   bool ne(const APInt &RHS) const { return !((*this) == RHS); }
01019 
01020   /// \brief Unsigned less than comparison
01021   ///
01022   /// Regards both *this and RHS as unsigned quantities and compares them for
01023   /// the validity of the less-than relationship.
01024   ///
01025   /// \returns true if *this < RHS when both are considered unsigned.
01026   bool ult(const APInt &RHS) const;
01027 
01028   /// \brief Unsigned less than comparison
01029   ///
01030   /// Regards both *this as an unsigned quantity and compares it with RHS for
01031   /// the validity of the less-than relationship.
01032   ///
01033   /// \returns true if *this < RHS when considered unsigned.
01034   bool ult(uint64_t RHS) const { return ult(APInt(getBitWidth(), RHS)); }
01035 
01036   /// \brief Signed less than comparison
01037   ///
01038   /// Regards both *this and RHS as signed quantities and compares them for
01039   /// validity of the less-than relationship.
01040   ///
01041   /// \returns true if *this < RHS when both are considered signed.
01042   bool slt(const APInt &RHS) const;
01043 
01044   /// \brief Signed less than comparison
01045   ///
01046   /// Regards both *this as a signed quantity and compares it with RHS for
01047   /// the validity of the less-than relationship.
01048   ///
01049   /// \returns true if *this < RHS when considered signed.
01050   bool slt(uint64_t RHS) const { return slt(APInt(getBitWidth(), RHS)); }
01051 
01052   /// \brief Unsigned less or equal comparison
01053   ///
01054   /// Regards both *this and RHS as unsigned quantities and compares them for
01055   /// validity of the less-or-equal relationship.
01056   ///
01057   /// \returns true if *this <= RHS when both are considered unsigned.
01058   bool ule(const APInt &RHS) const { return ult(RHS) || eq(RHS); }
01059 
01060   /// \brief Unsigned less or equal comparison
01061   ///
01062   /// Regards both *this as an unsigned quantity and compares it with RHS for
01063   /// the validity of the less-or-equal relationship.
01064   ///
01065   /// \returns true if *this <= RHS when considered unsigned.
01066   bool ule(uint64_t RHS) const { return ule(APInt(getBitWidth(), RHS)); }
01067 
01068   /// \brief Signed less or equal comparison
01069   ///
01070   /// Regards both *this and RHS as signed quantities and compares them for
01071   /// validity of the less-or-equal relationship.
01072   ///
01073   /// \returns true if *this <= RHS when both are considered signed.
01074   bool sle(const APInt &RHS) const { return slt(RHS) || eq(RHS); }
01075 
01076   /// \brief Signed less or equal comparison
01077   ///
01078   /// Regards both *this as a signed quantity and compares it with RHS for the
01079   /// validity of the less-or-equal relationship.
01080   ///
01081   /// \returns true if *this <= RHS when considered signed.
01082   bool sle(uint64_t RHS) const { return sle(APInt(getBitWidth(), RHS)); }
01083 
01084   /// \brief Unsigned greather than comparison
01085   ///
01086   /// Regards both *this and RHS as unsigned quantities and compares them for
01087   /// the validity of the greater-than relationship.
01088   ///
01089   /// \returns true if *this > RHS when both are considered unsigned.
01090   bool ugt(const APInt &RHS) const { return !ult(RHS) && !eq(RHS); }
01091 
01092   /// \brief Unsigned greater than comparison
01093   ///
01094   /// Regards both *this as an unsigned quantity and compares it with RHS for
01095   /// the validity of the greater-than relationship.
01096   ///
01097   /// \returns true if *this > RHS when considered unsigned.
01098   bool ugt(uint64_t RHS) const { return ugt(APInt(getBitWidth(), RHS)); }
01099 
01100   /// \brief Signed greather than comparison
01101   ///
01102   /// Regards both *this and RHS as signed quantities and compares them for the
01103   /// validity of the greater-than relationship.
01104   ///
01105   /// \returns true if *this > RHS when both are considered signed.
01106   bool sgt(const APInt &RHS) const { return !slt(RHS) && !eq(RHS); }
01107 
01108   /// \brief Signed greater than comparison
01109   ///
01110   /// Regards both *this as a signed quantity and compares it with RHS for
01111   /// the validity of the greater-than relationship.
01112   ///
01113   /// \returns true if *this > RHS when considered signed.
01114   bool sgt(uint64_t RHS) const { return sgt(APInt(getBitWidth(), RHS)); }
01115 
01116   /// \brief Unsigned greater or equal comparison
01117   ///
01118   /// Regards both *this and RHS as unsigned quantities and compares them for
01119   /// validity of the greater-or-equal relationship.
01120   ///
01121   /// \returns true if *this >= RHS when both are considered unsigned.
01122   bool uge(const APInt &RHS) const { return !ult(RHS); }
01123 
01124   /// \brief Unsigned greater or equal comparison
01125   ///
01126   /// Regards both *this as an unsigned quantity and compares it with RHS for
01127   /// the validity of the greater-or-equal relationship.
01128   ///
01129   /// \returns true if *this >= RHS when considered unsigned.
01130   bool uge(uint64_t RHS) const { return uge(APInt(getBitWidth(), RHS)); }
01131 
01132   /// \brief Signed greather or equal comparison
01133   ///
01134   /// Regards both *this and RHS as signed quantities and compares them for
01135   /// validity of the greater-or-equal relationship.
01136   ///
01137   /// \returns true if *this >= RHS when both are considered signed.
01138   bool sge(const APInt &RHS) const { return !slt(RHS); }
01139 
01140   /// \brief Signed greater or equal comparison
01141   ///
01142   /// Regards both *this as a signed quantity and compares it with RHS for
01143   /// the validity of the greater-or-equal relationship.
01144   ///
01145   /// \returns true if *this >= RHS when considered signed.
01146   bool sge(uint64_t RHS) const { return sge(APInt(getBitWidth(), RHS)); }
01147 
01148   /// This operation tests if there are any pairs of corresponding bits
01149   /// between this APInt and RHS that are both set.
01150   bool intersects(const APInt &RHS) const { return (*this & RHS) != 0; }
01151 
01152   /// @}
01153   /// \name Resizing Operators
01154   /// @{
01155 
01156   /// \brief Truncate to new width.
01157   ///
01158   /// Truncate the APInt to a specified width. It is an error to specify a width
01159   /// that is greater than or equal to the current width.
01160   APInt LLVM_ATTRIBUTE_UNUSED_RESULT trunc(unsigned width) const;
01161 
01162   /// \brief Sign extend to a new width.
01163   ///
01164   /// This operation sign extends the APInt to a new width. If the high order
01165   /// bit is set, the fill on the left will be done with 1 bits, otherwise zero.
01166   /// It is an error to specify a width that is less than or equal to the
01167   /// current width.
01168   APInt LLVM_ATTRIBUTE_UNUSED_RESULT sext(unsigned width) const;
01169 
01170   /// \brief Zero extend to a new width.
01171   ///
01172   /// This operation zero extends the APInt to a new width. The high order bits
01173   /// are filled with 0 bits.  It is an error to specify a width that is less
01174   /// than or equal to the current width.
01175   APInt LLVM_ATTRIBUTE_UNUSED_RESULT zext(unsigned width) const;
01176 
01177   /// \brief Sign extend or truncate to width
01178   ///
01179   /// Make this APInt have the bit width given by \p width. The value is sign
01180   /// extended, truncated, or left alone to make it that width.
01181   APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrTrunc(unsigned width) const;
01182 
01183   /// \brief Zero extend or truncate to width
01184   ///
01185   /// Make this APInt have the bit width given by \p width. The value is zero
01186   /// extended, truncated, or left alone to make it that width.
01187   APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrTrunc(unsigned width) const;
01188 
01189   /// \brief Sign extend or truncate to width
01190   ///
01191   /// Make this APInt have the bit width given by \p width. The value is sign
01192   /// extended, or left alone to make it that width.
01193   APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrSelf(unsigned width) const;
01194 
01195   /// \brief Zero extend or truncate to width
01196   ///
01197   /// Make this APInt have the bit width given by \p width. The value is zero
01198   /// extended, or left alone to make it that width.
01199   APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrSelf(unsigned width) const;
01200 
01201   /// @}
01202   /// \name Bit Manipulation Operators
01203   /// @{
01204 
01205   /// \brief Set every bit to 1.
01206   void setAllBits() {
01207     if (isSingleWord())
01208       VAL = UINT64_MAX;
01209     else {
01210       // Set all the bits in all the words.
01211       for (unsigned i = 0; i < getNumWords(); ++i)
01212         pVal[i] = UINT64_MAX;
01213     }
01214     // Clear the unused ones
01215     clearUnusedBits();
01216   }
01217 
01218   /// \brief Set a given bit to 1.
01219   ///
01220   /// Set the given bit to 1 whose position is given as "bitPosition".
01221   void setBit(unsigned bitPosition);
01222 
01223   /// \brief Set every bit to 0.
01224   void clearAllBits() {
01225     if (isSingleWord())
01226       VAL = 0;
01227     else
01228       memset(pVal, 0, getNumWords() * APINT_WORD_SIZE);
01229   }
01230 
01231   /// \brief Set a given bit to 0.
01232   ///
01233   /// Set the given bit to 0 whose position is given as "bitPosition".
01234   void clearBit(unsigned bitPosition);
01235 
01236   /// \brief Toggle every bit to its opposite value.
01237   void flipAllBits() {
01238     if (isSingleWord())
01239       VAL ^= UINT64_MAX;
01240     else {
01241       for (unsigned i = 0; i < getNumWords(); ++i)
01242         pVal[i] ^= UINT64_MAX;
01243     }
01244     clearUnusedBits();
01245   }
01246 
01247   /// \brief Toggles a given bit to its opposite value.
01248   ///
01249   /// Toggle a given bit to its opposite value whose position is given
01250   /// as "bitPosition".
01251   void flipBit(unsigned bitPosition);
01252 
01253   /// @}
01254   /// \name Value Characterization Functions
01255   /// @{
01256 
01257   /// \brief Return the number of bits in the APInt.
01258   unsigned getBitWidth() const { return BitWidth; }
01259 
01260   /// \brief Get the number of words.
01261   ///
01262   /// Here one word's bitwidth equals to that of uint64_t.
01263   ///
01264   /// \returns the number of words to hold the integer value of this APInt.
01265   unsigned getNumWords() const { return getNumWords(BitWidth); }
01266 
01267   /// \brief Get the number of words.
01268   ///
01269   /// *NOTE* Here one word's bitwidth equals to that of uint64_t.
01270   ///
01271   /// \returns the number of words to hold the integer value with a given bit
01272   /// width.
01273   static unsigned getNumWords(unsigned BitWidth) {
01274     return ((uint64_t)BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD;
01275   }
01276 
01277   /// \brief Compute the number of active bits in the value
01278   ///
01279   /// This function returns the number of active bits which is defined as the
01280   /// bit width minus the number of leading zeros. This is used in several
01281   /// computations to see how "wide" the value is.
01282   unsigned getActiveBits() const { return BitWidth - countLeadingZeros(); }
01283 
01284   /// \brief Compute the number of active words in the value of this APInt.
01285   ///
01286   /// This is used in conjunction with getActiveData to extract the raw value of
01287   /// the APInt.
01288   unsigned getActiveWords() const {
01289     unsigned numActiveBits = getActiveBits();
01290     return numActiveBits ? whichWord(numActiveBits - 1) + 1 : 1;
01291   }
01292 
01293   /// \brief Get the minimum bit size for this signed APInt
01294   ///
01295   /// Computes the minimum bit width for this APInt while considering it to be a
01296   /// signed (and probably negative) value. If the value is not negative, this
01297   /// function returns the same value as getActiveBits()+1. Otherwise, it
01298   /// returns the smallest bit width that will retain the negative value. For
01299   /// example, -1 can be written as 0b1 or 0xFFFFFFFFFF. 0b1 is shorter and so
01300   /// for -1, this function will always return 1.
01301   unsigned getMinSignedBits() const {
01302     if (isNegative())
01303       return BitWidth - countLeadingOnes() + 1;
01304     return getActiveBits() + 1;
01305   }
01306 
01307   /// \brief Get zero extended value
01308   ///
01309   /// This method attempts to return the value of this APInt as a zero extended
01310   /// uint64_t. The bitwidth must be <= 64 or the value must fit within a
01311   /// uint64_t. Otherwise an assertion will result.
01312   uint64_t getZExtValue() const {
01313     if (isSingleWord())
01314       return VAL;
01315     assert(getActiveBits() <= 64 && "Too many bits for uint64_t");
01316     return pVal[0];
01317   }
01318 
01319   /// \brief Get sign extended value
01320   ///
01321   /// This method attempts to return the value of this APInt as a sign extended
01322   /// int64_t. The bit width must be <= 64 or the value must fit within an
01323   /// int64_t. Otherwise an assertion will result.
01324   int64_t getSExtValue() const {
01325     if (isSingleWord())
01326       return int64_t(VAL << (APINT_BITS_PER_WORD - BitWidth)) >>
01327              (APINT_BITS_PER_WORD - BitWidth);
01328     assert(getMinSignedBits() <= 64 && "Too many bits for int64_t");
01329     return int64_t(pVal[0]);
01330   }
01331 
01332   /// \brief Get bits required for string value.
01333   ///
01334   /// This method determines how many bits are required to hold the APInt
01335   /// equivalent of the string given by \p str.
01336   static unsigned getBitsNeeded(StringRef str, uint8_t radix);
01337 
01338   /// \brief The APInt version of the countLeadingZeros functions in
01339   ///   MathExtras.h.
01340   ///
01341   /// It counts the number of zeros from the most significant bit to the first
01342   /// one bit.
01343   ///
01344   /// \returns BitWidth if the value is zero, otherwise returns the number of
01345   ///   zeros from the most significant bit to the first one bits.
01346   unsigned countLeadingZeros() const {
01347     if (isSingleWord()) {
01348       unsigned unusedBits = APINT_BITS_PER_WORD - BitWidth;
01349       return llvm::countLeadingZeros(VAL) - unusedBits;
01350     }
01351     return countLeadingZerosSlowCase();
01352   }
01353 
01354   /// \brief Count the number of leading one bits.
01355   ///
01356   /// This function is an APInt version of the countLeadingOnes_{32,64}
01357   /// functions in MathExtras.h. It counts the number of ones from the most
01358   /// significant bit to the first zero bit.
01359   ///
01360   /// \returns 0 if the high order bit is not set, otherwise returns the number
01361   /// of 1 bits from the most significant to the least
01362   unsigned countLeadingOnes() const;
01363 
01364   /// Computes the number of leading bits of this APInt that are equal to its
01365   /// sign bit.
01366   unsigned getNumSignBits() const {
01367     return isNegative() ? countLeadingOnes() : countLeadingZeros();
01368   }
01369 
01370   /// \brief Count the number of trailing zero bits.
01371   ///
01372   /// This function is an APInt version of the countTrailingZeros_{32,64}
01373   /// functions in MathExtras.h. It counts the number of zeros from the least
01374   /// significant bit to the first set bit.
01375   ///
01376   /// \returns BitWidth if the value is zero, otherwise returns the number of
01377   /// zeros from the least significant bit to the first one bit.
01378   unsigned countTrailingZeros() const;
01379 
01380   /// \brief Count the number of trailing one bits.
01381   ///
01382   /// This function is an APInt version of the countTrailingOnes_{32,64}
01383   /// functions in MathExtras.h. It counts the number of ones from the least
01384   /// significant bit to the first zero bit.
01385   ///
01386   /// \returns BitWidth if the value is all ones, otherwise returns the number
01387   /// of ones from the least significant bit to the first zero bit.
01388   unsigned countTrailingOnes() const {
01389     if (isSingleWord())
01390       return CountTrailingOnes_64(VAL);
01391     return countTrailingOnesSlowCase();
01392   }
01393 
01394   /// \brief Count the number of bits set.
01395   ///
01396   /// This function is an APInt version of the countPopulation_{32,64} functions
01397   /// in MathExtras.h. It counts the number of 1 bits in the APInt value.
01398   ///
01399   /// \returns 0 if the value is zero, otherwise returns the number of set bits.
01400   unsigned countPopulation() const {
01401     if (isSingleWord())
01402       return CountPopulation_64(VAL);
01403     return countPopulationSlowCase();
01404   }
01405 
01406   /// @}
01407   /// \name Conversion Functions
01408   /// @{
01409   void print(raw_ostream &OS, bool isSigned) const;
01410 
01411   /// Converts an APInt to a string and append it to Str.  Str is commonly a
01412   /// SmallString.
01413   void toString(SmallVectorImpl<char> &Str, unsigned Radix, bool Signed,
01414                 bool formatAsCLiteral = false) const;
01415 
01416   /// Considers the APInt to be unsigned and converts it into a string in the
01417   /// radix given. The radix can be 2, 8, 10 16, or 36.
01418   void toStringUnsigned(SmallVectorImpl<char> &Str, unsigned Radix = 10) const {
01419     toString(Str, Radix, false, false);
01420   }
01421 
01422   /// Considers the APInt to be signed and converts it into a string in the
01423   /// radix given. The radix can be 2, 8, 10, 16, or 36.
01424   void toStringSigned(SmallVectorImpl<char> &Str, unsigned Radix = 10) const {
01425     toString(Str, Radix, true, false);
01426   }
01427 
01428   /// \brief Return the APInt as a std::string.
01429   ///
01430   /// Note that this is an inefficient method.  It is better to pass in a
01431   /// SmallVector/SmallString to the methods above to avoid thrashing the heap
01432   /// for the string.
01433   std::string toString(unsigned Radix, bool Signed) const;
01434 
01435   /// \returns a byte-swapped representation of this APInt Value.
01436   APInt LLVM_ATTRIBUTE_UNUSED_RESULT byteSwap() const;
01437 
01438   /// \brief Converts this APInt to a double value.
01439   double roundToDouble(bool isSigned) const;
01440 
01441   /// \brief Converts this unsigned APInt to a double value.
01442   double roundToDouble() const { return roundToDouble(false); }
01443 
01444   /// \brief Converts this signed APInt to a double value.
01445   double signedRoundToDouble() const { return roundToDouble(true); }
01446 
01447   /// \brief Converts APInt bits to a double
01448   ///
01449   /// The conversion does not do a translation from integer to double, it just
01450   /// re-interprets the bits as a double. Note that it is valid to do this on
01451   /// any bit width. Exactly 64 bits will be translated.
01452   double bitsToDouble() const {
01453     union {
01454       uint64_t I;
01455       double D;
01456     } T;
01457     T.I = (isSingleWord() ? VAL : pVal[0]);
01458     return T.D;
01459   }
01460 
01461   /// \brief Converts APInt bits to a double
01462   ///
01463   /// The conversion does not do a translation from integer to float, it just
01464   /// re-interprets the bits as a float. Note that it is valid to do this on
01465   /// any bit width. Exactly 32 bits will be translated.
01466   float bitsToFloat() const {
01467     union {
01468       unsigned I;
01469       float F;
01470     } T;
01471     T.I = unsigned((isSingleWord() ? VAL : pVal[0]));
01472     return T.F;
01473   }
01474 
01475   /// \brief Converts a double to APInt bits.
01476   ///
01477   /// The conversion does not do a translation from double to integer, it just
01478   /// re-interprets the bits of the double.
01479   static APInt LLVM_ATTRIBUTE_UNUSED_RESULT doubleToBits(double V) {
01480     union {
01481       uint64_t I;
01482       double D;
01483     } T;
01484     T.D = V;
01485     return APInt(sizeof T * CHAR_BIT, T.I);
01486   }
01487 
01488   /// \brief Converts a float to APInt bits.
01489   ///
01490   /// The conversion does not do a translation from float to integer, it just
01491   /// re-interprets the bits of the float.
01492   static APInt LLVM_ATTRIBUTE_UNUSED_RESULT floatToBits(float V) {
01493     union {
01494       unsigned I;
01495       float F;
01496     } T;
01497     T.F = V;
01498     return APInt(sizeof T * CHAR_BIT, T.I);
01499   }
01500 
01501   /// @}
01502   /// \name Mathematics Operations
01503   /// @{
01504 
01505   /// \returns the floor log base 2 of this APInt.
01506   unsigned logBase2() const { return BitWidth - 1 - countLeadingZeros(); }
01507 
01508   /// \returns the ceil log base 2 of this APInt.
01509   unsigned ceilLogBase2() const {
01510     return BitWidth - (*this - 1).countLeadingZeros();
01511   }
01512 
01513   /// \returns the nearest log base 2 of this APInt. Ties round up.
01514   ///
01515   /// NOTE: When we have a BitWidth of 1, we define:
01516   /// 
01517   ///   log2(0) = UINT32_MAX
01518   ///   log2(1) = 0
01519   ///
01520   /// to get around any mathematical concerns resulting from
01521   /// referencing 2 in a space where 2 does no exist.
01522   unsigned nearestLogBase2() const {
01523     // Special case when we have a bitwidth of 1. If VAL is 1, then we
01524     // get 0. If VAL is 0, we get UINT64_MAX which gets truncated to
01525     // UINT32_MAX.
01526     if (BitWidth == 1)
01527       return VAL - 1;
01528 
01529     // Handle the zero case.
01530     if (!getBoolValue())
01531       return UINT32_MAX;
01532 
01533     // The non-zero case is handled by computing:
01534     //
01535     //   nearestLogBase2(x) = logBase2(x) + x[logBase2(x)-1].
01536     //
01537     // where x[i] is referring to the value of the ith bit of x.
01538     unsigned lg = logBase2();
01539     return lg + unsigned((*this)[lg - 1]);
01540   }
01541 
01542   /// \returns the log base 2 of this APInt if its an exact power of two, -1
01543   /// otherwise
01544   int32_t exactLogBase2() const {
01545     if (!isPowerOf2())
01546       return -1;
01547     return logBase2();
01548   }
01549 
01550   /// \brief Compute the square root
01551   APInt LLVM_ATTRIBUTE_UNUSED_RESULT sqrt() const;
01552 
01553   /// \brief Get the absolute value;
01554   ///
01555   /// If *this is < 0 then return -(*this), otherwise *this;
01556   APInt LLVM_ATTRIBUTE_UNUSED_RESULT abs() const {
01557     if (isNegative())
01558       return -(*this);
01559     return *this;
01560   }
01561 
01562   /// \returns the multiplicative inverse for a given modulo.
01563   APInt multiplicativeInverse(const APInt &modulo) const;
01564 
01565   /// @}
01566   /// \name Support for division by constant
01567   /// @{
01568 
01569   /// Calculate the magic number for signed division by a constant.
01570   struct ms;
01571   ms magic() const;
01572 
01573   /// Calculate the magic number for unsigned division by a constant.
01574   struct mu;
01575   mu magicu(unsigned LeadingZeros = 0) const;
01576 
01577   /// @}
01578   /// \name Building-block Operations for APInt and APFloat
01579   /// @{
01580 
01581   // These building block operations operate on a representation of arbitrary
01582   // precision, two's-complement, bignum integer values. They should be
01583   // sufficient to implement APInt and APFloat bignum requirements. Inputs are
01584   // generally a pointer to the base of an array of integer parts, representing
01585   // an unsigned bignum, and a count of how many parts there are.
01586 
01587   /// Sets the least significant part of a bignum to the input value, and zeroes
01588   /// out higher parts.
01589   static void tcSet(integerPart *, integerPart, unsigned int);
01590 
01591   /// Assign one bignum to another.
01592   static void tcAssign(integerPart *, const integerPart *, unsigned int);
01593 
01594   /// Returns true if a bignum is zero, false otherwise.
01595   static bool tcIsZero(const integerPart *, unsigned int);
01596 
01597   /// Extract the given bit of a bignum; returns 0 or 1.  Zero-based.
01598   static int tcExtractBit(const integerPart *, unsigned int bit);
01599 
01600   /// Copy the bit vector of width srcBITS from SRC, starting at bit srcLSB, to
01601   /// DST, of dstCOUNT parts, such that the bit srcLSB becomes the least
01602   /// significant bit of DST.  All high bits above srcBITS in DST are
01603   /// zero-filled.
01604   static void tcExtract(integerPart *, unsigned int dstCount,
01605                         const integerPart *, unsigned int srcBits,
01606                         unsigned int srcLSB);
01607 
01608   /// Set the given bit of a bignum.  Zero-based.
01609   static void tcSetBit(integerPart *, unsigned int bit);
01610 
01611   /// Clear the given bit of a bignum.  Zero-based.
01612   static void tcClearBit(integerPart *, unsigned int bit);
01613 
01614   /// Returns the bit number of the least or most significant set bit of a
01615   /// number.  If the input number has no bits set -1U is returned.
01616   static unsigned int tcLSB(const integerPart *, unsigned int);
01617   static unsigned int tcMSB(const integerPart *parts, unsigned int n);
01618 
01619   /// Negate a bignum in-place.
01620   static void tcNegate(integerPart *, unsigned int);
01621 
01622   /// DST += RHS + CARRY where CARRY is zero or one.  Returns the carry flag.
01623   static integerPart tcAdd(integerPart *, const integerPart *,
01624                            integerPart carry, unsigned);
01625 
01626   /// DST -= RHS + CARRY where CARRY is zero or one. Returns the carry flag.
01627   static integerPart tcSubtract(integerPart *, const integerPart *,
01628                                 integerPart carry, unsigned);
01629 
01630   /// DST += SRC * MULTIPLIER + PART   if add is true
01631   /// DST  = SRC * MULTIPLIER + PART   if add is false
01632   ///
01633   /// Requires 0 <= DSTPARTS <= SRCPARTS + 1.  If DST overlaps SRC they must
01634   /// start at the same point, i.e. DST == SRC.
01635   ///
01636   /// If DSTPARTS == SRC_PARTS + 1 no overflow occurs and zero is returned.
01637   /// Otherwise DST is filled with the least significant DSTPARTS parts of the
01638   /// result, and if all of the omitted higher parts were zero return zero,
01639   /// otherwise overflow occurred and return one.
01640   static int tcMultiplyPart(integerPart *dst, const integerPart *src,
01641                             integerPart multiplier, integerPart carry,
01642                             unsigned int srcParts, unsigned int dstParts,
01643                             bool add);
01644 
01645   /// DST = LHS * RHS, where DST has the same width as the operands and is
01646   /// filled with the least significant parts of the result.  Returns one if
01647   /// overflow occurred, otherwise zero.  DST must be disjoint from both
01648   /// operands.
01649   static int tcMultiply(integerPart *, const integerPart *, const integerPart *,
01650                         unsigned);
01651 
01652   /// DST = LHS * RHS, where DST has width the sum of the widths of the
01653   /// operands.  No overflow occurs.  DST must be disjoint from both
01654   /// operands. Returns the number of parts required to hold the result.
01655   static unsigned int tcFullMultiply(integerPart *, const integerPart *,
01656                                      const integerPart *, unsigned, unsigned);
01657 
01658   /// If RHS is zero LHS and REMAINDER are left unchanged, return one.
01659   /// Otherwise set LHS to LHS / RHS with the fractional part discarded, set
01660   /// REMAINDER to the remainder, return zero.  i.e.
01661   ///
01662   ///  OLD_LHS = RHS * LHS + REMAINDER
01663   ///
01664   /// SCRATCH is a bignum of the same size as the operands and result for use by
01665   /// the routine; its contents need not be initialized and are destroyed.  LHS,
01666   /// REMAINDER and SCRATCH must be distinct.
01667   static int tcDivide(integerPart *lhs, const integerPart *rhs,
01668                       integerPart *remainder, integerPart *scratch,
01669                       unsigned int parts);
01670 
01671   /// Shift a bignum left COUNT bits.  Shifted in bits are zero.  There are no
01672   /// restrictions on COUNT.
01673   static void tcShiftLeft(integerPart *, unsigned int parts,
01674                           unsigned int count);
01675 
01676   /// Shift a bignum right COUNT bits.  Shifted in bits are zero.  There are no
01677   /// restrictions on COUNT.
01678   static void tcShiftRight(integerPart *, unsigned int parts,
01679                            unsigned int count);
01680 
01681   /// The obvious AND, OR and XOR and complement operations.
01682   static void tcAnd(integerPart *, const integerPart *, unsigned int);
01683   static void tcOr(integerPart *, const integerPart *, unsigned int);
01684   static void tcXor(integerPart *, const integerPart *, unsigned int);
01685   static void tcComplement(integerPart *, unsigned int);
01686 
01687   /// Comparison (unsigned) of two bignums.
01688   static int tcCompare(const integerPart *, const integerPart *, unsigned int);
01689 
01690   /// Increment a bignum in-place.  Return the carry flag.
01691   static integerPart tcIncrement(integerPart *, unsigned int);
01692 
01693   /// Decrement a bignum in-place.  Return the borrow flag.
01694   static integerPart tcDecrement(integerPart *, unsigned int);
01695 
01696   /// Set the least significant BITS and clear the rest.
01697   static void tcSetLeastSignificantBits(integerPart *, unsigned int,
01698                                         unsigned int bits);
01699 
01700   /// \brief debug method
01701   void dump() const;
01702 
01703   /// @}
01704 };
01705 
01706 /// Magic data for optimising signed division by a constant.
01707 struct APInt::ms {
01708   APInt m;    ///< magic number
01709   unsigned s; ///< shift amount
01710 };
01711 
01712 /// Magic data for optimising unsigned division by a constant.
01713 struct APInt::mu {
01714   APInt m;    ///< magic number
01715   bool a;     ///< add indicator
01716   unsigned s; ///< shift amount
01717 };
01718 
01719 inline bool operator==(uint64_t V1, const APInt &V2) { return V2 == V1; }
01720 
01721 inline bool operator!=(uint64_t V1, const APInt &V2) { return V2 != V1; }
01722 
01723 inline raw_ostream &operator<<(raw_ostream &OS, const APInt &I) {
01724   I.print(OS, true);
01725   return OS;
01726 }
01727 
01728 namespace APIntOps {
01729 
01730 /// \brief Determine the smaller of two APInts considered to be signed.
01731 inline APInt smin(const APInt &A, const APInt &B) { return A.slt(B) ? A : B; }
01732 
01733 /// \brief Determine the larger of two APInts considered to be signed.
01734 inline APInt smax(const APInt &A, const APInt &B) { return A.sgt(B) ? A : B; }
01735 
01736 /// \brief Determine the smaller of two APInts considered to be signed.
01737 inline APInt umin(const APInt &A, const APInt &B) { return A.ult(B) ? A : B; }
01738 
01739 /// \brief Determine the larger of two APInts considered to be unsigned.
01740 inline APInt umax(const APInt &A, const APInt &B) { return A.ugt(B) ? A : B; }
01741 
01742 /// \brief Check if the specified APInt has a N-bits unsigned integer value.
01743 inline bool isIntN(unsigned N, const APInt &APIVal) { return APIVal.isIntN(N); }
01744 
01745 /// \brief Check if the specified APInt has a N-bits signed integer value.
01746 inline bool isSignedIntN(unsigned N, const APInt &APIVal) {
01747   return APIVal.isSignedIntN(N);
01748 }
01749 
01750 /// \returns true if the argument APInt value is a sequence of ones starting at
01751 /// the least significant bit with the remainder zero.
01752 inline bool isMask(unsigned numBits, const APInt &APIVal) {
01753   return numBits <= APIVal.getBitWidth() &&
01754          APIVal == APInt::getLowBitsSet(APIVal.getBitWidth(), numBits);
01755 }
01756 
01757 /// \brief Return true if the argument APInt value contains a sequence of ones
01758 /// with the remainder zero.
01759 inline bool isShiftedMask(unsigned numBits, const APInt &APIVal) {
01760   return isMask(numBits, (APIVal - APInt(numBits, 1)) | APIVal);
01761 }
01762 
01763 /// \brief Returns a byte-swapped representation of the specified APInt Value.
01764 inline APInt byteSwap(const APInt &APIVal) { return APIVal.byteSwap(); }
01765 
01766 /// \brief Returns the floor log base 2 of the specified APInt value.
01767 inline unsigned logBase2(const APInt &APIVal) { return APIVal.logBase2(); }
01768 
01769 /// \brief Compute GCD of two APInt values.
01770 ///
01771 /// This function returns the greatest common divisor of the two APInt values
01772 /// using Euclid's algorithm.
01773 ///
01774 /// \returns the greatest common divisor of Val1 and Val2
01775 APInt GreatestCommonDivisor(const APInt &Val1, const APInt &Val2);
01776 
01777 /// \brief Converts the given APInt to a double value.
01778 ///
01779 /// Treats the APInt as an unsigned value for conversion purposes.
01780 inline double RoundAPIntToDouble(const APInt &APIVal) {
01781   return APIVal.roundToDouble();
01782 }
01783 
01784 /// \brief Converts the given APInt to a double value.
01785 ///
01786 /// Treats the APInt as a signed value for conversion purposes.
01787 inline double RoundSignedAPIntToDouble(const APInt &APIVal) {
01788   return APIVal.signedRoundToDouble();
01789 }
01790 
01791 /// \brief Converts the given APInt to a float vlalue.
01792 inline float RoundAPIntToFloat(const APInt &APIVal) {
01793   return float(RoundAPIntToDouble(APIVal));
01794 }
01795 
01796 /// \brief Converts the given APInt to a float value.
01797 ///
01798 /// Treast the APInt as a signed value for conversion purposes.
01799 inline float RoundSignedAPIntToFloat(const APInt &APIVal) {
01800   return float(APIVal.signedRoundToDouble());
01801 }
01802 
01803 /// \brief Converts the given double value into a APInt.
01804 ///
01805 /// This function convert a double value to an APInt value.
01806 APInt RoundDoubleToAPInt(double Double, unsigned width);
01807 
01808 /// \brief Converts a float value into a APInt.
01809 ///
01810 /// Converts a float value into an APInt value.
01811 inline APInt RoundFloatToAPInt(float Float, unsigned width) {
01812   return RoundDoubleToAPInt(double(Float), width);
01813 }
01814 
01815 /// \brief Arithmetic right-shift function.
01816 ///
01817 /// Arithmetic right-shift the APInt by shiftAmt.
01818 inline APInt ashr(const APInt &LHS, unsigned shiftAmt) {
01819   return LHS.ashr(shiftAmt);
01820 }
01821 
01822 /// \brief Logical right-shift function.
01823 ///
01824 /// Logical right-shift the APInt by shiftAmt.
01825 inline APInt lshr(const APInt &LHS, unsigned shiftAmt) {
01826   return LHS.lshr(shiftAmt);
01827 }
01828 
01829 /// \brief Left-shift function.
01830 ///
01831 /// Left-shift the APInt by shiftAmt.
01832 inline APInt shl(const APInt &LHS, unsigned shiftAmt) {
01833   return LHS.shl(shiftAmt);
01834 }
01835 
01836 /// \brief Signed division function for APInt.
01837 ///
01838 /// Signed divide APInt LHS by APInt RHS.
01839 inline APInt sdiv(const APInt &LHS, const APInt &RHS) { return LHS.sdiv(RHS); }
01840 
01841 /// \brief Unsigned division function for APInt.
01842 ///
01843 /// Unsigned divide APInt LHS by APInt RHS.
01844 inline APInt udiv(const APInt &LHS, const APInt &RHS) { return LHS.udiv(RHS); }
01845 
01846 /// \brief Function for signed remainder operation.
01847 ///
01848 /// Signed remainder operation on APInt.
01849 inline APInt srem(const APInt &LHS, const APInt &RHS) { return LHS.srem(RHS); }
01850 
01851 /// \brief Function for unsigned remainder operation.
01852 ///
01853 /// Unsigned remainder operation on APInt.
01854 inline APInt urem(const APInt &LHS, const APInt &RHS) { return LHS.urem(RHS); }
01855 
01856 /// \brief Function for multiplication operation.
01857 ///
01858 /// Performs multiplication on APInt values.
01859 inline APInt mul(const APInt &LHS, const APInt &RHS) { return LHS * RHS; }
01860 
01861 /// \brief Function for addition operation.
01862 ///
01863 /// Performs addition on APInt values.
01864 inline APInt add(const APInt &LHS, const APInt &RHS) { return LHS + RHS; }
01865 
01866 /// \brief Function for subtraction operation.
01867 ///
01868 /// Performs subtraction on APInt values.
01869 inline APInt sub(const APInt &LHS, const APInt &RHS) { return LHS - RHS; }
01870 
01871 /// \brief Bitwise AND function for APInt.
01872 ///
01873 /// Performs bitwise AND operation on APInt LHS and
01874 /// APInt RHS.
01875 inline APInt And(const APInt &LHS, const APInt &RHS) { return LHS & RHS; }
01876 
01877 /// \brief Bitwise OR function for APInt.
01878 ///
01879 /// Performs bitwise OR operation on APInt LHS and APInt RHS.
01880 inline APInt Or(const APInt &LHS, const APInt &RHS) { return LHS | RHS; }
01881 
01882 /// \brief Bitwise XOR function for APInt.
01883 ///
01884 /// Performs bitwise XOR operation on APInt.
01885 inline APInt Xor(const APInt &LHS, const APInt &RHS) { return LHS ^ RHS; }
01886 
01887 /// \brief Bitwise complement function.
01888 ///
01889 /// Performs a bitwise complement operation on APInt.
01890 inline APInt Not(const APInt &APIVal) { return ~APIVal; }
01891 
01892 } // End of APIntOps namespace
01893 
01894 // See friend declaration above. This additional declaration is required in
01895 // order to compile LLVM with IBM xlC compiler.
01896 hash_code hash_value(const APInt &Arg);
01897 } // End of llvm namespace
01898 
01899 #endif