clang  6.0.0svn
Public Types | Public Member Functions | Static Public Member Functions | List of all members
clang::CodeGen::ABIArgInfo Class Reference

ABIArgInfo - Helper class to encapsulate information about how a specific C type should be passed to or returned from a function. More...

#include "clang/CodeGen/CGFunctionInfo.h"

Collaboration diagram for clang::CodeGen::ABIArgInfo:
Collaboration graph
[legend]

Public Types

enum  Kind : uint8_t {
  Direct, Extend, Indirect, Ignore,
  Expand, CoerceAndExpand, InAlloca, KindFirst = Direct,
  KindLast = InAlloca
}
 

Public Member Functions

 ABIArgInfo ()
 
Kind getKind () const
 
bool isDirect () const
 
bool isInAlloca () const
 
bool isExtend () const
 
bool isIgnore () const
 
bool isIndirect () const
 
bool isExpand () const
 
bool isCoerceAndExpand () const
 
bool canHaveCoerceToType () const
 
unsigned getDirectOffset () const
 
void setDirectOffset (unsigned Offset)
 
llvm::TypegetPaddingType () const
 
bool getPaddingInReg () const
 
void setPaddingInReg (bool PIR)
 
llvm::TypegetCoerceToType () const
 
void setCoerceToType (llvm::Type *T)
 
llvm::StructType * getCoerceAndExpandType () const
 
llvm::TypegetUnpaddedCoerceAndExpandType () const
 
ArrayRef< llvm::Type * > getCoerceAndExpandTypeSequence () const
 
bool getInReg () const
 
void setInReg (bool IR)
 
CharUnits getIndirectAlign () const
 
void setIndirectAlign (CharUnits IA)
 
bool getIndirectByVal () const
 
void setIndirectByVal (bool IBV)
 
bool getIndirectRealign () const
 
void setIndirectRealign (bool IR)
 
bool isSRetAfterThis () const
 
void setSRetAfterThis (bool AfterThis)
 
unsigned getInAllocaFieldIndex () const
 
void setInAllocaFieldIndex (unsigned FieldIndex)
 
bool getInAllocaSRet () const
 Return true if this field of an inalloca struct should be returned to implement a struct return calling convention. More...
 
void setInAllocaSRet (bool SRet)
 
bool getCanBeFlattened () const
 
void setCanBeFlattened (bool Flatten)
 
void dump () const
 

Static Public Member Functions

static ABIArgInfo getDirect (llvm::Type *T=nullptr, unsigned Offset=0, llvm::Type *Padding=nullptr, bool CanBeFlattened=true)
 
static ABIArgInfo getDirectInReg (llvm::Type *T=nullptr)
 
static ABIArgInfo getExtend (llvm::Type *T=nullptr)
 
static ABIArgInfo getExtendInReg (llvm::Type *T=nullptr)
 
static ABIArgInfo getIgnore ()
 
static ABIArgInfo getIndirect (CharUnits Alignment, bool ByVal=true, bool Realign=false, llvm::Type *Padding=nullptr)
 
static ABIArgInfo getIndirectInReg (CharUnits Alignment, bool ByVal=true, bool Realign=false)
 
static ABIArgInfo getInAlloca (unsigned FieldIndex)
 
static ABIArgInfo getExpand ()
 
static ABIArgInfo getExpandWithPadding (bool PaddingInReg, llvm::Type *Padding)
 
static ABIArgInfo getCoerceAndExpand (llvm::StructType *coerceToType, llvm::Type *unpaddedCoerceToType)
 
static bool isPaddingForCoerceAndExpand (llvm::Type *eltType)
 

Detailed Description

ABIArgInfo - Helper class to encapsulate information about how a specific C type should be passed to or returned from a function.

Definition at line 34 of file CGFunctionInfo.h.

Member Enumeration Documentation

◆ Kind

Enumerator
Direct 

Direct - Pass the argument directly using the normal converted LLVM type, or by coercing to another specified type stored in 'CoerceToType').

If an offset is specified (in UIntData), then the argument passed is offset by some number of bytes in the memory representation. A dummy argument is emitted before the real argument if the specified type stored in "PaddingType" is not zero.

