clang 22.0.0git
PrimType.h File Reference
#include "llvm/Support/raw_ostream.h"
#include <climits>
#include <cstddef>
#include <cstdint>

Go to the source code of this file.

Classes

class  clang::interp::OptPrimType
struct  clang::interp::PrimConv< PT_Sint8 >
struct  clang::interp::PrimConv< PT_Uint8 >
struct  clang::interp::PrimConv< PT_Sint16 >
struct  clang::interp::PrimConv< PT_Uint16 >
struct  clang::interp::PrimConv< PT_Sint32 >
struct  clang::interp::PrimConv< PT_Uint32 >
struct  clang::interp::PrimConv< PT_Sint64 >
struct  clang::interp::PrimConv< PT_Uint64 >
struct  clang::interp::PrimConv< PT_IntAP >
struct  clang::interp::PrimConv< PT_IntAPS >
struct  clang::interp::PrimConv< PT_Float >
struct  clang::interp::PrimConv< PT_Bool >
struct  clang::interp::PrimConv< PT_Ptr >
struct  clang::interp::PrimConv< PT_MemberPtr >
struct  clang::interp::PrimConv< PT_FixedPoint >

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
namespace  clang::interp

Macros

#define TYPE_SWITCH_CASE(Name, B)
 Helper macro to simplify type switches.
#define TYPE_SWITCH(Expr, B)
#define INT_TYPE_SWITCH(Expr, B)
#define INT_TYPE_SWITCH_NO_BOOL(Expr, B)
#define TYPE_SWITCH_ALLOC(Expr, B)

Enumerations

enum  clang::interp::PrimType : uint8_t {
  clang::interp::PT_Sint8 = 0 , clang::interp::PT_Uint8 = 1 , clang::interp::PT_Sint16 = 2 , clang::interp::PT_Uint16 = 3 ,
  clang::interp::PT_Sint32 = 4 , clang::interp::PT_Uint32 = 5 , clang::interp::PT_Sint64 = 6 , clang::interp::PT_Uint64 = 7 ,
  clang::interp::PT_IntAP = 8 , clang::interp::PT_IntAPS = 9 , clang::interp::PT_Bool = 10 , clang::interp::PT_FixedPoint = 11 ,
  clang::interp::PT_Float = 12 , clang::interp::PT_Ptr = 13 , clang::interp::PT_MemberPtr = 14
}
 Enumeration of the primitive types of the VM. More...
enum class  clang::interp::CastKind : uint8_t { clang::interp::Reinterpret , clang::interp::Volatile , clang::interp::Dynamic }

Functions

constexpr bool clang::interp::isPtrType (PrimType T)
constexpr bool clang::interp::isSignedType (PrimType T)
llvm::raw_ostream & clang::interp::operator<< (llvm::raw_ostream &OS, interp::CastKind CK)
constexpr bool clang::interp::isIntegralType (PrimType T)
template<typename T>
constexpr bool clang::interp::needsAlloc ()
constexpr bool clang::interp::needsAlloc (PrimType T)
size_t clang::interp::primSize (PrimType Type)
 Returns the size of a primitive type in bytes.
constexpr size_t clang::interp::align (size_t Size)
 Aligns a size to the pointer alignment.
constexpr bool clang::interp::aligned (uintptr_t Value)
static bool clang::interp::aligned (const void *P)

Macro Definition Documentation

◆ INT_TYPE_SWITCH

#define INT_TYPE_SWITCH ( Expr,
B )
Value:
do { \
switch (Expr) { \
TYPE_SWITCH_CASE(PT_Sint8, B) \
TYPE_SWITCH_CASE(PT_Uint8, B) \
TYPE_SWITCH_CASE(PT_Sint16, B) \
TYPE_SWITCH_CASE(PT_Uint16, B) \
TYPE_SWITCH_CASE(PT_Sint32, B) \
TYPE_SWITCH_CASE(PT_Uint32, B) \
TYPE_SWITCH_CASE(PT_Sint64, B) \
TYPE_SWITCH_CASE(PT_Uint64, B) \
TYPE_SWITCH_CASE(PT_IntAP, B) \
TYPE_SWITCH_CASE(PT_IntAPS, B) \
TYPE_SWITCH_CASE(PT_Bool, B) \
default: \
llvm_unreachable("Not an integer value"); \
} \
} while (0)

Definition at line 228 of file PrimType.h.

