LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | List of all members
llvm::APInt Class Reference

Class for arbitrary precision integers. More...

#include <APInt.h>

Inheritance diagram for llvm::APInt:
Inheritance graph
[legend]
Collaboration diagram for llvm::APInt:
Collaboration graph
[legend]

Classes

struct  ms
 Magic data for optimising signed division by a constant. More...
 
struct  mu
 Magic data for optimising unsigned division by a constant. More...
 

Public Member Functions

Constructors
 APInt (unsigned numBits, uint64_t val, bool isSigned=false)
 Create a new APInt of numBits width, initialized as val. More...
 
 APInt (unsigned numBits, ArrayRef< uint64_t > bigVal)
 Construct an APInt of numBits width, initialized as bigVal[]. More...
 
 APInt (unsigned numBits, unsigned numWords, const uint64_t bigVal[])
 
 APInt (unsigned numBits, StringRef str, uint8_t radix)
 Construct an APInt from a string representation. More...
 
 APInt (const APInt &that)
 Copy Constructor. More...
 
 ~APInt ()
 Destructor. More...
 
 APInt ()
 Default constructor that creates an uninitialized APInt. More...
 
bool needsCleanup () const
 Returns whether this instance allocated memory. More...
 
void Profile (FoldingSetNodeID &id) const
 Profile - This method 'profiles' an APInt for use with FoldingSet. More...
 
Value Tests
bool isNegative () const
 Determine sign of this APInt. More...
 
bool isNonNegative () const
 Determine if this APInt Value is non-negative (>= 0) More...
 
bool isStrictlyPositive () const
 Determine if this APInt Value is positive. More...
 
bool isAllOnesValue () const
 Determine if all bits are set. More...
 
bool isMaxValue () const
 Determine if this is the largest unsigned value. More...
 
bool isMaxSignedValue () const
 Determine if this is the largest signed value. More...
 
bool isMinValue () const
 Determine if this is the smallest unsigned value. More...
 
bool isMinSignedValue () const
 Determine if this is the smallest signed value. More...
 
bool isIntN (unsigned N) const
 Check if this APInt has an N-bits unsigned integer value. More...
 
bool isSignedIntN (unsigned N) const
 Check if this APInt has an N-bits signed integer value. More...
 
bool isPowerOf2 () const
 Check if this APInt's value is a power of two greater than zero. More...
 
bool isSignBit () const
 Check if the APInt's value is returned by getSignBit. More...
 
bool getBoolValue () const
 Convert APInt to a boolean value. More...
 
uint64_t getLimitedValue (uint64_t Limit=~0ULL) const
 
Unary Operators
const APInt operator++ (int)
 Postfix increment operator. More...
 
APIntoperator++ ()
 Prefix increment operator. More...
 
const APInt operator-- (int)
 Postfix decrement operator. More...
 
APIntoperator-- ()
 Prefix decrement operator. More...
 
APInt operator~ () const
 Unary bitwise complement operator. More...
 
APInt operator- () const
 Unary negation operator. More...
 
bool operator! () const
 Logical negation operator. More...
 
Assignment Operators
APIntoperator= (const APInt &RHS)
 Copy assignment operator. More...
 
APIntoperator= (uint64_t RHS)
 Assignment operator. More...
 
APIntoperator&= (const APInt &RHS)
 Bitwise AND assignment operator. More...
 
APIntoperator|= (const APInt &RHS)
 Bitwise OR assignment operator. More...
 
APIntoperator|= (uint64_t RHS)
 Bitwise OR assignment operator. More...
 
APIntoperator^= (const APInt &RHS)
 Bitwise XOR assignment operator. More...
 
APIntoperator*= (const APInt &RHS)
 Multiplication assignment operator. More...
 
APIntoperator+= (const APInt &RHS)
 Addition assignment operator. More...
 
APIntoperator-= (const APInt &RHS)
 Subtraction assignment operator. More...
 
APIntoperator<<= (unsigned shiftAmt)
 Left-shift assignment function. More...
 
Comparison Operators
bool operator== (const APInt &RHS) const
 Equality operator. More...
 
bool operator== (uint64_t Val) const
 Equality operator. More...
 
bool eq (const APInt &RHS) const
 Equality comparison. More...
 
bool operator!= (const APInt &RHS) const
 Inequality operator. More...
 
bool operator!= (uint64_t Val) const
 Inequality operator. More...
 
bool ne (const APInt &RHS) const
 Inequality comparison. More...
 
bool ult (const APInt &RHS) const
 Unsigned less than comparison. More...
 
bool ult (uint64_t RHS) const
 Unsigned less than comparison. More...
 
bool slt (const APInt &RHS) const
 Signed less than comparison. More...
 
bool slt (uint64_t RHS) const
 Signed less than comparison. More...
 
bool ule (const APInt &RHS) const
 Unsigned less or equal comparison. More...
 
bool ule (uint64_t RHS) const
 Unsigned less or equal comparison. More...
 
bool sle (const APInt &RHS) const
 Signed less or equal comparison. More...
 
bool sle (uint64_t RHS) const
 Signed less or equal comparison. More...
 
bool ugt (const APInt &RHS) const
 Unsigned greather than comparison. More...
 
bool ugt (uint64_t RHS) const
 Unsigned greater than comparison. More...
 
bool sgt (const APInt &RHS) const
 Signed greather than comparison. More...
 
bool sgt (uint64_t RHS) const
 Signed greater than comparison. More...
 
bool uge (const APInt &RHS) const
 Unsigned greater or equal comparison. More...
 
bool uge (uint64_t RHS) const
 Unsigned greater or equal comparison. More...
 
bool sge (const APInt &RHS) const
 Signed greather or equal comparison. More...
 
bool sge (uint64_t RHS) const
 Signed greater or equal comparison. More...
 
bool intersects (const APInt &RHS) const
 
Resizing Operators
APInt LLVM_ATTRIBUTE_UNUSED_RESULT trunc (unsigned width) const
 Truncate to new width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT sext (unsigned width) const
 Sign extend to a new width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT zext (unsigned width) const
 Zero extend to a new width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrTrunc (unsigned width) const
 Sign extend or truncate to width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrTrunc (unsigned width) const
 Zero extend or truncate to width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT sextOrSelf (unsigned width) const
 Sign extend or truncate to width. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT zextOrSelf (unsigned width) const
 Zero extend or truncate to width. More...
 
Bit Manipulation Operators
void setAllBits ()
 Set every bit to 1. More...
 
void setBit (unsigned bitPosition)
 Set a given bit to 1. More...
 
void clearAllBits ()
 Set every bit to 0. More...
 
void clearBit (unsigned bitPosition)
 Set a given bit to 0. More...
 
void flipAllBits ()
 Toggle every bit to its opposite value. More...
 
void flipBit (unsigned bitPosition)
 Toggles a given bit to its opposite value. More...
 
Mathematics Operations
unsigned logBase2 () const
 
unsigned ceilLogBase2 () const
 
int32_t exactLogBase2 () const
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT sqrt () const
 Compute the square root. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT abs () const
 Get the absolute value;. More...
 
APInt multiplicativeInverse (const APInt &modulo) const
 
Support for division by constant
ms magic () const
 
mu magicu (unsigned LeadingZeros=0) const
 

Value Generators

APInt getHiBits (unsigned numBits) const
 Compute an APInt containing numBits highbits from this APInt. More...
 
APInt getLoBits (unsigned numBits) const
 Compute an APInt containing numBits lowbits from this APInt. More...
 
const uint64_t * getRawData () const
 
static APInt getMaxValue (unsigned numBits)
 Gets maximum unsigned value of APInt for specific bit width. More...
 
static APInt getSignedMaxValue (unsigned numBits)
 Gets maximum signed value of APInt for a specific bit width. More...
 
static APInt getMinValue (unsigned numBits)
 Gets minimum unsigned value of APInt for a specific bit width. More...
 
static APInt getSignedMinValue (unsigned numBits)
 Gets minimum signed value of APInt for a specific bit width. More...
 
static APInt getSignBit (unsigned BitWidth)
 Get the SignBit for a specific bit width. More...
 
static APInt getAllOnesValue (unsigned numBits)
 Get the all-ones value. More...
 
static APInt getNullValue (unsigned numBits)
 Get the '0' value. More...
 
static APInt getOneBitSet (unsigned numBits, unsigned BitNo)
 Return an APInt with exactly one bit set in the result. More...
 
static APInt getBitsSet (unsigned numBits, unsigned loBit, unsigned hiBit)
 Get a value with a block of bits set. More...
 
static APInt getHighBitsSet (unsigned numBits, unsigned hiBitsSet)
 Get a value with high bits set. More...
 
static APInt getLowBitsSet (unsigned numBits, unsigned loBitsSet)
 Get a value with low bits set. More...
 
static APInt getSplat (unsigned NewLen, const APInt &V)
 Return a value containing V broadcasted over NewLen bits. More...
 
static bool isSameValue (const APInt &I1, const APInt &I2)
 Determine if two APInts have the same value, after zero-extending one of them (if needed!) to ensure that the bit-widths match. More...
 
hash_code hash_value (const APInt &Arg)
 Overload to compute a hash_code for an APInt value. More...
 

Binary Operators

APInt operator& (const APInt &RHS) const
 Bitwise AND operator. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT And (const APInt &RHS) const
 
APInt operator| (const APInt &RHS) const
 Bitwise OR operator. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT Or (const APInt &RHS) const
 Bitwise OR function. More...
 
APInt operator^ (const APInt &RHS) const
 Bitwise XOR operator. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT Xor (const APInt &RHS) const
 Bitwise XOR function. More...
 
APInt operator* (const APInt &RHS) const
 Multiplication operator. More...
 
APInt operator+ (const APInt &RHS) const
 Addition operator. More...
 
APInt operator+ (uint64_t RHS) const
 
APInt operator- (const APInt &RHS) const
 Subtraction operator. More...
 
APInt operator- (uint64_t RHS) const
 
APInt operator<< (unsigned Bits) const
 Left logical shift operator. More...
 
