clang 19.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
clang::interp::Integral< Bits, Signed > Class Template Referencefinal

Wrapper around numeric types. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/Interp/Integral.h"

Public Types

using AsUnsigned = Integral< Bits, false >
 

Public Member Functions

 Integral ()
 Zero-initializes an integral.
 
template<unsigned SrcBits, bool SrcSign>
 Integral (Integral< SrcBits, SrcSign > V)
 Constructs an integral from another integral.
 
 Integral (const APSInt &V)
 Construct an integral from a value based on signedness.
 
bool operator< (Integral RHS) const
 
bool operator> (Integral RHS) const
 
bool operator<= (Integral RHS) const
 
bool operator>= (Integral RHS) const
 
bool operator== (Integral RHS) const
 
bool operator!= (Integral RHS) const
 
bool operator> (unsigned RHS) const
 
Integral operator- () const
 
Integral operator- (const Integral &Other) const
 
Integral operator~ () const
 
template<unsigned DstBits, bool DstSign>
 operator Integral< DstBits, DstSign > () const
 
 operator unsigned () const
 
 operator int64_t () const
 
 operator uint64_t () const
 
 operator int32_t () const
 
APSInt toAPSInt () const
 
APSInt toAPSInt (unsigned NumBits) const
 
APValue toAPValue () const
 
Integral< Bits, falsetoUnsigned () const
 
bool isZero () const
 
bool isMin () const
 
bool isMinusOne () const
 
bool isNegative () const
 
bool isPositive () const
 
ComparisonCategoryResult compare (const Integral &RHS) const
 
std::string toDiagnosticString (const ASTContext &Ctx) const
 
unsigned countLeadingZeros () const
 
Integral truncate (unsigned TruncBits) const
 
void print (llvm::raw_ostream &OS) const
 

Static Public Member Functions

static constexpr unsigned bitWidth ()
 
static constexpr bool isSigned ()
 
static Integral min (unsigned NumBits)
 
static Integral max (unsigned NumBits)
 
template<typename ValT >
static Integral from (ValT Value)
 
template<unsigned SrcBits, bool SrcSign>
static std::enable_if_t< SrcBits !=0, Integralfrom (Integral< SrcBits, SrcSign > Value)
 
static Integral zero ()
 
template<typename T >
static Integral from (T Value, unsigned NumBits)
 
static bool inRange (int64_t Value, unsigned NumBits)
 
static bool increment (Integral A, Integral *R)
 
static bool decrement (Integral A, Integral *R)
 
