clang 22.0.0git
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/ByteCode/Integral.h"

Inheritance diagram for clang::interp::Integral< Bits, Signed >:
[legend]

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
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
template<typename Ty, typename = std::enable_if_t<std::is_integral_v<Ty>>>
 operator Ty () const
APSInt toAPSInt () const
APSInt toAPSInt (unsigned BitWidth) const
APInt toAPInt (unsigned BitWidth) const
APValue toAPValue (const ASTContext &) 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
void bitcastToMemory (std::byte *Dest) 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 bitcastFromMemory (const std::byte *Src, unsigned BitWidth)
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 (unsigned BitWidth=0)
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 66 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 83 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 86 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 90 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 93 of file Integral.h.

Member Function Documentation

◆ add()

template<unsigned Bits, bool Signed>
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 237 of file Integral.h.

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

◆ bitAnd()

template<unsigned Bits, bool Signed>
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 259 of file Integral.h.

◆ bitcastFromMemory()

template<unsigned Bits, bool Signed>
Integral clang::interp::Integral< Bits, Signed >::bitcastFromMemory ( const std::byte * Src,
unsigned BitWidth )
inlinestatic

Definition at line 167 of file Integral.h.

◆ bitcastToMemory()

template<unsigned Bits, bool Signed>
void clang::interp::Integral< Bits, Signed >::bitcastToMemory ( std::byte * Dest) const
inline

Definition at line 163 of file Integral.h.

◆ bitOr()

template<unsigned Bits, bool Signed>
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 264 of file Integral.h.

◆ bitWidth()

◆ bitXor()

template<unsigned Bits, bool Signed>
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 269 of file Integral.h.

◆ comp()

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

Definition at line 282 of file Integral.h.

◆ compare()

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

Definition at line 159 of file Integral.h.

◆ countLeadingZeros()

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

Definition at line 182 of file Integral.h.

◆ decrement()

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

Definition at line 233 of file Integral.h.

◆ div()

template<unsigned Bits, bool Signed>
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 254 of file Integral.h.

◆ from() [1/3]

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

Definition at line 215 of file Integral.h.

◆ from() [2/3]

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

Definition at line 221 of file Integral.h.

◆ from() [3/3]

◆ increment()

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

Definition at line 229 of file Integral.h.

◆ inRange()

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

Definition at line 225 of file Integral.h.

◆ isMin()

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

Definition at line 150 of file Integral.h.

Referenced by clang::interp::Integral< Bits, false >::neg().

◆ isMinusOne()

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

Definition at line 152 of file Integral.h.

◆ isNegative()

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

Definition at line 156 of file Integral.h.

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

◆ isPositive()

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

◆ isSigned()

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

Definition at line 154 of file Integral.h.

◆ isZero()

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

Definition at line 148 of file Integral.h.

◆ max()

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

Definition at line 204 of file Integral.h.

◆ min()

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

Definition at line 203 of file Integral.h.

Referenced by clang::interp::Integral< Bits, false >::isMin().

◆ mul()

template<unsigned Bits, bool Signed>
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 245 of file Integral.h.

◆ neg()

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

Definition at line 274 of file Integral.h.

◆ 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 117 of file Integral.h.

◆ operator Ty()

template<unsigned Bits, bool Signed>
template<typename Ty, typename = std::enable_if_t<std::is_integral_v<Ty>>>
clang::interp::Integral< Bits, Signed >::operator Ty ( ) const
inlineexplicit

Definition at line 122 of file Integral.h.

◆ operator!=()

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

Definition at line 101 of file Integral.h.

◆ operator-() [1/2]

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

Definition at line 110 of file Integral.h.

◆ 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 111 of file Integral.h.

◆ operator<()

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

Definition at line 96 of file Integral.h.

◆ operator<=()

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

Definition at line 98 of file Integral.h.

◆ operator==()

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

Definition at line 100 of file Integral.h.

◆ operator>() [1/2]

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

Definition at line 97 of file Integral.h.

◆ operator>() [2/2]

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

Definition at line 106 of file Integral.h.

◆ operator>=() [1/2]

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

Definition at line 99 of file Integral.h.

◆ operator>=() [2/2]

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

Definition at line 102 of file Integral.h.

◆ operator~()

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

Definition at line 114 of file Integral.h.

◆ print()

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

Definition at line 201 of file Integral.h.

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

◆ rem()

template<unsigned Bits, bool Signed>
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 249 of file Integral.h.

◆ shiftLeft()

template<unsigned Bits, bool Signed>
template<unsigned RHSBits, bool RHSSign>
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 288 of file Integral.h.

◆ shiftRight()

template<unsigned Bits, bool Signed>
template<unsigned RHSBits, bool RHSSign>
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 294 of file Integral.h.

◆ sub()

template<unsigned Bits, bool Signed>
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 241 of file Integral.h.

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

◆ toAPInt()

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

Definition at line 132 of file Integral.h.

Referenced by clang::interp::Integral< Bits, false >::toAPSInt().

◆ toAPSInt() [1/2]

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

Definition at line 126 of file Integral.h.

Referenced by clang::interp::Integral< Bits, false >::toAPValue().

◆ toAPSInt() [2/2]

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

Definition at line 129 of file Integral.h.

◆ toAPValue()

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

Definition at line 140 of file Integral.h.

◆ toDiagnosticString()

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

Definition at line 175 of file Integral.h.

◆ toUnsigned()

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

Definition at line 142 of file Integral.h.

◆ truncate()

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

Definition at line 191 of file Integral.h.

◆ zero()

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

Definition at line 219 of file Integral.h.

◆ Integral


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