APInt operator<< (const APInt &Bits) const
 Left logical shift operator. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT ashr (unsigned shiftAmt) const
 Arithmetic right-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT lshr (unsigned shiftAmt) const
 Logical right-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT shl (unsigned shiftAmt) const
 Left-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotl (unsigned rotateAmt) const
 Rotate left by rotateAmt. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotr (unsigned rotateAmt) const
 Rotate right by rotateAmt. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT ashr (const APInt &shiftAmt) const
 Arithmetic right-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT lshr (const APInt &shiftAmt) const
 Logical right-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT shl (const APInt &shiftAmt) const
 Left-shift function. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotl (const APInt &rotateAmt) const
 Rotate left by rotateAmt. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT rotr (const APInt &rotateAmt) const
 Rotate right by rotateAmt. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT udiv (const APInt &RHS) const
 Unsigned division operation. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT sdiv (const APInt &RHS) const
 Signed division function for APInt. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT urem (const APInt &RHS) const
 Unsigned remainder operation. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT srem (const APInt &RHS) const
 Function for signed remainder operation. More...
 
APInt sadd_ov (const APInt &RHS, bool &Overflow) const
 
APInt uadd_ov (const APInt &RHS, bool &Overflow) const
 
APInt ssub_ov (const APInt &RHS, bool &Overflow) const
 
APInt usub_ov (const APInt &RHS, bool &Overflow) const
 
APInt sdiv_ov (const APInt &RHS, bool &Overflow) const
 
APInt smul_ov (const APInt &RHS, bool &Overflow) const
 
APInt umul_ov (const APInt &RHS, bool &Overflow) const
 
APInt sshl_ov (unsigned Amt, bool &Overflow) const
 
bool operator[] (unsigned bitPosition) const
 Array-indexing support. More...
 
static void udivrem (const APInt &LHS, const APInt &RHS, APInt &Quotient, APInt &Remainder)
 Dual division/remainder interface. More...
 
static void sdivrem (const APInt &LHS, const APInt &RHS, APInt &Quotient, APInt &Remainder)
 

Value Characterization Functions

unsigned getBitWidth () const
 Return the number of bits in the APInt. More...
 
unsigned getNumWords () const
 Get the number of words. More...
 
unsigned getActiveBits () const
 Compute the number of active bits in the value. More...
 
unsigned getActiveWords () const
 Compute the number of active words in the value of this APInt. More...
 
unsigned getMinSignedBits () const
 Get the minimum bit size for this signed APInt. More...
 
uint64_t getZExtValue () const
 Get zero extended value. More...
 
int64_t getSExtValue () const
 Get sign extended value. More...
 
unsigned countLeadingZeros () const
 The APInt version of the countLeadingZeros functions in MathExtras.h. More...
 
unsigned countLeadingOnes () const
 Count the number of leading one bits. More...
 
unsigned getNumSignBits () const
 
unsigned countTrailingZeros () const
 Count the number of trailing zero bits. More...
 
unsigned countTrailingOnes () const
 Count the number of trailing one bits. More...
 
unsigned countPopulation () const
 Count the number of bits set. More...
 
static unsigned getNumWords (unsigned BitWidth)
 Get the number of words. More...
 
static unsigned getBitsNeeded (StringRef str, uint8_t radix)
 Get bits required for string value. More...
 

Conversion Functions

void print (raw_ostream &OS, bool isSigned) const
 
void toString (SmallVectorImpl< char > &Str, unsigned Radix, bool Signed, bool formatAsCLiteral=false) const
 
void toStringUnsigned (SmallVectorImpl< char > &Str, unsigned Radix=10) const
 
void toStringSigned (SmallVectorImpl< char > &Str, unsigned Radix=10) const
 
std::string toString (unsigned Radix, bool Signed) const
 Return the APInt as a std::string. More...
 
APInt LLVM_ATTRIBUTE_UNUSED_RESULT byteSwap () const
 
double roundToDouble (bool isSigned) const
 Converts this APInt to a double value. More...
 
double roundToDouble () const
 Converts this unsigned APInt to a double value. More...
 
double signedRoundToDouble () const
 Converts this signed APInt to a double value. More...
 
double bitsToDouble () const
 Converts APInt bits to a double. More...
 
float bitsToFloat () const
 Converts APInt bits to a double. More...
 
static APInt
LLVM_ATTRIBUTE_UNUSED_RESULT 
doubleToBits (double V)
 Converts a double to APInt bits. More...
 
static APInt
LLVM_ATTRIBUTE_UNUSED_RESULT 
floatToBits (float V)
 Converts a float to APInt bits. More...
 

Building-block Operations for APInt and APFloat

void dump () const
 debug method More...
 
static void tcSet (integerPart *, integerPart, unsigned int)
 
static void tcAssign (integerPart *, const integerPart *, unsigned int)
 Assign one bignum to another. More...
 
static bool tcIsZero (const integerPart *, unsigned int)
 Returns true if a bignum is zero, false otherwise. More...
 
static int tcExtractBit (const integerPart *, unsigned int bit)
 Extract the given bit of a bignum; returns 0 or 1. Zero-based. More...
 
static void tcExtract (integerPart *, unsigned int dstCount, const integerPart *, unsigned int srcBits, unsigned int srcLSB)
 
static void tcSetBit (integerPart *, unsigned int bit)
 Set the given bit of a bignum. Zero-based. More...
 
static void tcClearBit (integerPart *, unsigned int bit)
 Clear the given bit of a bignum. Zero-based. More...
 
static unsigned int tcLSB (const integerPart *, unsigned int)
 
static unsigned int tcMSB (const integerPart *parts, unsigned int n)
 
static void tcNegate (integerPart *, unsigned int)
 Negate a bignum in-place. More...
 
static integerPart tcAdd (integerPart *, const integerPart *, integerPart carry, unsigned)
 DST += RHS + CARRY where CARRY is zero or one. Returns the carry flag. More...
 
static integerPart tcSubtract (integerPart *, const integerPart *, integerPart carry, unsigned)
 DST -= RHS + CARRY where CARRY is zero or one. Returns the carry flag. More...
 
static int tcMultiplyPart (integerPart *dst, const integerPart *src, integerPart multiplier, integerPart carry, unsigned int srcParts, unsigned int dstParts, bool add)
 
static int tcMultiply (integerPart *, const integerPart *, const integerPart *, unsigned)
 
static unsigned int tcFullMultiply (integerPart *, const integerPart *, const integerPart *, unsigned, unsigned)
 
static int tcDivide (integerPart *lhs, const integerPart *rhs, integerPart *remainder, integerPart *scratch, unsigned int parts)
 
static void tcShiftLeft (integerPart *, unsigned int parts, unsigned int count)
 
static void tcShiftRight (integerPart *, unsigned int parts, unsigned int count)
 
static void tcAnd (integerPart *, const integerPart *, unsigned int)
 The obvious AND, OR and XOR and complement operations. More...
 
static void tcOr (integerPart *, const integerPart *, unsigned int)
 
static void tcXor (integerPart *, const integerPart *, unsigned int)
 
static void tcComplement (integerPart *, unsigned int)
 
static int tcCompare (const integerPart *, const integerPart *, unsigned int)
 Comparison (unsigned) of two bignums. More...
 
static integerPart tcIncrement (integerPart *, unsigned int)
 Increment a bignum in-place. Return the carry flag. More...
 
static integerPart tcDecrement (integerPart *, unsigned int)
 Decrement a bignum in-place. Return the borrow flag. More...
 
static void tcSetLeastSignificantBits (integerPart *, unsigned int, unsigned int bits)
 Set the least significant BITS and clear the rest. More...
 

Detailed Description

Class for arbitrary precision integers.

APInt is a functional replacement for common case unsigned integer type like "unsigned", "unsigned long" or "uint64_t", but also allows non-byte-width integer sizes and large integer value types such as 3-bits, 15-bits, or more than 64-bits of precision. APInt provides a variety of arithmetic operators and methods to manipulate integer values of any bit-width. It supports both the typical integer arithmetic and comparison operations as well as bitwise manipulation.

The class has several invariants worth noting:

Definition at line 75 of file APInt.h.

Constructor & Destructor Documentation

llvm::APInt::APInt ( unsigned  numBits,
uint64_t  val,
bool  isSigned = false 
)
inline

Create a new APInt of numBits width, initialized as val.

If isSigned is true then val is treated as if it were a signed value (i.e. as an int64_t) and the appropriate sign extension to the bit width will be done. Otherwise, no sign extension occurs (high order bits beyond the range of val are zero filled).

Parameters
numBitsthe bit width of the constructed APInt
valthe initial value of the APInt
isSignedhow to treat signedness of val

Definition at line 236 of file APInt.h.

References VAL.

APInt::APInt ( unsigned  numBits,
ArrayRef< uint64_t >  bigVal 
)

Construct an APInt of numBits width, initialized as bigVal[].

Note that bigVal.size() can be smaller or larger than the corresponding bit width but any extraneous bits will be dropped.

Parameters
numBitsthe bit width of the constructed APInt
bigVala sequence of words to form the initial value of the APInt

Definition at line 106 of file APInt.cpp.

APInt::APInt ( unsigned  numBits,
unsigned  numWords,
const uint64_t  bigVal[] 
)

Equivalent to APInt(numBits, ArrayRef<uint64_t>(bigVal, numWords)), but deprecated because this constructor is prone to ambiguity with the APInt(unsigned, uint64_t, bool) constructor.

If this overload is ever deleted, care should be taken to prevent calls from being incorrectly captured by the APInt(unsigned, uint64_t, bool) constructor.

Definition at line 111 of file APInt.cpp.

References llvm::makeArrayRef().

APInt::APInt ( unsigned  numBits,
StringRef  str,
uint8_t  radix 
)

Construct an APInt from a string representation.

This constructor interprets the string str in the given radix. The interpretation stops when the first character that is not suitable for the radix is encountered, or the end of the string. Acceptable radix values are 2, 8, 10, 16, and 36. It is an error for the value implied by the string to require more bits than numBits.

Parameters
numBitsthe bit width of the constructed APInt
strthe string to be interpreted
radixthe radix to use for the conversion

Definition at line 116 of file APInt.cpp.

llvm::APInt::APInt ( const APInt that)
inline

Copy Constructor.

Simply makes *this a copy of that.

Definition at line 279 of file APInt.h.

References VAL.

llvm::APInt::~APInt ( )
inline

Destructor.

Definition at line 295 of file APInt.h.

References needsCleanup(), and pVal.

llvm::APInt::APInt ( )
inlineexplicit

Default constructor that creates an uninitialized APInt.

This is useful for object deserialization (pair this with the static method Read).

Definition at line 304 of file APInt.h.