Extend 

Extend - Valid only for integer argument types.

Same as 'direct' but also emit a zero/sign extension attribute.

Indirect 

Indirect - Pass the argument indirectly via a hidden pointer with the specified alignment (0 indicates default alignment).

Ignore 

Ignore - Ignore the argument (treat as void).

Useful for void and empty structs.

Expand 

Expand - Only valid for aggregate argument types.

The structure should be expanded into consecutive arguments for its constituent fields. Currently expand is only allowed on structures whose fields are all scalar types or are themselves expandable types.

CoerceAndExpand 

CoerceAndExpand - Only valid for aggregate argument types.

The structure should be expanded into consecutive arguments corresponding to the non-array elements of the type stored in CoerceToType. Array elements in the type are assumed to be padding and skipped.

InAlloca 

InAlloca - Pass the argument directly using the LLVM inalloca attribute.

This is similar to indirect with byval, except it only applies to arguments stored in memory and forbids any implicit copies. When applied to a return type, it means the value is returned indirectly via an implicit sret parameter stored in the argument struct.

KindFirst 
KindLast 

Definition at line 36 of file CGFunctionInfo.h.

Constructor & Destructor Documentation

◆ ABIArgInfo()

clang::CodeGen::ABIArgInfo::ABIArgInfo ( )
inline

Member Function Documentation

◆ canHaveCoerceToType()

bool clang::CodeGen::ABIArgInfo::canHaveCoerceToType ( ) const
inline

◆ dump()

LLVM_DUMP_METHOD void ABIArgInfo::dump ( ) const

Definition at line 208 of file TargetInfo.cpp.

References clang::CodeGen::Type.

Referenced by setCanBeFlattened().

◆ getCanBeFlattened()

bool clang::CodeGen::ABIArgInfo::getCanBeFlattened ( ) const
inline

Definition at line 366 of file CGFunctionInfo.h.

References isDirect().

Referenced by clang::CodeGen::CodeGenTypes::GetFunctionType().

◆ getCoerceAndExpand()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getCoerceAndExpand ( llvm::StructType *  coerceToType,
llvm::Type unpaddedCoerceToType 
)
inlinestatic
Parameters
unpaddedCoerceToTypeThe coerce-to type with padding elements removed, canonicalized to a single element if it would otherwise have exactly one element.

Definition at line 189 of file CGFunctionInfo.h.

References ABIArgInfo(), CoerceAndExpand, and isPaddingForCoerceAndExpand().

Referenced by classifyExpandedType().

◆ getCoerceAndExpandType()

llvm::StructType* clang::CodeGen::ABIArgInfo::getCoerceAndExpandType ( ) const
inline

Definition at line 278 of file CGFunctionInfo.h.

References isCoerceAndExpand().

◆ getCoerceAndExpandTypeSequence()

ArrayRef<llvm::Type *> clang::CodeGen::ABIArgInfo::getCoerceAndExpandTypeSequence ( ) const
inline

◆ getCoerceToType()

llvm::Type* clang::CodeGen::ABIArgInfo::getCoerceToType ( ) const
inline

◆ getDirect()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getDirect ( llvm::Type T = nullptr,
unsigned  Offset = 0,
llvm::Type Padding = nullptr,
bool  CanBeFlattened = true 
)
inlinestatic

◆ getDirectInReg()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getDirectInReg ( llvm::Type T = nullptr)
inlinestatic

Definition at line 131 of file CGFunctionInfo.h.

References getDirect().

◆ getDirectOffset()

unsigned clang::CodeGen::ABIArgInfo::getDirectOffset ( ) const
inline

Definition at line 248 of file CGFunctionInfo.h.

References DirectOffset, isDirect(), and isExtend().

Referenced by emitAddressAtOffset().

◆ getExpand()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getExpand ( )
inlinestatic

Definition at line 173 of file CGFunctionInfo.h.

References ABIArgInfo(), and Expand.

Referenced by classifyType(), EmitX86_64VAArgFromMemory(), and getExpandWithPadding().

◆ getExpandWithPadding()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getExpandWithPadding ( bool  PaddingInReg,
llvm::Type Padding 
)
inlinestatic