Referenced by clang::interp::Context::evaluateStrlen(), clang::interp::interp__builtin_bswap(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_select(), clang::interp::interp__builtin_strcmp(), clang::interp::popToAPSInt(), clang::interp::pushInteger(), clang::interp::SetThreeWayComparisonField(), and clang::interp::Pointer::toRValue().

◆ INT_TYPE_SWITCH_NO_BOOL

#define INT_TYPE_SWITCH_NO_BOOL ( Expr,
B )
Value:
do { \
switch (Expr) { \
TYPE_SWITCH_CASE(PT_Sint8, B) \
TYPE_SWITCH_CASE(PT_Uint8, B) \
TYPE_SWITCH_CASE(PT_Sint16, B) \
TYPE_SWITCH_CASE(PT_Uint16, B) \
TYPE_SWITCH_CASE(PT_Sint32, B) \
TYPE_SWITCH_CASE(PT_Uint32, B) \
TYPE_SWITCH_CASE(PT_Sint64, B) \
TYPE_SWITCH_CASE(PT_Uint64, B) \
TYPE_SWITCH_CASE(PT_IntAP, B) \
TYPE_SWITCH_CASE(PT_IntAPS, B) \
default: \
llvm_unreachable("Not an integer value"); \
} \
} while (0)

Definition at line 247 of file PrimType.h.

Referenced by clang::interp::assignInteger(), clang::interp::interp__builtin_blend(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_elementwise_int_binop(), clang::interp::interp__builtin_elementwise_maxmin(), clang::interp::interp__builtin_elementwise_popcount(), clang::interp::interp__builtin_elementwise_triop(), clang::interp::interp__builtin_ia32_pmul(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_select(), and clang::interp::interp__builtin_vector_reduce().

◆ TYPE_SWITCH

#define TYPE_SWITCH ( Expr,
B )
Value:
do { \
switch (Expr) { \
TYPE_SWITCH_CASE(PT_Sint8, B) \
TYPE_SWITCH_CASE(PT_Uint8, B) \
TYPE_SWITCH_CASE(PT_Sint16, B) \
TYPE_SWITCH_CASE(PT_Uint16, B) \
TYPE_SWITCH_CASE(PT_Sint32, B) \
TYPE_SWITCH_CASE(PT_Uint32, B) \
TYPE_SWITCH_CASE(PT_Sint64, B) \
TYPE_SWITCH_CASE(PT_Uint64, B) \
TYPE_SWITCH_CASE(PT_IntAP, B) \
TYPE_SWITCH_CASE(PT_IntAPS, B) \
TYPE_SWITCH_CASE(PT_Float, B) \
TYPE_SWITCH_CASE(PT_Bool, B) \
TYPE_SWITCH_CASE(PT_Ptr, B) \
TYPE_SWITCH_CASE(PT_MemberPtr, B) \
TYPE_SWITCH_CASE(PT_FixedPoint, B) \
} \
} while (0)

Definition at line 207 of file PrimType.h.

Referenced by BCP(), clang::interp::cleanupAfterFunctionCall(), clang::interp::InterpStack::clear(), clang::interp::InterpStack::clearTo(), clang::interp::copyComposite(), clang::interp::copyRecord(), clang::interp::InterpFrame::describe(), clang::interp::discard(), clang::interp::InterpStack::dump(), clang::interp::Program::dump(), getCtorArrayPrim(), getDtorArrayPrim(), clang::interp::InterpFrame::getParamPointer(), clang::interp::interp__builtin_x86_insert_subvector(), clang::interp::popArg(), clang::interp::primSize(), clang::interp::Pointer::toRValue(), and clang::interp::zeroAll().

◆ TYPE_SWITCH_ALLOC

#define TYPE_SWITCH_ALLOC ( Expr,
B )
Value:
do { \
switch (Expr) { \
TYPE_SWITCH_CASE(PT_Float, B) \
TYPE_SWITCH_CASE(PT_IntAP, B) \
TYPE_SWITCH_CASE(PT_IntAPS, B) \
default:; \
} \
} while (0)

Definition at line 265 of file PrimType.h.

Referenced by clang::interp::finishGlobalRecurse().

◆ TYPE_SWITCH_CASE

#define TYPE_SWITCH_CASE ( Name,
B )
Value:
case Name: { \
using T = PrimConv<Name>::T; \
B; \
break; \
}

Helper macro to simplify type switches.

The macro implicitly exposes a type T in the scope of the inner block.

Definition at line 201 of file PrimType.h.