Referenced by ashr(), byteSwap(), doubleToBits(), floatToBits(), getAllOnesValue(), getHighBitsSet(), getLowBitsSet(), getMinValue(), getNullValue(), lshr(), multiplicativeInverse(), operator&(), operator*(), operator+(), operator-(), llvm::APSInt::operator==(), operator^(), operator|(), sext(), sge(), sgt(), shl(), sle(), slt(), sqrt(), trunc(), udiv(), udivrem(), uge(), ugt(), ule(), ult(), urem(), and zext().

Member Function Documentation

APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::abs ( ) const
inline

Get the absolute value;.

If *this is < 0 then return -(*this), otherwise *this;

Definition at line 1521 of file APInt.h.

References isNegative().

Referenced by llvm::ComputeMaskedBits(), llvm::SelectionDAG::ComputeMaskedBits(), findGCD(), gcd(), magic(), SimplifyICmpInst(), llvm::InstCombiner::visitICmpInst(), and llvm::InstCombiner::visitMul().

APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::And ( const APInt RHS) const
inline

Definition at line 768 of file APInt.h.

References operator&().

APInt APInt::ashr ( unsigned  shiftAmt) const
APInt APInt::ashr ( const APInt shiftAmt) const

Arithmetic right-shift function.

Arithmetic right-shift this APInt by shiftAmt.

Definition at line 1032 of file APInt.cpp.

References ashr(), and getLimitedValue().

double llvm::APInt::bitsToDouble ( ) const
inline

Converts APInt bits to a double.

The conversion does not do a translation from integer to double, it just re-interprets the bits as a double. Note that it is valid to do this on any bit width. Exactly 64 bits will be translated.

Definition at line 1446 of file APInt.h.

References I, pVal, T, and VAL.

Referenced by llvm::APFloat::convertToDouble(), and llvm::ExecutionEngine::getConstantValue().

float llvm::APInt::bitsToFloat ( ) const
inline

Converts APInt bits to a double.

The conversion does not do a translation from integer to float, it just re-interprets the bits as a float. Note that it is valid to do this on any bit width. Exactly 32 bits will be translated.

Definition at line 1460 of file APInt.h.

References F(), I, pVal, T, and VAL.

Referenced by llvm::APFloat::convertToFloat(), and llvm::ExecutionEngine::getConstantValue().

APInt APInt::byteSwap ( ) const
unsigned llvm::APInt::ceilLogBase2 ( ) const
inline
Returns
the ceil log base 2 of this APInt.

Definition at line 1503 of file APInt.h.

References countLeadingZeros().

void llvm::APInt::clearAllBits ( )
inline

Set every bit to 0.

Definition at line 1218 of file APInt.h.

References getNumWords(), llvm::Intrinsic::memset, pVal, and VAL.

Referenced by llvm::ComputeMaskedBits(), llvm::SelectionDAG::ComputeMaskedBits(), and operator*=().

void APInt::clearBit ( unsigned  bitPosition)

Set a given bit to 0.

Set the given bit to 0 whose position is given as "bitPosition".

Definition at line 592 of file APInt.cpp.

References pVal.

Referenced by ComputeSignedMinMaxValuesFromKnownBits(), flipBit(), and getSignedMaxValue().

unsigned APInt::countLeadingOnes ( ) const

Count the number of leading one bits.

This function is an APInt version of the countLeadingOnes_{32,64} functions in MathExtras.h. It counts the number of ones from the most significant bit to the first zero bit.

Returns
0 if the high order bit is not set, otherwise returns the number of 1 bits from the most significant to the least

Definition at line 709 of file APInt.cpp.

References llvm::CountLeadingOnes_64(), getNumWords(), and pVal.

Referenced by llvm::ComputeMaskedBits(), llvm::SelectionDAG::ComputeMaskedBits(), ComputeMaskedBitsMul(), getMinSignedBits(), getNumSignBits(), and sshl_ov().

unsigned llvm::APInt::countLeadingZeros ( ) const
inline

The APInt version of the countLeadingZeros functions in MathExtras.h.

It counts the number of zeros from the most significant bit to the first one bit.

Returns
BitWidth if the value is zero, otherwise returns the number of zeros from the most significant bit to the first one bits.

Definition at line 1340 of file APInt.h.

References llvm::countLeadingZeros(), and VAL.

Referenced by areUsedBitsDense(), ceilLogBase2(), llvm::ComputeNumSignBits(), llvm::SelectionDAG::ComputeNumSignBits(), getActiveBits(), llvm::SelectionDAG::getNode(), getNumSignBits(), logBase2(), llvm::TargetLowering::TargetLoweringOpt::ShrinkDemandedOp(), sshl_ov(), llvm::InstCombiner::visitAnd(), and llvm::InstCombiner::visitCallInst().

unsigned llvm::APInt::countPopulation ( ) const
inline

Count the number of bits set.

This function is an APInt version of the countPopulation_{32,64} functions in MathExtras.h. It counts the number of 1 bits in the APInt value.

Returns
0 if the value is zero, otherwise returns the number of set bits.

Definition at line 1394 of file APInt.h.

References llvm::CountPopulation_64(), and VAL.

Referenced by llvm::SelectionDAG::getNode(), isMaxSignedValue(), and ValueHasExactlyOneBitSet().

unsigned llvm::APInt::countTrailingOnes ( ) const
inline

Count the number of trailing one bits.

This function is an APInt version of the countTrailingOnes_{32,64} functions in MathExtras.h. It counts the number of ones from the least significant bit to the first zero bit.

Returns
BitWidth if the value is all ones, otherwise returns the number of ones from the least significant bit to the first zero bit.

Definition at line 1382 of file APInt.h.

References llvm::CountTrailingOnes_64(), and VAL.

Referenced by llvm::SelectionDAG::ComputeMaskedBits(), ComputeMaskedBitsAddSub(), ComputeMaskedBitsMul(), DemandedBitsLHSMask(), and isWordAligned().

unsigned APInt::countTrailingZeros ( ) const

Count the number of trailing zero bits.

This function is an APInt version of the countTrailingZeros_{32,64} functions in MathExtras.h. It counts the number of zeros from the least significant bit to the first set bit.

Returns
BitWidth if the value is zero, otherwise returns the number of zeros from the least significant bit to the first one bit.

Definition at line 736 of file APInt.cpp.

References llvm::countTrailingZeros(), getNumWords(), and pVal.