Definition at line 178 of file CGFunctionInfo.h.

References getExpand().

◆ getExtend()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getExtend ( llvm::Type T = nullptr)
inlinestatic

◆ getExtendInReg()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getExtendInReg ( llvm::Type T = nullptr)
inlinestatic

Definition at line 143 of file CGFunctionInfo.h.

References getExtend().

◆ getIgnore()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getIgnore ( )
inlinestatic

◆ getInAlloca()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getInAlloca ( unsigned  FieldIndex)
inlinestatic

Definition at line 168 of file CGFunctionInfo.h.

References ABIArgInfo(), and InAlloca.

◆ getInAllocaFieldIndex()

unsigned clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex ( ) const
inline

Definition at line 345 of file CGFunctionInfo.h.

References AllocaFieldIndex, and isInAlloca().

Referenced by clang::CodeGen::CodeGenFunction::StartFunction().

◆ getInAllocaSRet()

bool clang::CodeGen::ABIArgInfo::getInAllocaSRet ( ) const
inline

Return true if this field of an inalloca struct should be returned to implement a struct return calling convention.

Definition at line 356 of file CGFunctionInfo.h.

References isInAlloca().

Referenced by clang::CodeGen::CodeGenTypes::GetFunctionType().

◆ getIndirect()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getIndirect ( CharUnits  Alignment,
bool  ByVal = true,
bool  Realign = false,
llvm::Type Padding = nullptr 
)
inlinestatic

◆ getIndirectAlign()

CharUnits clang::CodeGen::ABIArgInfo::getIndirectAlign ( ) const
inline

◆ getIndirectByVal()

bool clang::CodeGen::ABIArgInfo::getIndirectByVal ( ) const
inline

Definition at line 318 of file CGFunctionInfo.h.

References isIndirect().

Referenced by isArgInAlloca().

◆ getIndirectInReg()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getIndirectInReg ( CharUnits  Alignment,
bool  ByVal = true,
bool  Realign = false 
)
inlinestatic

Definition at line 162 of file CGFunctionInfo.h.

References getIndirect().

Referenced by clang::CodeGen::ABIInfo::getNaturalAlignIndirectInReg().

◆ getIndirectRealign()

bool clang::CodeGen::ABIArgInfo::getIndirectRealign ( ) const
inline

Definition at line 327 of file CGFunctionInfo.h.

References isIndirect().

◆ getInReg()

bool clang::CodeGen::ABIArgInfo::getInReg ( ) const
inline

◆ getKind()

Kind clang::CodeGen::ABIArgInfo::getKind ( ) const
inline

◆ getPaddingInReg()

bool clang::CodeGen::ABIArgInfo::getPaddingInReg ( ) const
inline

Definition at line 261 of file CGFunctionInfo.h.

◆ getPaddingType()

llvm::Type* clang::CodeGen::ABIArgInfo::getPaddingType ( ) const
inline

Definition at line 257 of file CGFunctionInfo.h.

References PaddingType.

Referenced by clang::CodeGen::CodeGenTypes::GetFunctionType().

◆ getUnpaddedCoerceAndExpandType()

llvm::Type* clang::CodeGen::ABIArgInfo::getUnpaddedCoerceAndExpandType ( ) const
inline

◆ isCoerceAndExpand()

bool clang::CodeGen::ABIArgInfo::isCoerceAndExpand ( ) const
inline

◆ isDirect()

bool clang::CodeGen::ABIArgInfo::isDirect ( ) const
inline

◆ isExpand()

bool clang::CodeGen::ABIArgInfo::isExpand ( ) const
inline

Definition at line 240 of file CGFunctionInfo.h.

References Expand.

◆ isExtend()

bool clang::CodeGen::ABIArgInfo::isExtend ( ) const
inline

Definition at line 237 of file CGFunctionInfo.h.

References Extend.

Referenced by canHaveCoerceToType(), getDirectOffset(), getInReg(), setDirectOffset(), and setInReg().

◆ isIgnore()

bool clang::CodeGen::ABIArgInfo::isIgnore ( ) const
inline

Definition at line 238 of file CGFunctionInfo.h.

References Ignore.

◆ isInAlloca()

