LLVM API Documentation

Public Types | Public Member Functions | Static Public Member Functions
llvm::StructType Class Reference

#include <DerivedTypes.h>

Inheritance diagram for llvm::StructType:
Inheritance graph
[legend]
Collaboration diagram for llvm::StructType:
Collaboration graph
[legend]

List of all members.

Public Types

typedef Type::subtype_iterator element_iterator

Public Member Functions

 ~StructType ()
bool isPacked () const
bool isLiteral () const
bool isOpaque () const
bool isSized (SmallPtrSet< const Type *, 4 > *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.
TypegetElementType (unsigned N) const

Static Public Member Functions

static StructTypecreate (LLVMContext &Context, StringRef Name)
 StructType::create - This creates an identified struct.
static StructTypecreate (LLVMContext &Context)
static StructTypecreate (ArrayRef< Type * > Elements, StringRef Name, bool isPacked=false)
static StructTypecreate (ArrayRef< Type * > Elements)
static StructTypecreate (LLVMContext &Context, ArrayRef< Type * > Elements, StringRef Name, bool isPacked=false)
static StructTypecreate (LLVMContext &Context, ArrayRef< Type * > Elements)
static StructTypecreate (StringRef Name, Type *elt1,...) END_WITH_NULL
static StructTypeget (LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
static StructTypeget (LLVMContext &Context, bool isPacked=false)
static StructTypeget (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.

Detailed Description

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.


Member Typedef Documentation

Definition at line 277 of file DerivedTypes.h.


Constructor & Destructor Documentation

Definition at line 207 of file DerivedTypes.h.

References llvm::Type::ContainedTys.


Member Function Documentation

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 293 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 488 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]

Definition at line 523 of file Type.cpp.

References create().

StructType * StructType::create ( ArrayRef< Type * >  Elements,
StringRef  Name,
bool  isPacked = false 
) [static]

Definition at line 527 of file Type.cpp.

References create(), llvm::ArrayRef< T >::empty(), and llvm::Type::getContext().

StructType * StructType::create ( ArrayRef< Type * >  Elements) [static]

Definition at line 534 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 512 of file Type.cpp.

References create(), setBody(), and llvm::AArch64DB::ST.

StructType * StructType::create ( LLVMContext Context,
ArrayRef< Type * >  Elements 
) [static]

Definition at line 519 of file Type.cpp.

References create().

StructType * StructType::create ( StringRef  Name,
Type elt1,
  ... 
) [static]
StructType * StructType::get ( LLVMContext Context,
ArrayRef< Type * >  Elements,
bool  isPacked = false 
) [static]
StructType * StructType::get ( LLVMContext Context,
bool  isPacked = false 
) [static]

StructType::get - Create an empty structure type.

Definition at line 495 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 499 of file Type.cpp.

References get(), llvm::Type::getContext(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().

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 577 of file Type.cpp.

References isLiteral().

Referenced by llvm::TypePrinting::incorporateTypes(), llvm::isImageOrSamplerVal(), LLVMGetStructName(), llvm::TypePrinting::print(), setName(), StripTypeNames(), and WriteTypeTable().

bool llvm::StructType::hasName ( ) const [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().

isLayoutIdentical - Return true if this is layout identical to the specified struct.

Definition at line 603 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 245 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 249 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 241 of file DerivedTypes.h.

References llvm::Type::getSubclassData().

Referenced by get(), getTypePartition(), isLayoutIdentical(), and WriteTypeTable().

bool StructType::isSized ( SmallPtrSet< const Type *, 4 > *  Visited = nullptr) const

isSized - Return true if this is a sized type.

Reimplemented from llvm::Type.

Definition at line 553 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 596 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 
)
void StructType::setBody ( Type elt1,
  ... 
)

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