LLVM API Documentation
#include <DerivedTypes.h>
Public Types | |
typedef Type::subtype_iterator | element_iterator |
Public Member Functions | |
bool | isPacked () const |
bool | isLiteral () const |
bool | isOpaque () const |
bool | isSized (SmallPtrSetImpl< const Type * > *Visited=nullptr) const |
isSized - Return true if this is a sized type. | |
bool | hasName () const |
hasName - Return true if this is a named struct that has a non-empty name. | |
StringRef | getName () const |
void | setName (StringRef Name) |
void | setBody (ArrayRef< Type * > Elements, bool isPacked=false) |
setBody - Specify a body for an opaque identified type. | |
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. | |
Type * | getElementType (unsigned N) const |
Static Public Member Functions | |
static StructType * | create (LLVMContext &Context, StringRef Name) |
StructType::create - This creates an identified struct. | |
static StructType * | create (LLVMContext &Context) |
static StructType * | create (ArrayRef< Type * > Elements, StringRef Name, bool isPacked=false) |
static StructType * | create (ArrayRef< Type * > Elements) |
static StructType * | create (LLVMContext &Context, ArrayRef< Type * > Elements, StringRef Name, bool isPacked=false) |
static StructType * | create (LLVMContext &Context, ArrayRef< Type * > Elements) |
static StructType * | create (StringRef Name, Type *elt1,...) END_WITH_NULL |
static StructType * | get (LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false) |
static StructType * | get (LLVMContext &Context, bool isPacked=false) |
static StructType * | get (Type *elt1,...) END_WITH_NULL |
static bool | isValidElementType (Type *ElemTy) |
static bool | classof (const Type *T) |
Methods for support type inquiry through isa, cast, and dyn_cast. |
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 274 of file DerivedTypes.h.
static bool llvm::StructType::classof | ( | const Type * | T | ) | [inline, static] |
Methods for support type inquiry through isa, cast, and dyn_cast.
Reimplemented from llvm::CompositeType.
Definition at line 290 of file DerivedTypes.h.
References llvm::Type::getTypeID(), and llvm::Type::StructTyID.
StructType * StructType::create | ( | LLVMContext & | Context, |
StringRef | Name | ||
) | [static] |
StructType::create - This creates an identified struct.
Definition at line 492 of file Type.cpp.
References llvm::StringRef::empty(), llvm::LLVMContext::pImpl, setName(), llvm::AArch64DB::ST, and llvm::LLVMContextImpl::TypeAllocator.
Referenced by create(), and LLVMStructCreateNamed().
StructType * StructType::create | ( | LLVMContext & | Context | ) | [static] |
StructType * StructType::create | ( | ArrayRef< Type * > | Elements, |
StringRef | Name, | ||
bool | isPacked = false |
||
) | [static] |
Definition at line 533 of file Type.cpp.
References create(), llvm::ArrayRef< T >::empty(), and llvm::Type::getContext().
StructType * StructType::create | ( | ArrayRef< Type * > | Elements | ) | [static] |
Definition at line 540 of file Type.cpp.
References create(), llvm::ArrayRef< T >::empty(), and llvm::Type::getContext().
StructType * StructType::create | ( | LLVMContext & | Context, |
ArrayRef< Type * > | Elements, | ||
StringRef | Name, | ||
bool | isPacked = false |
||
) | [static] |
Definition at line 518 of file Type.cpp.
References create(), setBody(), and llvm::AArch64DB::ST.
StructType * StructType::create | ( | LLVMContext & | Context, |
ArrayRef< Type * > | Elements | ||
) | [static] |
StructType * StructType::create | ( | StringRef | Name, |
Type * | elt1, | ||
... | |||
) | [static] |
Definition at line 546 of file Type.cpp.
References create(), llvm::Type::getContext(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::MipsISD::Ret.
element_iterator llvm::StructType::element_begin | ( | ) | const [inline] |
Definition at line 275 of file DerivedTypes.h.
References llvm::Type::ContainedTys.
Referenced by getTypePartition(), isLayoutIdentical(), isLeakCheckerRoot(), isSized(), LLVMGetStructElementTypes(), and WriteTypeTable().
element_iterator llvm::StructType::element_end | ( | ) | const [inline] |
Definition at line 276 of file DerivedTypes.h.
References llvm::Type::ContainedTys, and llvm::Type::NumContainedTys.
Referenced by getTypePartition(), isLayoutIdentical(), isLeakCheckerRoot(), isSized(), LLVMGetStructElementTypes(), and WriteTypeTable().
StructType * StructType::get | ( | LLVMContext & | Context, |
ArrayRef< Type * > | Elements, | ||
bool | isPacked = false |
||
) | [static] |
StructType::get - This static method is the primary way to create a literal StructType.
Definition at line 403 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::AArch64DB::ST, and llvm::LLVMContextImpl::TypeAllocator.
Referenced by appendToGlobalArray(), DecodeFixedType(), get(), INITIALIZE_TM_PASS(), insertSinCosCall(), LLVMStructTypeInContext(), and upgradeGlobalArray().
StructType * StructType::get | ( | LLVMContext & | Context, |
bool | isPacked = false |
||
) | [static] |
StructType::get - Create an empty structure type.
Definition at line 499 of file Type.cpp.
References isPacked(), and llvm::None.
StructType * StructType::get | ( | Type * | elt1, |
... | |||
) | [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 503 of file Type.cpp.
References get(), llvm::Type::getContext(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::MipsISD::Ret.
Type* llvm::StructType::getElementType | ( | unsigned | N | ) | const [inline] |
Definition at line 284 of file DerivedTypes.h.
References llvm::Type::ContainedTys, and llvm::Type::NumContainedTys.
Referenced by BuildSubAggregate(), llvm::ConstantStruct::ConstantStruct(), 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 585 of file Type.cpp.
References isLiteral().
Referenced by llvm::TypePrinting::incorporateTypes(), llvm::isImageOrSamplerVal(), LLVMGetStructName(), llvm::TypePrinting::print(), setName(), StripTypeNames(), and WriteTypeTable().
unsigned llvm::StructType::getNumElements | ( | ) | const [inline] |
Random access to the elements.
Definition at line 283 of file DerivedTypes.h.
References llvm::Type::NumContainedTys.
Referenced by appendToGlobalArray(), BuildSubAggregate(), llvm::ConstantStruct::ConstantStruct(), llvm::ConstantStruct::get(), getOpenCLAlignment(), llvm::DataLayout::getStructLayout(), HasPadding(), llvm::Type::isEmptyTy(), isLayoutIdentical(), PerformHeapAllocSRoA(), TryToOptimizeStoreOfMallocToGlobal(), and llvm::InlineAsm::Verify().
bool llvm::StructType::hasName | ( | ) | const [inline] |
hasName - Return true if this is a named struct that has a non-empty name.
Definition at line 252 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 612 of file Type.cpp.
References element_begin(), element_end(), llvm::lltok::equal, getNumElements(), and isPacked().
bool llvm::StructType::isLiteral | ( | ) | const [inline] |
isLiteral - Return true if this type is uniqued by structural equivalence, false if it is a struct definition.
Definition at line 242 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by getName(), llvm::TypePrinting::incorporateTypes(), llvm::isImageOrSamplerVal(), llvm::TypePrinting::print(), StripTypeNames(), and WriteTypeTable().
bool llvm::StructType::isOpaque | ( | ) | const [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 246 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by llvm::ConstantStruct::ConstantStruct(), llvm::ConstantStruct::get(), isLeakCheckerRoot(), isSized(), setBody(), and WriteTypeTable().
bool llvm::StructType::isPacked | ( | ) | const [inline] |
Definition at line 238 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by get(), getTypePartition(), isLayoutIdentical(), and WriteTypeTable().
bool StructType::isSized | ( | SmallPtrSetImpl< const Type * > * | Visited = nullptr | ) | const |
isSized - Return true if this is a sized type.
Reimplemented from llvm::Type.
Definition at line 561 of file Type.cpp.
References element_begin(), element_end(), llvm::Type::getSubclassData(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), isOpaque(), and llvm::Type::setSubclassData().
bool StructType::isValidElementType | ( | Type * | ElemTy | ) | [static] |
isValidElementType - Return true if the specified type is valid as a element type.
Definition at line 605 of file Type.cpp.
References llvm::Type::isFunctionTy(), llvm::Type::isLabelTy(), llvm::Type::isMetadataTy(), and llvm::Type::isVoidTy().
void StructType::setBody | ( | ArrayRef< Type * > | Elements, |
bool | isPacked = false |
||
) |
setBody - Specify a body for an opaque identified type.
Definition at line 424 of file Type.cpp.
References llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Allocate(), llvm::Type::ContainedTys, llvm::ArrayRef< T >::data(), llvm::Type::getContext(), llvm::Type::getSubclassData(), isOpaque(), llvm::LibFunc::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 592 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 439 of file Type.cpp.
References llvm::StringRef::empty(), llvm::StringMap< ValueTy, AllocatorTy >::getAllocator(), llvm::Type::getContext(), getName(), llvm::StringMap< ValueTy, AllocatorTy >::GetOrCreateValue(), 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< T >::resize(), llvm::raw_svector_ostream::resync(), llvm::StringRef::size(), and llvm::raw_svector_ostream::str().
Referenced by create(), and StripTypeNames().