bool clang::CodeGen::ABIArgInfo::isInAlloca ( ) const
inline

◆ isIndirect()

bool clang::CodeGen::ABIArgInfo::isIndirect ( ) const
inline

◆ isPaddingForCoerceAndExpand()

static bool clang::CodeGen::ABIArgInfo::isPaddingForCoerceAndExpand ( llvm::Type eltType)
inlinestatic

Definition at line 225 of file CGFunctionInfo.h.

Referenced by getCoerceAndExpand().

◆ isSRetAfterThis()

bool clang::CodeGen::ABIArgInfo::isSRetAfterThis ( ) const
inline

◆ setCanBeFlattened()

void clang::CodeGen::ABIArgInfo::setCanBeFlattened ( bool  Flatten)
inline

Definition at line 371 of file CGFunctionInfo.h.

References dump(), and isDirect().

◆ setCoerceToType()

void clang::CodeGen::ABIArgInfo::setCoerceToType ( llvm::Type T)
inline

◆ setDirectOffset()

void clang::CodeGen::ABIArgInfo::setDirectOffset ( unsigned  Offset)
inline

Definition at line 252 of file CGFunctionInfo.h.

References DirectOffset, isDirect(), and isExtend().

◆ setInAllocaFieldIndex()

void clang::CodeGen::ABIArgInfo::setInAllocaFieldIndex ( unsigned  FieldIndex)
inline

Definition at line 349 of file CGFunctionInfo.h.

References AllocaFieldIndex, and isInAlloca().

◆ setInAllocaSRet()

void clang::CodeGen::ABIArgInfo::setInAllocaSRet ( bool  SRet)
inline

Definition at line 361 of file CGFunctionInfo.h.

References isInAlloca().

◆ setIndirectAlign()

void clang::CodeGen::ABIArgInfo::setIndirectAlign ( CharUnits  IA)
inline

Definition at line 313 of file CGFunctionInfo.h.

References clang::CharUnits::getQuantity(), IndirectAlign, and isIndirect().

◆ setIndirectByVal()

void clang::CodeGen::ABIArgInfo::setIndirectByVal ( bool  IBV)
inline

Definition at line 322 of file CGFunctionInfo.h.

References isIndirect().

◆ setIndirectRealign()

void clang::CodeGen::ABIArgInfo::setIndirectRealign ( bool  IR)
inline

Definition at line 331 of file CGFunctionInfo.h.

References isIndirect().

◆ setInReg()

void clang::CodeGen::ABIArgInfo::setInReg ( bool  IR)
inline

Definition at line 303 of file CGFunctionInfo.h.

References isDirect(), isExtend(), and isIndirect().

◆ setPaddingInReg()

void clang::CodeGen::ABIArgInfo::setPaddingInReg ( bool  PIR)
inline

Definition at line 264 of file CGFunctionInfo.h.

◆ setSRetAfterThis()

void clang::CodeGen::ABIArgInfo::setSRetAfterThis ( bool  AfterThis)
inline

Definition at line 340 of file CGFunctionInfo.h.

References isIndirect().

Referenced by isDeletingDtor().

Member Data Documentation

◆ AllocaFieldIndex

unsigned clang::CodeGen::ABIArgInfo::AllocaFieldIndex

Definition at line 88 of file CGFunctionInfo.h.

Referenced by getInAllocaFieldIndex(), and setInAllocaFieldIndex().

◆ DirectOffset

unsigned clang::CodeGen::ABIArgInfo::DirectOffset

Definition at line 86 of file CGFunctionInfo.h.

Referenced by getDirectOffset(), and setDirectOffset().

◆ IndirectAlign

unsigned clang::CodeGen::ABIArgInfo::IndirectAlign

Definition at line 87 of file CGFunctionInfo.h.

Referenced by getIndirectAlign(), and setIndirectAlign().

◆ PaddingType

llvm::Type* clang::CodeGen::ABIArgInfo::PaddingType

Definition at line 82 of file CGFunctionInfo.h.

Referenced by getPaddingType().

◆ UnpaddedCoerceAndExpandType

llvm::Type* clang::CodeGen::ABIArgInfo::UnpaddedCoerceAndExpandType

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