static bool add (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool sub (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool mul (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool rem (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool div (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool bitAnd (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool bitOr (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool bitXor (Integral A, Integral B, unsigned OpBits, Integral *R)
 
static bool neg (Integral A, Integral *R)
 
static bool comp (Integral A, Integral *R)
 
template<unsigned RHSBits, bool RHSSign>
static void shiftLeft (const Integral A, const Integral< RHSBits, RHSSign > B, unsigned OpBits, Integral *R)
 
template<unsigned RHSBits, bool RHSSign>
static void shiftRight (const Integral A, const Integral< RHSBits, RHSSign > B, unsigned OpBits, Integral *R)
 

Friends

template<unsigned OtherBits, bool OtherSigned>
class Integral
 

Detailed Description

template<unsigned Bits, bool Signed>
class clang::interp::Integral< Bits, Signed >

Wrapper around numeric types.

These wrappers are required to shared an interface between APSint and builtin primitive numeral types, while optimising for storage and allowing methods operating on primitive type to compile to fast code.

Definition at line 50 of file Integral.h.

Member Typedef Documentation

◆ AsUnsigned

template<unsigned Bits, bool Signed>
using clang::interp::Integral< Bits, Signed >::AsUnsigned = Integral<Bits, false>

Definition at line 66 of file Integral.h.

Constructor & Destructor Documentation

◆ Integral() [1/3]

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::Integral ( )
inline

Zero-initializes an integral.

Definition at line 69 of file Integral.h.

◆ Integral() [2/3]

template<unsigned Bits, bool Signed>
template<unsigned SrcBits, bool SrcSign>
clang::interp::Integral< Bits, Signed >::Integral ( Integral< SrcBits, SrcSign >  V)
inlineexplicit

Constructs an integral from another integral.

Definition at line 73 of file Integral.h.

◆ Integral() [3/3]

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::Integral ( const APSInt V)
inlineexplicit

Construct an integral from a value based on signedness.

Definition at line 76 of file Integral.h.

Member Function Documentation

◆ add()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::add ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 200 of file Integral.h.

Referenced by clang::interp::Integral< Bits, Signed >::increment().

◆ bitAnd()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::bitAnd ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 222 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ bitOr()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::bitOr ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 227 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ bitWidth()

template<unsigned Bits, bool Signed>
static constexpr unsigned clang::interp::Integral< Bits, Signed >::bitWidth ( )
inlinestaticconstexpr

◆ bitXor()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::bitXor ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 232 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ comp()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::comp ( Integral< Bits, Signed A,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 245 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ compare()

template<unsigned Bits, bool Signed>
ComparisonCategoryResult clang::interp::Integral< Bits, Signed >::compare ( const Integral< Bits, Signed > &  RHS) const
inline

Definition at line 134 of file Integral.h.

References clang::interp::Compare(), and V.

◆ countLeadingZeros()

template<unsigned Bits, bool Signed>
unsigned clang::interp::Integral< Bits, Signed >::countLeadingZeros ( ) const
inline

Definition at line 145 of file Integral.h.

References clang::Signed, and V.

◆ decrement()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::decrement ( Integral< Bits, Signed A,
Integral< Bits, Signed > *  R 
)
inlinestatic

◆ div()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::div ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 217 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ from() [1/3]

template<unsigned Bits, bool Signed>
template<unsigned SrcBits, bool SrcSign>
static std::enable_if_t< SrcBits !=0, Integral > clang::interp::Integral< Bits, Signed >::from ( Integral< SrcBits, SrcSign >  Value)
inlinestatic

Definition at line 178 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ from() [2/3]

template<unsigned Bits, bool Signed>
template<typename T >
static Integral clang::interp::Integral< Bits, Signed >::from ( T  Value,
unsigned  NumBits 
)
inlinestatic

Definition at line 184 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ from() [3/3]

template<unsigned Bits, bool Signed>
template<typename ValT >
static Integral clang::interp::Integral< Bits, Signed >::from ( ValT  Value)
inlinestatic

◆ increment()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::increment ( Integral< Bits, Signed A,
Integral< Bits, Signed > *  R 
)
inlinestatic

◆ inRange()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::inRange ( int64_t  Value,
unsigned  NumBits 
)
inlinestatic

Definition at line 188 of file Integral.h.

◆ isMin()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::isMin ( ) const
inline

◆ isMinusOne()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::isMinusOne ( ) const
inline

Definition at line 127 of file Integral.h.

References clang::Signed, and V.

◆ isNegative()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::isNegative ( ) const
inline

Definition at line 131 of file Integral.h.

References V.

Referenced by clang::interp::Integral< Bits, Signed >::isPositive().

◆ isPositive()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::isPositive ( ) const
inline

Definition at line 132 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::isNegative().

◆ isSigned()

template<unsigned Bits, bool Signed>
static constexpr bool clang::interp::Integral< Bits, Signed >::isSigned ( )
inlinestaticconstexpr

Definition at line 129 of file Integral.h.

References clang::Signed.

◆ isZero()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::isZero ( ) const
inline

Definition at line 123 of file Integral.h.

References V.

◆ max()

template<unsigned Bits, bool Signed>
static Integral clang::interp::Integral< Bits, Signed >::max ( unsigned  NumBits)
inlinestatic

Definition at line 165 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ min()

template<unsigned Bits, bool Signed>
static Integral clang::interp::Integral< Bits, Signed >::min ( unsigned  NumBits)
inlinestatic

◆ mul()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::mul ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 208 of file Integral.h.

◆ neg()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::neg ( Integral< Bits, Signed A,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 237 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::isMin(), and clang::Signed.

◆ operator int32_t()

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::operator int32_t ( ) const
inlineexplicit

Definition at line 104 of file Integral.h.

References V.

◆ operator int64_t()

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::operator int64_t ( ) const
inlineexplicit

Definition at line 102 of file Integral.h.

References V.

◆ operator Integral< DstBits, DstSign >()

template<unsigned Bits, bool Signed>
template<unsigned DstBits, bool DstSign>
clang::interp::Integral< Bits, Signed >::operator Integral< DstBits, DstSign > ( ) const
inlineexplicit

Definition at line 97 of file Integral.h.

References V.

◆ operator uint64_t()

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::operator uint64_t ( ) const
inlineexplicit

Definition at line 103 of file Integral.h.

References V.

◆ operator unsigned()

template<unsigned Bits, bool Signed>
clang::interp::Integral< Bits, Signed >::operator unsigned ( ) const
inlineexplicit

Definition at line 101 of file Integral.h.

References V.

◆ operator!=()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator!= ( Integral< Bits, Signed RHS) const
inline

Definition at line 84 of file Integral.h.

References V.

◆ operator-() [1/2]

template<unsigned Bits, bool Signed>
Integral clang::interp::Integral< Bits, Signed >::operator- ( ) const
inline

Definition at line 90 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral, and V.

◆ operator-() [2/2]

template<unsigned Bits, bool Signed>
Integral clang::interp::Integral< Bits, Signed >::operator- ( const Integral< Bits, Signed > &  Other) const
inline

Definition at line 91 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral, clang::Other, and V.

◆ operator<()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator< ( Integral< Bits, Signed RHS) const
inline

Definition at line 79 of file Integral.h.

References V.

◆ operator<=()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator<= ( Integral< Bits, Signed RHS) const
inline

Definition at line 81 of file Integral.h.

References V.

◆ operator==()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator== ( Integral< Bits, Signed RHS) const
inline

Definition at line 83 of file Integral.h.

References V.

◆ operator>() [1/2]

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator> ( Integral< Bits, Signed RHS) const
inline

Definition at line 80 of file Integral.h.

References V.

◆ operator>() [2/2]

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator> ( unsigned  RHS) const
inline

Definition at line 86 of file Integral.h.

References V.

◆ operator>=()

template<unsigned Bits, bool Signed>
bool clang::interp::Integral< Bits, Signed >::operator>= ( Integral< Bits, Signed RHS) const
inline

Definition at line 82 of file Integral.h.

References V.

◆ operator~()

template<unsigned Bits, bool Signed>
Integral clang::interp::Integral< Bits, Signed >::operator~ ( ) const
inline

Definition at line 94 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral, and V.

◆ print()

template<unsigned Bits, bool Signed>
void clang::interp::Integral< Bits, Signed >::print ( llvm::raw_ostream &  OS) const
inline

Definition at line 160 of file Integral.h.

References V.

Referenced by clang::interp::operator<<().

◆ rem()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::rem ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 212 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral.

◆ shiftLeft()

template<unsigned Bits, bool Signed>
template<unsigned RHSBits, bool RHSSign>
static void clang::interp::Integral< Bits, Signed >::shiftLeft ( const Integral< Bits, Signed A,
const Integral< RHSBits, RHSSign >  B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 251 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::from().

◆ shiftRight()

template<unsigned Bits, bool Signed>
template<unsigned RHSBits, bool RHSSign>
static void clang::interp::Integral< Bits, Signed >::shiftRight ( const Integral< Bits, Signed A,
const Integral< RHSBits, RHSSign >  B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 257 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::from().

◆ sub()

template<unsigned Bits, bool Signed>
static bool clang::interp::Integral< Bits, Signed >::sub ( Integral< Bits, Signed A,
Integral< Bits, Signed B,
unsigned  OpBits,
Integral< Bits, Signed > *  R 
)
inlinestatic

Definition at line 204 of file Integral.h.

Referenced by clang::interp::Integral< Bits, Signed >::decrement().

◆ toAPSInt() [1/2]

template<unsigned Bits, bool Signed>
APSInt clang::interp::Integral< Bits, Signed >::toAPSInt ( ) const
inline

◆ toAPSInt() [2/2]

template<unsigned Bits, bool Signed>
APSInt clang::interp::Integral< Bits, Signed >::toAPSInt ( unsigned  NumBits) const
inline

◆ toAPValue()

template<unsigned Bits, bool Signed>
APValue clang::interp::Integral< Bits, Signed >::toAPValue ( ) const
inline

Definition at line 115 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::toAPSInt().

◆ toDiagnosticString()

template<unsigned Bits, bool Signed>
std::string clang::interp::Integral< Bits, Signed >::toDiagnosticString ( const ASTContext Ctx) const
inline

Definition at line 138 of file Integral.h.

References V.

◆ toUnsigned()

template<unsigned Bits, bool Signed>
Integral< Bits, false > clang::interp::Integral< Bits, Signed >::toUnsigned ( ) const
inline

Definition at line 117 of file Integral.h.

◆ truncate()

template<unsigned Bits, bool Signed>
Integral clang::interp::Integral< Bits, Signed >::truncate ( unsigned  TruncBits) const
inline

Definition at line 151 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::Integral, clang::Signed, and V.

◆ zero()

template<unsigned Bits, bool Signed>
static Integral clang::interp::Integral< Bits, Signed >::zero ( )
inlinestatic

Definition at line 182 of file Integral.h.

References clang::interp::Integral< Bits, Signed >::from().

Friends And Related Function Documentation

◆ Integral

template<unsigned Bits, bool Signed>
template<unsigned OtherBits, bool OtherSigned>
friend class Integral
friend

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