Referenced by areUsedBitsDense(), BinomialCoefficient(), llvm::TargetLowering::BuildUDIV(), DemandedBitsLHSMask(), llvm::SelectionDAG::getNode(), LowerSDIV(), ProcessUGT_ADDCST_ADD(), llvm::TargetLowering::SimplifySetCC(), SolveLinEquationWithOverflow(), llvm::APFloat::toString(), llvm::InstCombiner::visitCallInst(), llvm::InstCombiner::visitICmpInst(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().

static APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::doubleToBits ( double  V)
inlinestatic

Converts a double to APInt bits.

The conversion does not do a translation from double to integer, it just re-interprets the bits of the double.

Definition at line 1473 of file APInt.h.

References APInt(), I, and T.

Referenced by llvm::APFloat::APFloat(), and llvm::ExecutionEngine::getConstantValue().

void APInt::dump ( ) const

debug method

Definition at line 2253 of file APInt.cpp.

References llvm::dbgs(), llvm::SmallString< InternalLen >::str(), toStringSigned(), and toStringUnsigned().

bool llvm::APInt::eq ( const APInt RHS) const
inline

Equality comparison.

Compares this APInt with RHS for the validity of the equality relationship.

Returns
true if *this == Val

Definition at line 988 of file APInt.h.

Referenced by llvm::APSInt::operator==(), sgt(), sle(), ugt(), and ule().

int32_t llvm::APInt::exactLogBase2 ( ) const
inline
Returns
the log base 2 of this APInt if its an exact power of two, -1 otherwise

Definition at line 1509 of file APInt.h.

References isPowerOf2(), and logBase2().

Referenced by llvm::TargetLowering::SimplifyDemandedBits().

void llvm::APInt::flipAllBits ( )
inline

Toggle every bit to its opposite value.

Definition at line 1231 of file APInt.h.

References getNumWords(), pVal, and VAL.

Referenced by operator~(), slt(), and toString().

void APInt::flipBit ( unsigned  bitPosition)

Toggles a given bit to its opposite value.

Toggle every bit to its opposite value.

Toggle a given bit to its opposite value whose position is given as "bitPosition".

Toggle a given bit to its opposite value whose position is given as "bitPosition". Toggles a given bit to its opposite value.

Definition at line 604 of file APInt.cpp.

References clearBit(), and setBit().

static APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::floatToBits ( float  V)
inlinestatic

Converts a float to APInt bits.

The conversion does not do a translation from float to integer, it just re-interprets the bits of the float.

Definition at line 1486 of file APInt.h.

References APInt(), F(), I, and T.

Referenced by llvm::APFloat::APFloat(), and llvm::ExecutionEngine::getConstantValue().

unsigned llvm::APInt::getActiveBits ( ) const
inline

Compute the number of active bits in the value.

This function returns the number of active bits which is defined as the bit width minus the number of leading zeros. This is used in several computations to see how "wide" the value is.

Definition at line 1276 of file APInt.h.

References countLeadingZeros().

Referenced by areUsedBitsDense(), getActiveWords(), getLimitedValue(), getMinSignedBits(), llvm::ScalarEvolution::getSmallConstantTripCount(), llvm::ScalarEvolution::getSmallConstantTripMultiple(), getZExtValue(), isDereferenceablePointer(), llvm::ConstantExpr::isGEPWithNoNotionalOverIndexing(), isIndexInRangeOfSequentialType(), isIntN(), isRunOfOnes(), operator*=(), roundToDouble(), sqrt(), udiv(), udivrem(), llvm::ConstantInt::uge(), ult(), urem(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().

unsigned llvm::APInt::getActiveWords ( ) const
inline

Compute the number of active words in the value of this APInt.

This is used in conjunction with getActiveData to extract the raw value of the APInt.

Definition at line 1282 of file APInt.h.

References getActiveBits().

static APInt llvm::APInt::getAllOnesValue ( unsigned  numBits)
inlinestatic
unsigned APInt::getBitsNeeded ( StringRef  str,
uint8_t  radix 
)
static

Get bits required for string value.

This method determines how many bits are required to hold the APInt equivalent of the string given by str.

Definition at line 610 of file APInt.cpp.

References llvm::StringRef::begin(), llvm::StringRef::empty(), isNegative(), llvm::Intrinsic::log, logBase2(), and llvm::StringRef::size().

static APInt llvm::APInt::getBitsSet ( unsigned  numBits,
unsigned  loBit,
unsigned  hiBit 
)
inlinestatic

Get a value with a block of bits set.

Constructs an APInt value that has a contiguous range of bits set. The bits from loBit (inclusive) to hiBit (exclusive) will be set. All other bits will be zero. For example, with parameters(32, 0, 16) you would get 0x0000FFFF. If hiBit is less than loBit then the set bits "wrap". For example, with parameters (32, 28, 4), you would get 0xF000000F.

Parameters
numBitsthe intended bit width of the result
loBitthe index of the lowest bit set.
hiBitthe index of the highest bit set.
Returns
An APInt value with the requested bits set.

Definition at line 495 of file APInt.h.

References getHighBitsSet(), getLowBitsSet(), and shl().

Referenced by llvm::SelectionDAG::ComputeMaskedBits(), llvm::BuildVectorSDNode::isConstantSplat(), llvm::TargetLowering::SimplifyDemandedBits(), and llvm::InstCombiner::visitCallInst().

unsigned llvm::APInt::getBitWidth ( ) const
inline

Return the number of bits in the APInt.

Definition at line 1252 of file APInt.h.

Referenced by llvm::GEPOperator::accumulateConstantOffset(), llvm::CompileUnit::addConstantFPValue(), llvm::CompileUnit::addConstantValue(), llvm::TargetLowering::BuildUDIV(), llvm::ComputeMaskedBits(), ComputeMaskedBitsAddSub(), llvm::SparcTargetLowering::computeMaskedBitsForTargetNode(), llvm::AMDGPUTargetLowering::computeMaskedBitsForTargetNode(), llvm::ARMTargetLowering::computeMaskedBitsForTargetNode(), llvm::PPCTargetLowering::computeMaskedBitsForTargetNode(), llvm::X86TargetLowering::computeMaskedBitsForTargetNode(), llvm::TargetLowering::computeMaskedBitsForTargetNode(), llvm::computeMaskedBitsLoad(), ComputeMaskedBitsMul(), llvm::ComputeMultiple(), llvm::ComputeNumSignBits(), llvm::SelectionDAG::ComputeNumSignBits(), llvm::FunctionLoweringInfo::ComputePHILiveOutRegInfo(), ComputeRange(), ComputeSignedMinMaxValuesFromKnownBits(), ComputeUnsignedMinMaxValuesFromKnownBits(), llvm::ConstantFoldBinaryInstruction(), llvm::ConstantRange::ConstantRange(), llvm::APFloat::convertToInteger(), llvm::MDBuilder::createRange(), emitGlobalConstantFP(), llvm::InstCombiner::FoldICmpShrCst(), gcd(), llvm::ConstantInt::get(), getAdjustedPtr(), llvm::StringRef::getAsInteger(), llvm::ConstantRange::getBitWidth(), llvm::ConstantInt::getBitWidth(), llvm::ExecutionEngine::getConstantValue(), GetLinearExpression(), llvm::FunctionLoweringInfo::GetLiveOutRegInfo(), getNaturalGEPRecursively(), getNaturalGEPWithOffset(), llvm::SelectionDAG::getNode(), getShiftAmount(), getSplat(), IncorporateWeight(), llvm::isBytewiseValue(), isLikelyComplexAddressComputation(), llvm::APIntOps::isMask(), llvm::APSInt::isSameValue(), isSameValue(), isStridedPtr(), LoadIntFromMemory(), magic(), magicu(), llvm::ICmpInst::makeConstantRange(), llvm::MaskedValueIsZero(), operator&(), operator[](), operator|(), performORCombine(), PerformORCombine(), llvm::Interpreter::run(), sdiv(), sge(), sgt(), ShrinkDemandedConstant(), llvm::TargetLowering::SimplifyDemandedBits(), sle(), slt(), SolveLinEquationWithOverflow(), srem(), sshl_ov(), StoreIntToMemory(), llvm::Value::stripAndAccumulateInBoundsConstantOffsets(), llvm::ConstantRange::subtract(), llvm::APFloat::toString(), toString(), udivrem(), uge(), ugt(), ule(), ult(), llvm::InstCombiner::visitAnd(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), and llvm::WriteConstantInternal().

bool llvm::APInt::getBoolValue ( ) const
inline

Convert APInt to a boolean value.

This converts the APInt to a boolean value as a test against zero.

Definition at line 404 of file APInt.h.

Referenced by llvm::SelectionDAG::ComputeMaskedBits(), llvm::isKnownToBeAPowerOfTwo(), and llvm::PPCTargetLowering::SelectAddressRegReg().

APInt APInt::getHiBits ( unsigned  numBits) const

Compute an APInt containing numBits highbits from this APInt.

HiBits - This function returns the high "numBits" bits of this APInt.

Get an APInt with the same BitWidth as this APInt, just zero mask the low bits and right shift to the least significant bit.

Returns
the high "numBits" bits of this APInt.

Definition at line 671 of file APInt.cpp.

References llvm::APIntOps::lshr().

static APInt llvm::APInt::getHighBitsSet ( unsigned  numBits,
unsigned  hiBitsSet 
)
inlinestatic
uint64_t llvm::APInt::getLimitedValue ( uint64_t  Limit = ~0ULL) const
inline

If this value is smaller than the specified limit, return it, otherwise return the limit value. This causes the value to saturate to the limit.

Definition at line 408 of file APInt.h.

References getActiveBits(), and getZExtValue().

Referenced by ashr(), llvm::ComputeMultiple(), llvm::ConstantInt::getLimitedValue(), GetLinearExpression(), llvm::A64Imms::isFPImm(), lshr(), rotl(), rotr(), shl(), and SwitchToLookupTable().

APInt APInt::getLoBits ( unsigned  numBits) const

Compute an APInt containing numBits lowbits from this APInt.

LoBits - This function returns the low "numBits" bits of this APInt.

Get an APInt with the same BitWidth as this APInt, just zero mask the high bits.

Returns
the low "numBits" bits of this APInt.

Definition at line 676 of file APInt.cpp.

References llvm::APIntOps::lshr(), and llvm::APIntOps::shl().

static APInt llvm::APInt::getLowBitsSet ( unsigned  numBits,
unsigned  loBitsSet 
)
inlinestatic
static APInt llvm::APInt::getMaxValue ( unsigned  numBits)
inlinestatic
unsigned llvm::APInt::getMinSignedBits ( ) const
inline

Get the minimum bit size for this signed APInt.

Computes the minimum bit width for this APInt while considering it to be a signed (and probably negative) value. If the value is not negative, this function returns the same value as getActiveBits()+1. Otherwise, it returns the smallest bit width that will retain the negative value. For example, -1 can be written as 0b1 or 0xFFFFFFFFFF. 0b1 is shorter and so for -1, this function will always return 1.

Definition at line 1295 of file APInt.h.

References countLeadingOnes(), getActiveBits(), and isNegative().

Referenced by canFoldIVIncExpr(), getSExtValue(), and isSignedIntN().

static APInt llvm::APInt::getMinValue ( unsigned  numBits)
inlinestatic
static APInt llvm::APInt::getNullValue ( unsigned  numBits)
inlinestatic
unsigned llvm::APInt::getNumSignBits ( ) const
inline

Computes the number of leading bits of this APInt that are equal to its sign bit.

Definition at line 1360 of file APInt.h.

References countLeadingOnes(), countLeadingZeros(), and isNegative().

Referenced by llvm::SelectionDAG::ComputeNumSignBits(), and llvm::FunctionLoweringInfo::ComputePHILiveOutRegInfo().

unsigned llvm::APInt::getNumWords ( ) const
inline
static unsigned llvm::APInt::getNumWords ( unsigned  BitWidth)
inlinestatic

Get the number of words.

NOTE Here one word's bitwidth equals to that of uint64_t.

Returns
the number of words to hold the integer value with a given bit width.

Definition at line 1267 of file APInt.h.

static APInt llvm::APInt::getOneBitSet ( unsigned  numBits,
unsigned  BitNo 
)
inlinestatic
const uint64_t* llvm::APInt::getRawData ( ) const
inline
int64_t llvm::APInt::getSExtValue ( ) const
inline
static APInt llvm::APInt::getSignBit ( unsigned  BitWidth)
inlinestatic
static APInt llvm::APInt::getSignedMaxValue ( unsigned  numBits)
inlinestatic
static APInt llvm::APInt::getSignedMinValue ( unsigned  numBits)
inlinestatic
static APInt llvm::APInt::getSplat ( unsigned  NewLen,
const APInt V 
)
inlinestatic

Return a value containing V broadcasted over NewLen bits.

Definition at line 542 of file APInt.h.

References getBitWidth(), I, and zextOrSelf().

Referenced by getMemsetValue().

uint64_t llvm::APInt::getZExtValue ( ) const
inline
bool llvm::APInt::intersects ( const APInt RHS) const
inline

This operation tests if there are any pairs of corresponding bits between this APInt and RHS that are both set.

Definition at line 1144 of file APInt.h.

Referenced by llvm::SelectionDAGISel::CheckAndMask(), llvm::SelectionDAGISel::CheckOrMask(), llvm::SelectionDAG::ComputeMaskedBits(), llvm::TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(), and llvm::TargetLowering::SimplifyDemandedBits().

bool llvm::APInt::isAllOnesValue ( ) const
inline
bool llvm::APInt::isIntN ( unsigned  N) const
inline

Check if this APInt has an N-bits unsigned integer value.

Definition at line 376 of file APInt.h.

References getActiveBits(), and N.

Referenced by llvm::APIntOps::isIntN().

bool llvm::APInt::isMaxSignedValue ( ) const
inline

Determine if this is the largest signed value.

This checks to see if the value of this APInt is the maximum signed value for the APInt's bit width.

Definition at line 356 of file APInt.h.

References countPopulation(), isNegative(), and VAL.

Referenced by llvm::ConstantInt::isMaxValue(), and llvm::ScalarEvolution::SimplifyICmpOperands().

bool llvm::APInt::isMaxValue ( ) const
inline

Determine if this is the largest unsigned value.

This checks to see if the value of this APInt is the maximum unsigned value for the APInt's bit width.

Definition at line 350 of file APInt.h.

References isAllOnesValue().

Referenced by llvm::ConstantRange::ConstantRange(), llvm::ConstantRange::isFullSet(), llvm::ConstantInt::isMaxValue(), and llvm::ScalarEvolution::SimplifyICmpOperands().

bool llvm::APInt::isMinSignedValue ( ) const
inline

Determine if this is the smallest signed value.

This checks to see if the value of this APInt is the minimum signed value for the APInt's bit width.

Definition at line 371 of file APInt.h.

References isNegative(), isPowerOf2(), and VAL.

Referenced by llvm::ConstantFoldBinaryInstruction(), llvm::ScalarEvolution::getSignedRange(), llvm::ConstantInt::isMinValue(), isSignBit(), sdiv_ov(), llvm::ConstantRange::signExtend(), and llvm::ScalarEvolution::SimplifyICmpOperands().

bool llvm::APInt::isMinValue ( ) const
inline
bool llvm::APInt::isNegative ( ) const
inline
bool llvm::APInt::isNonNegative ( ) const
inline

Determine if this APInt Value is non-negative (>= 0)

This tests the high bit of the APInt to determine if it is unset.

Definition at line 327 of file APInt.h.

References isNegative().

Referenced by llvm::ComputeMaskedBits(), isStrictlyPositive(), LowerSDIV(), sadd_ov(), sshl_ov(), ssub_ov(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().

bool llvm::APInt::isPowerOf2 ( ) const
inline
static bool llvm::APInt::isSameValue ( const APInt I1,
const APInt I2 
)
inlinestatic

Determine if two APInts have the same value, after zero-extending one of them (if needed!) to ensure that the bit-widths match.

Definition at line 554 of file APInt.h.

References getBitWidth(), and zext().

bool llvm::APInt::isSignBit ( ) const
inline

Check if the APInt's value is returned by getSignBit.

Returns
true if this is the value returned by getSignBit.

Definition at line 399 of file APInt.h.

References isMinSignedValue().

Referenced by isSignBitCheck(), llvm::PatternMatch::is_sign_bit::isValue(), PerformSELECTCombine(), llvm::InstCombiner::visitAdd(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().

bool llvm::APInt::isSignedIntN ( unsigned  N) const
inline

Check if this APInt has an N-bits signed integer value.

Definition at line 382 of file APInt.h.

References getMinSignedBits(), and N.

Referenced by llvm::APIntOps::isSignedIntN().

bool llvm::APInt::isStrictlyPositive ( ) const
inline

Determine if this APInt Value is positive.

This tests if the value of this APInt is positive (> 0). Note that 0 is not a positive value.

Returns
true if this APInt is positive.

Definition at line 335 of file APInt.h.

References isNonNegative().

Referenced by llvm::TargetLowering::BuildSDIV(), llvm::InstCombiner::FoldICmpDivCst(), llvm::ScalarEvolution::isKnownNonPositive(), and llvm::ScalarEvolution::isKnownPositive().

unsigned llvm::APInt::logBase2 ( ) const
inline
APInt APInt::lshr ( unsigned  shiftAmt) const
APInt APInt::lshr ( const APInt shiftAmt) const

Logical right-shift function.

Logical right-shift this APInt by shiftAmt.

Definition at line 1121 of file APInt.cpp.

References getLimitedValue(), and lshr().

APInt::ms APInt::magic ( ) const

Calculate the magic numbers required to implement a signed integer division by a constant as a sequence of multiplies, adds and shifts. Requires that the divisor not be 0, 1, or -1. Taken from "Hacker's Delight", Henry S. Warren, Jr., chapter 10.

Definition at line 1395 of file APInt.cpp.

References abs(), getBitWidth(), getSignedMinValue(), isNegative(), lshr(), llvm::APInt::ms::m, llvm::APInt::ms::s, udiv(), uge(), ult(), and urem().

Referenced by llvm::TargetLowering::BuildSDIV().

APInt::mu APInt::magicu ( unsigned  LeadingZeros = 0) const

Calculate the magic numbers required to implement an unsigned integer division by a constant as a sequence of multiplies, adds and shifts. Requires that the divisor not be 0. Taken from "Hacker's Delight", Henry S. Warren, Jr., chapter 10. LeadingZeros can be used to simplify the calculation if the upper bits of the divided value are known zero.

Definition at line 1439 of file APInt.cpp.

References llvm::APInt::mu::a, allOnes(), getAllOnesValue(), getBitWidth(), getSignedMaxValue(), getSignedMinValue(), lshr(), llvm::APInt::mu::m, llvm::APInt::mu::s, udiv(), uge(), ult(), and urem().

Referenced by llvm::TargetLowering::BuildUDIV().

APInt APInt::multiplicativeInverse ( const APInt modulo) const
Returns
the multiplicative inverse for a given modulo.

Computes the multiplicative inverse of this APInt for a given modulo. The iterative extended Euclidean algorithm is used to solve for this value, however we simplify it to speed up calculating only the inverse, and take advantage of div+rem calculations. We also use some tricks to avoid copying (potentially large) APInts around.

Definition at line 1352 of file APInt.cpp.

References APInt(), isNegative(), udivrem(), and ult().

Referenced by BinomialCoefficient(), and SolveLinEquationWithOverflow().

bool llvm::APInt::ne ( const APInt RHS) const
inline

Inequality comparison.

Compares this APInt with RHS for the validity of the inequality relationship.

Returns
true if *this != Val

Definition at line 1012 of file APInt.h.

bool llvm::APInt::needsCleanup ( ) const
inline

Returns whether this instance allocated memory.

Definition at line 307 of file APInt.h.

Referenced by ~APInt().

bool llvm::APInt::operator! ( ) const
inline

Logical negation operator.

Performs logical negation operation on this APInt.

Returns
true if *this is zero, false otherwise.

Definition at line 631 of file APInt.h.

References getNumWords(), pVal, and VAL.

bool llvm::APInt::operator!= ( const APInt RHS) const
inline

Inequality operator.

Compares this APInt with RHS for the validity of the inequality relationship.

Returns
true if *this != Val

Definition at line 996 of file APInt.h.

bool llvm::APInt::operator!= ( uint64_t  Val) const
inline

Inequality operator.

Compares this APInt with a uint64_t for the validity of the inequality relationship.

Returns
true if *this != Val

Definition at line 1004 of file APInt.h.

APInt llvm::APInt::operator& ( const APInt RHS) const
inline

Bitwise AND operator.

Performs a bitwise AND operation on *this and RHS.

Returns
An APInt value representing the bitwise AND of *this and RHS.

Definition at line 762 of file APInt.h.

References APInt(), getBitWidth(), and VAL.

Referenced by And().

APInt & APInt::operator&= ( const APInt RHS)

Bitwise AND assignment operator.

Performs a bitwise AND operation on this APInt and RHS. The result is assigned to *this.

Returns
*this after ANDing with RHS.

Definition at line 397 of file APInt.cpp.

References getNumWords(), pVal, and VAL.

APInt APInt::operator* ( const APInt RHS) const

Multiplication operator.

Multiplies this APInt by RHS and returns the result.

Definition at line 460 of file APInt.cpp.

References APInt(), and VAL.

APInt & APInt::operator*= ( const APInt RHS)

Multiplication assignment operator.

Multiplies this APInt by RHS and assigns the result to *this.

Returns
*this

Definition at line 355 of file APInt.cpp.

References clearAllBits(), getActiveBits(), getMemory(), getNumWords(), llvm::Intrinsic::memcpy, mul(), pVal, and VAL.

APInt APInt::operator+ ( const APInt RHS) const

Addition operator.

Adds RHS to this APInt and returns the result.

Definition at line 469 of file APInt.cpp.

References add(), APInt(), getNumWords(), pVal, and VAL.

APInt llvm::APInt::operator+ ( uint64_t  RHS) const
inline

Definition at line 825 of file APInt.h.

References APInt().

const APInt llvm::APInt::operator++ ( int  )
inline

Postfix increment operator.

Returns
a new APInt value representing *this incremented by one

Definition at line 583 of file APInt.h.

APInt & APInt::operator++ ( )

Prefix increment operator.

Prefix increment operator. Increments the APInt by one.

Returns
*this incremented by one

Definition at line 196 of file APInt.cpp.

References add_1(), getNumWords(), pVal, and VAL.

APInt & APInt::operator+= ( const APInt RHS)

Addition assignment operator.

Adds RHS to *this and assigns the result to *this.

Returns
*this

Adds the RHS APint to this APInt.

Returns
this, after addition of RHS.

Definition at line 251 of file APInt.cpp.

References add(), getNumWords(), pVal, and VAL.

APInt llvm::APInt::operator- ( ) const
inline

Unary negation operator.

Negates *this using two's complement logic.

Returns
An APInt value representing the negation of *this.

Definition at line 624 of file APInt.h.

References APInt().

APInt APInt::operator- ( const APInt RHS) const

Subtraction operator.

Subtracts RHS from this APInt and returns the result.

Definition at line 478 of file APInt.cpp.

References APInt(), getNumWords(), pVal, sub(), and VAL.

APInt llvm::APInt::operator- ( uint64_t  RHS) const
inline

Definition at line 831 of file APInt.h.

References APInt().

const APInt llvm::APInt::operator-- ( int  )
inline

Postfix decrement operator.

Returns
a new APInt representing *this decremented by one.

Definition at line 597 of file APInt.h.

APInt & APInt::operator-- ( )

Prefix decrement operator.

Prefix decrement operator. Decrements the APInt by one.

Returns
*this decremented by one.

Definition at line 225 of file APInt.cpp.

References getNumWords(), pVal, sub_1(), and VAL.

APInt & APInt::operator-= ( const APInt RHS)

Subtraction assignment operator.

Subtracts RHS from *this and assigns the result to *this.

Returns
*this

Subtracts the RHS APInt from this APInt

Returns
this, after subtraction

Definition at line 278 of file APInt.cpp.

References getNumWords(), pVal, sub(), and VAL.

APInt llvm::APInt::operator<< ( unsigned  Bits) const
inline

Left logical shift operator.

Shifts this APInt left by Bits and returns the result.

Definition at line 836 of file APInt.h.

References shl().

APInt llvm::APInt::operator<< ( const APInt Bits) const
inline

Left logical shift operator.

Shifts this APInt left by Bits and returns the result.

Definition at line 841 of file APInt.h.

References shl().

APInt& llvm::APInt::operator<<= ( unsigned  shiftAmt)
inline

Left-shift assignment function.

Shifts *this left by shiftAmt and assigns the result to *this.

Returns
*this after shifting left by shiftAmt

Definition at line 748 of file APInt.h.

References shl().

APInt& llvm::APInt::operator= ( const APInt RHS)
inline

Copy assignment operator.

Returns
*this after assignment of RHS.

Definition at line 648 of file APInt.h.

References VAL.

Referenced by llvm::APSInt::operator=().

APInt & APInt::operator= ( uint64_t  RHS)

Assignment operator.

The RHS value is assigned to *this. If the significant bits in RHS exceed the bit width, the excess bits are truncated. If the bit width is larger than 64, the value is zero filled in the unspecified high order bits.

Returns
*this after assignment of RHS value.

Definition at line 154 of file APInt.cpp.

References getNumWords(), llvm::Intrinsic::memset, and pVal.

bool llvm::APInt::operator== ( const APInt RHS) const
inline

Equality operator.

Compares this APInt with RHS for the validity of the equality relationship.

Definition at line 963 of file APInt.h.

References VAL.

bool llvm::APInt::operator== ( uint64_t  Val) const
inline

Equality operator.

Compares this APInt with a uint64_t for the validity of the equality relationship.

Returns
true if *this == Val

Definition at line 976 of file APInt.h.

References VAL.

bool llvm::APInt::operator[] ( unsigned  bitPosition) const
inline

Array-indexing support.

Returns
the bit value at bitPosition

Definition at line 948 of file APInt.h.

References getBitWidth(), pVal, and VAL.

APInt llvm::APInt::operator^ ( const APInt RHS) const
inline

Bitwise XOR operator.

Performs a bitwise XOR operation on *this and RHS.

Returns
An APInt value representing the bitwise XOR of *this and RHS.

Definition at line 799 of file APInt.h.

References APInt(), and VAL.

Referenced by Xor().

APInt & APInt::operator^= ( const APInt RHS)

Bitwise XOR assignment operator.

Performs a bitwise XOR operation on this APInt and RHS. The result is assigned to *this.

Returns
*this after XORing with RHS.

Definition at line 421 of file APInt.cpp.

References getNumWords(), pVal, and VAL.

APInt llvm::APInt::operator| ( const APInt RHS) const
inline

Bitwise OR operator.

Performs a bitwise OR operation on *this and RHS.

Returns
An APInt value representing the bitwise OR of *this and RHS.

Definition at line 777 of file APInt.h.

References APInt(), getBitWidth(), and VAL.

Referenced by Or().

APInt & APInt::operator|= ( const APInt RHS)

Bitwise OR assignment operator.

Performs a bitwise OR operation on this APInt and RHS. The result is assigned *this;

Returns
*this after ORing with RHS.

Definition at line 409 of file APInt.cpp.

References getNumWords(), pVal, and VAL.

APInt& llvm::APInt::operator|= ( uint64_t  RHS)
inline

Bitwise OR assignment operator.

Performs a bitwise OR operation on this APInt and RHS. RHS is logically zero-extended or truncated to match the bit-width of the LHS.

Definition at line 704 of file APInt.h.

References pVal, and VAL.

APInt llvm::APInt::operator~ ( ) const
inline

Unary bitwise complement operator.

Performs a bitwise complement operation on this APInt.

Returns
an APInt that is the bitwise complement of *this

Definition at line 613 of file APInt.h.

References flipAllBits().

APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::Or ( const APInt RHS) const
inline

Bitwise OR function.

Performs a bitwise or on *this and RHS. This is implemented bny simply calling operator|.

Returns
An APInt value representing the bitwise OR of *this and RHS.

Definition at line 790 of file APInt.h.

References operator|().

void APInt::print ( raw_ostream OS,
bool  isSigned 
) const

Definition at line 2261 of file APInt.cpp.

References llvm::SmallString< InternalLen >::str(), and toString().

Referenced by emitDebugValueComment(), and llvm::operator<<().

void APInt::Profile ( FoldingSetNodeID id) const

Profile - This method 'profiles' an APInt for use with FoldingSet.

Used to insert APInt objects, or objects that contain APInt objects, into FoldingSets.

Definition at line 165 of file APInt.cpp.

References llvm::FoldingSetNodeID::AddInteger(), getNumWords(), and pVal.

Referenced by llvm::APSInt::Profile().

APInt APInt::rotl ( unsigned  rotateAmt) const

Rotate left by rotateAmt.

Definition at line 1244 of file APInt.cpp.

References lshr(), and shl().

Referenced by llvm::SelectionDAG::FoldConstantArithmetic(), and rotl().

APInt APInt::rotl ( const APInt rotateAmt) const

Rotate left by rotateAmt.

Definition at line 1240 of file APInt.cpp.

References getLimitedValue(), and rotl().

APInt APInt::rotr ( unsigned  rotateAmt) const

Rotate right by rotateAmt.

Definition at line 1255 of file APInt.cpp.

References lshr(), and shl().

Referenced by llvm::SelectionDAG::FoldConstantArithmetic(), and rotr().

APInt APInt::rotr ( const APInt rotateAmt) const

Rotate right by rotateAmt.

Definition at line 1251 of file APInt.cpp.

References getLimitedValue(), and rotr().

double APInt::roundToDouble ( bool  isSigned) const

Converts this APInt to a double value.

RoundToDouble - This function converts this APInt to a double.

The layout for double is as following (IEEE Standard 754):

Sign Exponent Fraction Bias
1[63] 11[62-52] 52[51-00] 1023

Definition at line 858 of file APInt.cpp.

References llvm::Intrinsic::exp, getActiveBits(), I, pVal, sext(), and T.

Referenced by llvm::ExecutionEngine::getConstantValue(), and llvm::APIntOps::RoundAPIntToDouble().

double llvm::APInt::roundToDouble ( ) const
inline

Converts this unsigned APInt to a double value.

Definition at line 1436 of file APInt.h.

References roundToDouble().

Referenced by roundToDouble(), and signedRoundToDouble().

APInt APInt::sadd_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 1996 of file APInt.cpp.

References isNonNegative().

Referenced by llvm::ConstantFoldCall(), and MaintainNoSignedWrap().

APInt APInt::sdiv ( const APInt RHS) const
APInt APInt::sdiv_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2022 of file APInt.cpp.

References isAllOnesValue(), isMinSignedValue(), and sdiv().

void APInt::sdivrem ( const APInt LHS,
const APInt RHS,
APInt Quotient,
APInt Remainder 
)
static

Definition at line 1978 of file APInt.cpp.

References isNegative(), and udivrem().

Referenced by ceilingOfQuotient(), findGCD(), and floorOfQuotient().

void llvm::APInt::setAllBits ( )
inline

Set every bit to 1.

Definition at line 1200 of file APInt.h.

References getNumWords(), pVal, and VAL.

Referenced by llvm::ComputeMaskedBits().

void APInt::setBit ( unsigned  bitPosition)
APInt APInt::sext ( unsigned  width) const

Sign extend to a new width.

This operation sign extends the APInt to a new width. If the high order bit is set, the fill on the left will be done with 1 bits, otherwise zero. It is an error to specify a width that is less than or equal to the current width.

Definition at line 942 of file APInt.cpp.

References APInt(), getMemory(), getNumWords(), getRawData(), and pVal.

Referenced by ComputeRange(), llvm::APSInt::extend(), llvm::ExecutionEngine::getConstantValue(), MultiplyOverflows(), roundToDouble(), sdiv(), sextOrSelf(), sextOrTrunc(), llvm::ConstantRange::signExtend(), srem(), and llvm::InstCombiner::visitCallInst().

APInt APInt::sextOrSelf ( unsigned  width) const

Sign extend or truncate to width.

Make this APInt have the bit width given by width. The value is sign extended, or left alone to make it that width.

Definition at line 1024 of file APInt.cpp.

References sext().

APInt APInt::sextOrTrunc ( unsigned  width) const

Sign extend or truncate to width.

Make this APInt have the bit width given by width. The value is sign extended, truncated, or left alone to make it that width.

Definition at line 1010 of file APInt.cpp.

References sext(), and trunc().

Referenced by llvm::GEPOperator::accumulateConstantOffset(), llvm::APSInt::extOrTrunc(), and llvm::SelectionDAG::getNode().

bool llvm::APInt::sge ( const APInt RHS) const
inline

Signed greather or equal comparison.

Regards both *this and RHS as signed quantities and compares them for validity of the greater-or-equal relationship.

Returns
true if *this >= RHS when both are considered signed.

Definition at line 1132 of file APInt.h.

References slt().

Referenced by llvm::ConstantFoldCompareInstruction(), llvm::SelectionDAG::FoldSetCC(), llvm::SCEVAddRecExpr::getNumIterationsInRange(), and llvm::APSInt::operator>=().

bool llvm::APInt::sge ( uint64_t  RHS) const
inline

Signed greater or equal comparison.

Regards both *this as a signed quantity and compares it with RHS for the validity of the greater-or-equal relationship.

Returns
true if *this >= RHS when considered signed.

Definition at line 1140 of file APInt.h.

References APInt(), getBitWidth(), and sge().

Referenced by sge().

bool llvm::APInt::sgt ( const APInt RHS) const
inline

Signed greather than comparison.

Regards both *this and RHS as signed quantities and compares them for the validity of the greater-than relationship.

Returns
true if *this > RHS when both are considered signed.

Definition at line 1100 of file APInt.h.

References eq(), and slt().

Referenced by ceilingOfQuotient(), llvm::ConstantFoldCompareInstruction(), floorOfQuotient(), llvm::InstCombiner::FoldAndOfICmps(), llvm::InstCombiner::FoldOrOfICmps(), llvm::SelectionDAG::FoldSetCC(), HasAddOverflow(), HasSubOverflow(), maxAPInt(), MultiplyOverflows(), llvm::APSInt::operator>(), llvm::APIntOps::smax(), SwitchToLookupTable(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().

bool llvm::APInt::sgt ( uint64_t  RHS) const
inline

Signed greater than comparison.

Regards both *this as a signed quantity and compares it with RHS for the validity of the greater-than relationship.

Returns
true if *this > RHS when considered signed.

Definition at line 1108 of file APInt.h.

References APInt(), getBitWidth(), and sgt().

Referenced by sgt().

APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::shl ( unsigned  shiftAmt) const
inline
APInt APInt::shl ( const APInt shiftAmt) const

Left-shift function.

Left-shift this APInt by shiftAmt.

Definition at line 1185 of file APInt.cpp.

References getLimitedValue(), and shl().

double llvm::APInt::signedRoundToDouble ( ) const
inline

Converts this signed APInt to a double value.

Definition at line 1439 of file APInt.h.

References roundToDouble().

Referenced by llvm::ExecutionEngine::getConstantValue(), llvm::APIntOps::RoundSignedAPIntToDouble(), and llvm::APIntOps::RoundSignedAPIntToFloat().

bool llvm::APInt::sle ( const APInt RHS) const
inline

Signed less or equal comparison.

Regards both *this and RHS as signed quantities and compares them for validity of the less-or-equal relationship.

Returns
true if *this <= RHS when both are considered signed.

Definition at line 1068 of file APInt.h.

References eq(), and slt().

Referenced by llvm::ConstantFoldCompareInstruction(), llvm::SelectionDAG::FoldSetCC(), llvm::APSInt::operator<=(), and llvm::InstCombiner::visitICmpInst().

bool llvm::APInt::sle ( uint64_t  RHS) const
inline

Signed less or equal comparison.

Regards both *this as a signed quantity and compares it with RHS for the validity of the less-or-equal relationship.

Returns
true if *this <= RHS when considered signed.

Definition at line 1076 of file APInt.h.

References APInt(), getBitWidth(), and sle().

Referenced by sle().

bool APInt::slt ( const APInt RHS) const

Signed less than comparison.

Regards both *this and RHS as signed quantities and compares them for validity of the less-than relationship.

Returns
true if *this < RHS when both are considered signed.

Definition at line 547 of file APInt.cpp.

References flipAllBits(), isNegative(), ugt(), ult(), and VAL.

Referenced by ceilingOfQuotient(), llvm::ConstantFoldCompareInstruction(), findGCD(), floorOfQuotient(), llvm::SelectionDAG::FoldSetCC(), llvm::MDNode::getMostGenericRange(), HasAddOverflow(), HasSubOverflow(), minAPInt(), MultiplyOverflows(), llvm::APSInt::operator<(), sge(), sgt(), sle(), llvm::APIntOps::smin(), SwitchToLookupTable(), and llvm::InstCombiner::visitICmpInst().

bool llvm::APInt::slt ( uint64_t  RHS) const
inline

Signed less than comparison.

Regards both *this as a signed quantity and compares it with RHS for the validity of the less-than relationship.

Returns
true if *this < RHS when considered signed.

Definition at line 1044 of file APInt.h.

References APInt(), getBitWidth(), and slt().

Referenced by slt().

APInt APInt::smul_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2028 of file APInt.cpp.

References sdiv().

Referenced by llvm::ConstantFoldCall().

APInt APInt::sqrt ( ) const

Compute the square root.

Definition at line 1269 of file APInt.cpp.

References APInt(), getActiveBits(), llvm::Intrinsic::round, shl(), udiv(), ule(), and ult().

APInt APInt::srem ( const APInt RHS) const
APInt APInt::sshl_ov ( unsigned  Amt,
bool Overflow 
) const

Definition at line 2048 of file APInt.cpp.

References countLeadingOnes(), countLeadingZeros(), getBitWidth(), and isNonNegative().

APInt APInt::ssub_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2009 of file APInt.cpp.

References isNonNegative().

Referenced by llvm::ConstantFoldCall(), and MaintainNoSignedWrap().

integerPart APInt::tcAdd ( integerPart ,
const integerPart ,
integerPart  carry,
unsigned   
)
static

DST += RHS + CARRY where CARRY is zero or one. Returns the carry flag.

Definition at line 2456 of file APInt.cpp.

void APInt::tcAnd ( integerPart dst,
const integerPart rhs,
unsigned int  parts 
)
static

The obvious AND, OR and XOR and complement operations.

Definition at line 2787 of file APInt.cpp.

void APInt::tcAssign ( integerPart dst,
const integerPart src,
unsigned int  parts 
)
static

Assign one bignum to another.

Definition at line 2335 of file APInt.cpp.

Referenced by llvm::APFloat::convert(), llvm::APFloat::convertFromSignExtendedInteger(), powerOf5(), tcDivide(), and tcExtract().

void APInt::tcClearBit ( integerPart parts,
unsigned int  bit 
)
static

Clear the given bit of a bignum. Zero-based.

Definition at line 2373 of file APInt.cpp.

References llvm::integerPartWidth.

int APInt::tcCompare ( const integerPart lhs,
const integerPart rhs,
unsigned int  parts 
)
static

Comparison (unsigned) of two bignums.

Definition at line 2827 of file APInt.cpp.

Referenced by tcDivide().

void APInt::tcComplement ( integerPart dst,
unsigned int  parts 
)
static

Definition at line 2817 of file APInt.cpp.

Referenced by tcNegate().

integerPart APInt::tcDecrement ( integerPart dst,
unsigned int  parts 
)
static

Decrement a bignum in-place. Return the borrow flag.

Definition at line 2859 of file APInt.cpp.

Referenced by llvm::APFloat::next().

int APInt::tcDivide ( integerPart lhs,
const integerPart rhs,
integerPart remainder,
integerPart scratch,
unsigned int  parts 
)
static

If RHS is zero LHS and REMAINDER are left unchanged, return one. Otherwise set LHS to LHS / RHS with the fractional part discarded, set REMAINDER to the remainder, return zero. i.e.

OLD_LHS = RHS * LHS + REMAINDER

SCRATCH is a bignum of the same size as the operands and result for use by the routine; its contents need not be initialized and are destroyed. LHS, REMAINDER and SCRATCH must be distinct.

Definition at line 2674 of file APInt.cpp.

References llvm::integerPartWidth, tcAssign(), tcCompare(), tcMSB(), tcSet(), tcShiftLeft(), tcShiftRight(), and tcSubtract().

void APInt::tcExtract ( integerPart dst,
unsigned int  dstCount,
const integerPart src,
unsigned int  srcBits,
unsigned int  srcLSB 
)
static

Copy the bit vector of width srcBITS from SRC, starting at bit srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes the least significant bit of DST. All high bits above srcBITS in DST are zero-filled.

Definition at line 2422 of file APInt.cpp.

References llvm::integerPartWidth, tcAssign(), and tcShiftRight().

int APInt::tcExtractBit ( const integerPart parts,
unsigned int  bit 
)
static
unsigned int APInt::tcFullMultiply ( integerPart ,
const integerPart ,
const integerPart ,
unsigned  ,
unsigned   
)
static

DST = LHS * RHS, where DST has width the sum of the widths of the operands. No overflow occurs. DST must be disjoint from both operands. Returns the number of parts required to hold the result.

Definition at line 2640 of file APInt.cpp.

References tcMultiplyPart(), and tcSet().

Referenced by powerOf5().

integerPart APInt::tcIncrement ( integerPart dst,
unsigned int  parts 
)
static

Increment a bignum in-place. Return the carry flag.

Definition at line 2846 of file APInt.cpp.

Referenced by tcNegate().

bool APInt::tcIsZero ( const integerPart src,
unsigned int  parts 
)
static

Returns true if a bignum is zero, false otherwise.

Definition at line 2345 of file APInt.cpp.

unsigned int APInt::tcLSB ( const integerPart parts,
unsigned int  n 
)
static

Returns the bit number of the least or most significant set bit of a number. If the input number has no bits set -1U is returned.

Definition at line 2382 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by lostFractionThroughTruncation().

unsigned int APInt::tcMSB ( const integerPart parts,
unsigned int  n 
)
static

Definition at line 2400 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by tcDivide().

int APInt::tcMultiply ( integerPart ,
const integerPart ,
const integerPart ,
unsigned   
)
static

DST = LHS * RHS, where DST has the same width as the operands and is filled with the least significant parts of the result. Returns one if overflow occurred, otherwise zero. DST must be disjoint from both operands.

Definition at line 2617 of file APInt.cpp.

References tcMultiplyPart(), and tcSet().

int APInt::tcMultiplyPart ( integerPart dst,
const integerPart src,
integerPart  multiplier,
integerPart  carry,
unsigned int  srcParts,
unsigned int  dstParts,
bool  add 
)
static

DST += SRC * MULTIPLIER + PART if add is true DST = SRC * MULTIPLIER + PART if add is false

Requires 0 <= DSTPARTS <= SRCPARTS + 1. If DST overlaps SRC they must start at the same point, i.e. DST == SRC.

If DSTPARTS == SRC_PARTS + 1 no overflow occurs and zero is returned. Otherwise DST is filled with the least significant DSTPARTS parts of the result, and if all of the omitted higher parts were zero return zero, otherwise overflow occurred and return one.

Definition at line 2524 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by tcFullMultiply(), and tcMultiply().

void APInt::tcNegate ( integerPart dst,
unsigned int  parts 
)
static

Negate a bignum in-place.

Definition at line 2506 of file APInt.cpp.

References tcComplement(), and tcIncrement().

Referenced by llvm::APFloat::convertFromSignExtendedInteger().

void APInt::tcOr ( integerPart dst,
const integerPart rhs,
unsigned int  parts 
)
static

Definition at line 2797 of file APInt.cpp.

void APInt::tcSet ( integerPart dst,
integerPart  part,
unsigned int  parts 
)
static

Sets the least significant part of a bignum to the input value, and zeroes out higher parts.

Definition at line 2322 of file APInt.cpp.

Referenced by llvm::APFloat::convert(), llvm::APFloat::next(), tcDivide(), tcFullMultiply(), and tcMultiply().

void APInt::tcSetBit ( integerPart parts,
unsigned int  bit 
)
static

Set the given bit of a bignum. Zero-based.

Definition at line 2366 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by llvm::APFloat::convert(), and llvm::APFloat::next().

void APInt::tcSetLeastSignificantBits ( integerPart dst,
unsigned int  parts,
unsigned int  bits 
)
static

Set the least significant BITS and clear the rest.

Definition at line 2874 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by llvm::APFloat::convertToInteger().

void APInt::tcShiftLeft ( integerPart dst,
unsigned int  parts,
unsigned int  count 
)
static

Shift a bignum left COUNT bits. Shifted in bits are zero. There are no restrictions on COUNT.

Definition at line 2721 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by llvm::APFloat::convert(), llvm::APFloat::convertToInteger(), and tcDivide().

void APInt::tcShiftRight ( integerPart dst,
unsigned int  parts,
unsigned int  count 
)
static

Shift a bignum right COUNT bits. Shifted in bits are zero. There are no restrictions on COUNT.

Definition at line 2755 of file APInt.cpp.

References llvm::integerPartWidth.

Referenced by shiftRight(), tcDivide(), and tcExtract().

integerPart APInt::tcSubtract ( integerPart ,
const integerPart ,
integerPart  carry,
unsigned   
)
static

DST -= RHS + CARRY where CARRY is zero or one. Returns the carry flag.

Definition at line 2481 of file APInt.cpp.

Referenced by tcDivide().

void APInt::tcXor ( integerPart dst,
const integerPart rhs,
unsigned int  parts 
)
static

Definition at line 2807 of file APInt.cpp.

void APInt::toString ( SmallVectorImpl< char > &  Str,
unsigned  Radix,
bool  Signed,
bool  formatAsCLiteral = false 
) const
std::string APInt::toString ( unsigned  Radix = 10,
bool  Signed = true 
) const

Return the APInt as a std::string.

Note that this is an inefficient method. It is better to pass in a SmallVector/SmallString to the methods above to avoid thrashing the heap for the string.

toString - This returns the APInt as a std::string. Note that this is an inefficient method. It is better to pass in a SmallVector/SmallString to the methods above.

Definition at line 2246 of file APInt.cpp.

References llvm::NVPTX::PTXLdStInstCode::Signed, llvm::SmallString< InternalLen >::str(), and toString().

void llvm::APInt::toStringSigned ( SmallVectorImpl< char > &  Str,
unsigned  Radix = 10 
) const
inline

Considers the APInt to be signed and converts it into a string in the radix given. The radix can be 2, 8, 10, 16, or 36.

Definition at line 1418 of file APInt.h.

References toString().

Referenced by dump().

void llvm::APInt::toStringUnsigned ( SmallVectorImpl< char > &  Str,
unsigned  Radix = 10 
) const
inline

Considers the APInt to be unsigned and converts it into a string in the radix given. The radix can be 2, 8, 10 16, or 36.

Definition at line 1412 of file APInt.h.

References toString().

Referenced by dump(), and llvm::Interpreter::run().

APInt APInt::trunc ( unsigned  width) const
APInt APInt::uadd_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2003 of file APInt.cpp.

References ult().

Referenced by llvm::ConstantFoldCall().

APInt APInt::udiv ( const APInt RHS) const

Unsigned division operation.

Perform an unsigned divide operation on this APInt by RHS. Both this and RHS are treated as unsigned quantities for purposes of this division.

Returns
a new APInt value containing the division result

Definition at line 1842 of file APInt.cpp.

References APInt(), getActiveBits(), pVal, ult(), and VAL.

Referenced by llvm::ConstantFoldBinaryInstruction(), llvm::SelectionDAG::FoldConstantArithmetic(), llvm::ExecutionEngine::getConstantValue(), magic(), magicu(), llvm::APSInt::operator/(), llvm::APSInt::operator/=(), sdiv(), SimplifyICmpInst(), sqrt(), SymbolicallyEvaluateGEP(), llvm::ConstantRange::udiv(), llvm::APIntOps::udiv(), umul_ov(), and llvm::Interpreter::visitBinaryOperator().

void APInt::udivrem ( const APInt LHS,
const APInt RHS,
APInt Quotient,
APInt Remainder 
)
static

Dual division/remainder interface.

Sometimes it is convenient to divide two APInt values and obtain both the quotient and remainder. This function does both operations in the same computation making it a little more efficient. The pair of input arguments may overlap with the pair of output arguments. It is safe to call udivrem(X, Y, X, Y), for example.

Definition at line 1938 of file APInt.cpp.

References APInt(), getActiveBits(), getBitWidth(), pVal, ult(), and VAL.

Referenced by multiplicativeInverse(), sdivrem(), llvm::APFloat::toString(), and llvm::ConstantRange::truncate().

bool llvm::APInt::uge ( const APInt RHS) const
inline

Unsigned greater or equal comparison.

Regards both *this and RHS as unsigned quantities and compares them for validity of the greater-or-equal relationship.

Returns
true if *this >= RHS when both are considered unsigned.

Definition at line 1116 of file APInt.h.

References ult().

Referenced by llvm::ConstantFoldCompareInstruction(), llvm::SelectionDAG::FoldSetCC(), getNaturalGEPRecursively(), magic(), magicu(), llvm::APSInt::operator>=(), performShiftToAllZeros(), SymbolicallyEvaluateGEP(), llvm::ConstantRange::truncate(), llvm::ConstantRange::unionWith(), and llvm::InstCombiner::visitICmpInst().

bool llvm::APInt::uge ( uint64_t  RHS) const
inline

Unsigned greater or equal comparison.

Regards both *this as an unsigned quantity and compares it with RHS for the validity of the greater-or-equal relationship.

Returns
true if *this >= RHS when considered unsigned.

Definition at line 1124 of file APInt.h.

References APInt(), getBitWidth(), and uge().

Referenced by uge().

bool llvm::APInt::ugt ( const APInt RHS) const
inline

Unsigned greather than comparison.

Regards both *this and RHS as unsigned quantities and compares them for the validity of the greater-than relationship.

Returns
true if *this > RHS when both are considered unsigned.

Definition at line 1084 of file APInt.h.

References eq(), and ult().

Referenced by llvm::ConstantFoldCompareInstruction(), llvm::InstCombiner::FoldAndOfICmps(), llvm::InstCombiner::FoldOrOfICmps(), llvm::SelectionDAG::FoldSetCC(), GatherConstantCompares(), HasSubOverflow(), llvm::ConstantRange::isWrappedSet(), MultiplyOverflows(), llvm::APSInt::operator>(), llvm::ConstantRange::shl(), slt(), llvm::APIntOps::umax(), llvm::ConstantRange::unionWith(), usub_ov(), and llvm::ObjectSizeOffsetVisitor::visitCallSite().

bool llvm::APInt::ugt ( uint64_t  RHS) const
inline

Unsigned greater than comparison.

Regards both *this as an unsigned quantity and compares it with RHS for the validity of the greater-than relationship.

Returns
true if *this > RHS when considered unsigned.

Definition at line 1092 of file APInt.h.

References APInt(), getBitWidth(), and ugt().

Referenced by ugt().

bool llvm::APInt::ule ( const APInt RHS) const
inline

Unsigned less or equal comparison.

Regards both *this and RHS as unsigned quantities and compares them for validity of the less-or-equal relationship.

Returns
true if *this <= RHS when both are considered unsigned.

Definition at line 1052 of file APInt.h.

References eq(), and ult().

Referenced by llvm::ConstantFoldCompareInstruction(), llvm::ConstantRange::contains(), llvm::InstCombiner::FoldOrOfICmps(), llvm::SelectionDAG::FoldSetCC(), llvm::ConstantRange::intersectWith(), llvm::APSInt::operator<=(), sqrt(), llvm::ConstantRange::truncate(), llvm::ConstantRange::unionWith(), and llvm::InstCombiner::visitICmpInst().

bool llvm::APInt::ule ( uint64_t  RHS) const
inline

Unsigned less or equal comparison.

Regards both *this as an unsigned quantity and compares it with RHS for the validity of the less-or-equal relationship.

Returns
true if *this <= RHS when considered unsigned.

Definition at line 1060 of file APInt.h.

References APInt(), getBitWidth(), and ule().

Referenced by ule().

bool APInt::ult ( const APInt RHS) const
bool llvm::APInt::ult ( uint64_t  RHS) const
inline

Unsigned less than comparison.

Regards both *this as an unsigned quantity and compares it with RHS for the validity of the less-than relationship.

Returns
true if *this < RHS when considered unsigned.

Definition at line 1028 of file APInt.h.

References APInt(), getBitWidth(), and ult().

Referenced by ult().

APInt APInt::umul_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2038 of file APInt.cpp.

References udiv().

Referenced by llvm::ConstantFoldCall(), and llvm::InstCombiner::visitCallInst().

APInt APInt::urem ( const APInt RHS) const

Unsigned remainder operation.

Perform an unsigned remainder operation on this APInt with RHS being the divisor. Both this and RHS are treated as unsigned quantities for purposes of this operation. Note that this is a true remainder operation and not a modulo operation because the sign follows the sign of the dividend which is *this.

Returns
a new APInt value containing the remainder result

Definition at line 1890 of file APInt.cpp.

References APInt(), getActiveBits(), pVal, ult(), and VAL.

Referenced by llvm::ConstantFoldBinaryInstruction(), llvm::SelectionDAG::FoldConstantArithmetic(), llvm::ExecutionEngine::getConstantValue(), llvm::ScalarEvolution::getUDivExpr(), magic(), magicu(), llvm::APSInt::operator%(), llvm::APSInt::operator%=(), srem(), llvm::APIntOps::urem(), and llvm::Interpreter::visitBinaryOperator().

APInt APInt::usub_ov ( const APInt RHS,
bool Overflow 
) const

Definition at line 2016 of file APInt.cpp.

References ugt().

Referenced by llvm::ConstantFoldCall().

APInt LLVM_ATTRIBUTE_UNUSED_RESULT llvm::APInt::Xor ( const APInt RHS) const
inline

Bitwise XOR function.

Performs a bitwise XOR operation on *this and RHS. This is implemented through the usage of operator^.

Returns
An APInt value representing the bitwise XOR of *this and RHS.

Definition at line 812 of file APInt.h.

References operator^().

APInt APInt::zext ( unsigned  width) const
APInt APInt::zextOrSelf ( unsigned  width) const

Zero extend or truncate to width.

Make this APInt have the bit width given by width. The value is zero extended, or left alone to make it that width.

Definition at line 1018 of file APInt.cpp.

References zext().

Referenced by getSplat(), and llvm::ObjectSizeOffsetVisitor::visitCallSite().

APInt APInt::zextOrTrunc ( unsigned  width) const

Friends And Related Function Documentation

hash_code hash_value ( const APInt Arg)
friend

Overload to compute a hash_code for an APInt value.

Member Data Documentation

uint64_t* llvm::APInt::pVal
uint64_t llvm::APInt::VAL

The documentation for this class was generated from the following files: