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

StructType - Class to represent struct types. More...

#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

bool isPacked () const
bool isLiteral () const
 isLiteral - Return true if this type is uniqued by structural equivalence, false if it is a struct definition.
bool isOpaque () const
 isOpaque - Return true if this is a type with an identity that has no body specified yet.
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
 getName - Return the name for this struct type if it has an identity.
void 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.
void setBody (ArrayRef< Type * > Elements, bool isPacked=false)
 setBody - Specify a body for an opaque identified type.
void setBody (Type *elt1,...) LLVM_END_WITH_NULL
element_iterator element_begin () const
element_iterator element_end () const
ArrayRef< Type * > const elements () const
bool isLayoutIdentical (StructType *Other) const
 isLayoutIdentical - Return true if this is layout identical to the specified struct.
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,...) LLVM_END_WITH_NULL
static StructTypeget (LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
 StructType::get - This static method is the primary way to create a literal StructType.
static StructTypeget (LLVMContext &Context, bool isPacked=false)
 StructType::get - Create an empty structure type.
static StructTypeget (Type *elt1,...) LLVM_END_WITH_NULL
 StructType::get - This static method is a convenience method for creating structure types by specifying the elements as arguments.
static bool isValidElementType (Type *ElemTy)
 isValidElementType - Return true if the specified type is valid as a element type.
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 191 of file DerivedTypes.h.


Member Typedef Documentation

Definition at line 278 of file DerivedTypes.h.


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 297 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 490 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 527 of file Type.cpp.

References create().

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

Definition at line 531 of file Type.cpp.

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

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

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

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

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

Definition at line 523 of file Type.cpp.

References create().

StructType * StructType::create ( StringRef  Name,
Type elt1,
  ... 
) [static]

Definition at line 281 of file DerivedTypes.h.

References llvm::makeArrayRef().

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

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

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

References isLiteral().

Referenced by llvm::isImageOrSamplerVal(), LLVMGetStructName(), 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 256 of file DerivedTypes.h.

Referenced by LLVMGetStructName().

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

Definition at line 610 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 246 of file DerivedTypes.h.

References llvm::Type::getSubclassData().

Referenced by getName(), llvm::isImageOrSamplerVal(), llvm::Type::print(), StripTypeNames(), and WriteTypeTable().

bool llvm::StructType::isOpaque ( ) const [inline]
bool llvm::StructType::isPacked ( ) const [inline]

Definition at line 242 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 559 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 603 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: