LLVM API Documentation
#include <DerivedTypes.h>
Public Types | |
typedef Type::subtype_iterator | element_iterator |
![]() | |
enum | TypeID { VoidTyID = 0, HalfTyID, FloatTyID, DoubleTyID, X86_FP80TyID, FP128TyID, PPC_FP128TyID, LabelTyID, MetadataTyID, X86_MMXTyID, IntegerTyID, FunctionTyID, StructTyID, ArrayTyID, PointerTyID, VectorTyID, NumTypeIDs, LastPrimitiveTyID = X86_MMXTyID, FirstDerivedTyID = IntegerTyID } |
typedef Type *const * | subtype_iterator |
typedef std::reverse_iterator < subtype_iterator > | subtype_reverse_iterator |
Public Member Functions | |
~StructType () | |
bool | isPacked () const |
bool | isLiteral () const |
bool | isOpaque () const |
bool | isSized () const |
isSized - Return true if this is a sized type. More... | |
bool | hasName () const |
hasName - Return true if this is a named struct that has a non-empty name. More... | |
StringRef | getName () const |
void | setName (StringRef Name) |
void | setBody (ArrayRef< Type * > Elements, bool isPacked=false) |
setBody - Specify a body for an opaque identified type. More... | |
void | setBody (Type *elt1,...) END_WITH_NULL |
element_iterator | element_begin () const |
element_iterator | element_end () const |
bool | isLayoutIdentical (StructType *Other) const |
unsigned | getNumElements () const |
Random access to the elements. More... | |
Type * | getElementType (unsigned N) const |
![]() | |
Type * | getTypeAtIndex (const Value *V) |
Type * | getTypeAtIndex (unsigned Idx) |
bool | indexValid (const Value *V) const |
bool | indexValid (unsigned Idx) const |
![]() | |
void | print (raw_ostream &O) const |
void | dump () const |
LLVMContext & | getContext () const |
getContext - Return the LLVMContext in which this type was uniqued. More... | |
TypeID | getTypeID () const |
bool | isVoidTy () const |
isVoidTy - Return true if this is 'void'. More... | |
bool | isHalfTy () const |
isHalfTy - Return true if this is 'half', a 16-bit IEEE fp type. More... | |
bool | isFloatTy () const |
isFloatTy - Return true if this is 'float', a 32-bit IEEE fp type. More... | |
bool | isDoubleTy () const |
isDoubleTy - Return true if this is 'double', a 64-bit IEEE fp type. More... | |
bool | isX86_FP80Ty () const |
isX86_FP80Ty - Return true if this is x86 long double. More... | |
bool | isFP128Ty () const |
isFP128Ty - Return true if this is 'fp128'. More... | |
bool | isPPC_FP128Ty () const |
isPPC_FP128Ty - Return true if this is powerpc long double. More... | |
bool | isFloatingPointTy () const |
const fltSemantics & | getFltSemantics () const |
bool | isX86_MMXTy () const |
isX86_MMXTy - Return true if this is X86 MMX. More... | |
bool | isFPOrFPVectorTy () const |
bool | isLabelTy () const |
isLabelTy - Return true if this is 'label'. More... | |
bool | isMetadataTy () const |
isMetadataTy - Return true if this is 'metadata'. More... | |
bool | isIntegerTy () const |
bool | isIntegerTy (unsigned Bitwidth) const |
isIntegerTy - Return true if this is an IntegerType of the given width. More... | |
bool | isIntOrIntVectorTy () const |
bool | isFunctionTy () const |
bool | isStructTy () const |
bool | isArrayTy () const |
bool | isPointerTy () const |
bool | isPtrOrPtrVectorTy () const |
bool | isVectorTy () const |
bool | canLosslesslyBitCastTo (Type *Ty) const |
Determine if this type could be losslessly bitcast to Ty. More... | |
bool | isEmptyTy () const |
bool | isPrimitiveType () const |
bool | isDerivedType () const |
bool | isFirstClassType () const |
bool | isSingleValueType () const |
bool | isAggregateType () const |
bool | isSized () const |
unsigned | getPrimitiveSizeInBits () const |
unsigned | getScalarSizeInBits () |
int | getFPMantissaWidth () const |
const Type * | getScalarType () const |
Type * | getScalarType () |
subtype_iterator | subtype_begin () const |
subtype_iterator | subtype_end () const |
subtype_reverse_iterator | subtype_rbegin () const |
subtype_reverse_iterator | subtype_rend () const |
Type * | getContainedType (unsigned i) const |
unsigned | getNumContainedTypes () const |
unsigned | getIntegerBitWidth () const |
Type * | getFunctionParamType (unsigned i) const |
unsigned | getFunctionNumParams () const |
bool | isFunctionVarArg () const |
StringRef | getStructName () const |
unsigned | getStructNumElements () const |
Type * | getStructElementType (unsigned N) const |
Type * | getSequentialElementType () const |
uint64_t | getArrayNumElements () const |
Type * | getArrayElementType () const |
unsigned | getVectorNumElements () const |
Type * | getVectorElementType () const |
Type * | getPointerElementType () const |
unsigned | getPointerAddressSpace () const |
Get the address space of this pointer or pointer vector type. More... | |
PointerType * | getPointerTo (unsigned AddrSpace=0) |
Additional Inherited Members | |
![]() | |
CompositeType (LLVMContext &C, TypeID tid) | |
![]() | |
Type (LLVMContext &C, TypeID tid) | |
~Type () | |
void | setTypeID (TypeID ID) |
unsigned | getSubclassData () const |
void | setSubclassData (unsigned val) |
![]() | |
unsigned | NumContainedTys |
Type *const * | ContainedTys |
StructType - Class to represent struct types. There are two different kinds of struct types: Literal structs and Identified structs.
Literal struct types (e.g. { i32, i32 }) are uniqued structurally, and must always have a body when created. You can get one of these by using one of the StructType::get() forms.
Identified structs (e.g. foo or %42) may optionally have a name and are not uniqued. The names for identified structs are managed at the LLVMContext level, so there can only be a single identified struct with a given name in a particular LLVMContext. Identified structs may also optionally be opaque (have no body specified). You get one of these by using one of the StructType::create() forms.
Independent of what kind of struct you have, the body of a struct type are laid out in memory consequtively with the elements directly one after the other (if the struct is packed) or (if not packed) with padding between the elements as defined by DataLayout (which is required to match what the code generator for a target expects).
Definition at line 187 of file DerivedTypes.h.
Definition at line 277 of file DerivedTypes.h.
|
inline |
Definition at line 207 of file DerivedTypes.h.
References llvm::Type::ContainedTys.
Methods for support type inquiry through isa, cast, and dyn_cast.
Definition at line 293 of file DerivedTypes.h.
References llvm::Type::getTypeID(), and llvm::Type::StructTyID.
|
static |
StructType::create - This creates an identified struct.
Definition at line 494 of file Type.cpp.
References llvm::StringRef::empty(), llvm::LLVMContext::pImpl, setName(), llvm::A64DB::ST, and llvm::LLVMContextImpl::TypeAllocator.
Referenced by create(), and LLVMStructCreateNamed().
|
static |
|
static |
Definition at line 533 of file Type.cpp.
References create(), llvm::ArrayRef< T >::empty(), and llvm::Type::getContext().
|
static |
Definition at line 540 of file Type.cpp.
References create(), llvm::ArrayRef< T >::empty(), and llvm::Type::getContext().
|
static |
Definition at line 518 of file Type.cpp.
References create(), setBody(), and llvm::A64DB::ST.
|
static |
|
static |
Definition at line 546 of file Type.cpp.
References create(), llvm::Type::getContext(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
|
inline |
Definition at line 278 of file DerivedTypes.h.
References llvm::Type::ContainedTys.
Referenced by getTypePartition(), isLayoutIdentical(), isLeakCheckerRoot(), isSized(), LLVMGetStructElementTypes(), and WriteTypeTable().
|
inline |
Definition at line 279 of file DerivedTypes.h.
References llvm::Type::ContainedTys, and llvm::Type::NumContainedTys.
Referenced by getTypePartition(), isLayoutIdentical(), isLeakCheckerRoot(), isSized(), LLVMGetStructElementTypes(), and WriteTypeTable().
|
static |
StructType::get - This static method is the primary way to create a literal StructType.
Definition at line 405 of file Type.cpp.
References llvm::LLVMContextImpl::AnonStructTypes, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find_as(), I, llvm::LLVMContext::pImpl, setBody(), llvm::Type::setSubclassData(), llvm::A64DB::ST, and llvm::LLVMContextImpl::TypeAllocator.
Referenced by appendToGlobalArray(), DecodeFixedType(), for(), get(), llvm::ConstantExpr::getAlignOf(), llvm::ConstantStruct::getTypeForElements(), LLVMStructTypeInContext(), and LowerFSINCOS().
|
static |
StructType::get - Create an empty structure type.
Definition at line 501 of file Type.cpp.
References isPacked(), and llvm::None.
|
static |
StructType::get - This static method is a convenience method for creating structure types by specifying the elements as arguments. Note that this method always returns a non-packed struct, and requires at least one element type.
Definition at line 505 of file Type.cpp.
References get(), llvm::Type::getContext(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Definition at line 287 of file DerivedTypes.h.
References llvm::Type::ContainedTys, N, and llvm::Type::NumContainedTys.
Referenced by BuildSubAggregate(), llvm::ConstantStruct::ConstantStruct(), GetHeapSROAValue(), getNaturalGEPRecursively(), getOpenCLAlignment(), getTypePartition(), HasPadding(), llvm::Type::isEmptyTy(), and PerformHeapAllocSRoA().
StringRef StructType::getName | ( | ) | const |
getName - Return the name for this struct type if it has an identity. This may return an empty string for an unnamed struct type. Do not call this on an literal type.
Definition at line 580 of file Type.cpp.
References isLiteral().
Referenced by llvm::TypePrinting::incorporateTypes(), llvm::isImageOrSamplerVal(), LLVMGetStructName(), llvm::TypePrinting::print(), setName(), StripTypeNames(), and WriteTypeTable().
|
inline |
Random access to the elements.
Definition at line 286 of file DerivedTypes.h.
References llvm::Type::NumContainedTys.
Referenced by BuildSubAggregate(), llvm::ConstantStruct::ConstantStruct(), llvm::ConstantStruct::get(), getOpenCLAlignment(), llvm::DataLayout::getStructLayout(), HasPadding(), llvm::Type::isEmptyTy(), isLayoutIdentical(), PerformHeapAllocSRoA(), TryToOptimizeStoreOfMallocToGlobal(), and llvm::InlineAsm::Verify().
|
inline |
hasName - Return true if this is a named struct that has a non-empty name.
Definition at line 255 of file DerivedTypes.h.
Referenced by LLVMGetStructName().
bool StructType::isLayoutIdentical | ( | StructType * | Other | ) | const |
isLayoutIdentical - Return true if this is layout identical to the specified struct.
Definition at line 606 of file Type.cpp.
References element_begin(), element_end(), llvm::lltok::equal, getNumElements(), and isPacked().
|
inline |
isLiteral - Return true if this type is uniqued by structural equivalence, false if it is a struct definition.
Definition at line 245 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by getName(), llvm::TypePrinting::incorporateTypes(), llvm::isImageOrSamplerVal(), llvm::TypePrinting::print(), StripTypeNames(), and WriteTypeTable().
|
inline |
isOpaque - Return true if this is a type with an identity that has no body specified yet. These prints as 'opaque' in .ll files.
Definition at line 249 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by llvm::ConstantStruct::ConstantStruct(), llvm::ConstantStruct::get(), isLeakCheckerRoot(), isSized(), setBody(), and WriteTypeTable().
|
inline |
Definition at line 241 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by get(), getTypePartition(), isLayoutIdentical(), and WriteTypeTable().
bool StructType::isSized | ( | ) | const |
isSized - Return true if this is a sized type.
Definition at line 559 of file Type.cpp.
References element_begin(), element_end(), llvm::Type::getSubclassData(), I, isOpaque(), and llvm::Type::setSubclassData().
isValidElementType - Return true if the specified type is valid as a element type.
Definition at line 599 of file Type.cpp.
References llvm::Type::isFunctionTy(), llvm::Type::isLabelTy(), llvm::Type::isMetadataTy(), and llvm::Type::isVoidTy().
setBody - Specify a body for an opaque identified type.
Definition at line 426 of file Type.cpp.
References llvm::BumpPtrAllocator::Allocate(), llvm::Type::ContainedTys, llvm::ArrayRef< T >::data(), llvm::Type::getContext(), llvm::Type::getSubclassData(), isOpaque(), llvm::Intrinsic::memcpy, llvm::Type::NumContainedTys, llvm::LLVMContext::pImpl, llvm::Type::setSubclassData(), llvm::ArrayRef< T >::size(), and llvm::LLVMContextImpl::TypeAllocator.
void StructType::setBody | ( | Type * | elt1, |
... | |||
) |
Definition at line 587 of file Type.cpp.
References llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and setBody().
void StructType::setName | ( | StringRef | Name | ) |
setName - Change the name of this type to the specified name, or to a name with a suffix if there is a collision. Do not call this on an literal type.
Definition at line 441 of file Type.cpp.
References llvm::StringRef::empty(), llvm::StringMap< ValueTy, AllocatorTy >::getAllocator(), llvm::Type::getContext(), getName(), llvm::LLVMContextImpl::NamedStructTypes, llvm::LLVMContextImpl::NamedStructTypesUniqueID, llvm::COFF::NameSize, llvm::LLVMContext::pImpl, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::StringMap< ValueTy, AllocatorTy >::remove(), llvm::SmallVectorImpl< char >::resize(), llvm::raw_svector_ostream::resync(), llvm::StringRef::size(), and llvm::raw_svector_ostream::str().
Referenced by create(), and StripTypeNames().