clang  8.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)
 
bool isSignExt () const
 
void setSignExt (bool SExt)
 
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)
 
bool getSuppressSRet () const
 
void setSuppressSRet (bool Suppress)
 
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 getSignExtend (QualType Ty, llvm::Type *T=nullptr)
 
static ABIArgInfo getZeroExtend (QualType Ty, llvm::Type *T=nullptr)
 
static ABIArgInfo getExtend (QualType Ty, llvm::Type *T=nullptr)
 
static ABIArgInfo getExtendInReg (QualType Ty, 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 221 of file TargetInfo.cpp.

References clang::CodeGen::Type.

Referenced by setSuppressSRet().

◆ getCanBeFlattened()

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

Definition at line 401 of file CGFunctionInfo.h.

References isDirect().

Referenced by emitAddressAtOffset(), and 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 215 of file CGFunctionInfo.h.

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

Referenced by classifyExpandedType().

◆ getCoerceAndExpandType()

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

Definition at line 313 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 134 of file CGFunctionInfo.h.

References getDirect().

Referenced by isRecordWithSSEVectorType().

◆ getDirectOffset()

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

Definition at line 274 of file CGFunctionInfo.h.

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

Referenced by emitAddressAtOffset().

◆ getExpand()

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

◆ getExpandWithPadding()

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

Definition at line 204 of file CGFunctionInfo.h.

References getExpand().

Referenced by isRecordWithSSEVectorType().

◆ getExtend()

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

◆ getExtendInReg()

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

Definition at line 169 of file CGFunctionInfo.h.

References getExtend().

Referenced by isRecordWithSSEVectorType().

◆ getIgnore()

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

◆ getInAlloca()

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

Definition at line 194 of file CGFunctionInfo.h.

References ABIArgInfo(), and InAlloca.

Referenced by isRecordWithSSEVectorType().

◆ getInAllocaFieldIndex()

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

Definition at line 380 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 391 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

◆ getIndirectInReg()

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

Definition at line 188 of file CGFunctionInfo.h.

References getIndirect().

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

◆ getIndirectRealign()

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

Definition at line 362 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

◆ getPaddingType()

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

Definition at line 292 of file CGFunctionInfo.h.

References PaddingType.

Referenced by emitAddressAtOffset(), and clang::CodeGen::CodeGenTypes::GetFunctionType().

◆ getSignExtend()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getSignExtend ( QualType  Ty,
llvm::Type T = nullptr 
)
inlinestatic

Definition at line 140 of file CGFunctionInfo.h.

References ABIArgInfo(), Extend, and clang::Type::isIntegralOrEnumerationType().

Referenced by getExtend(), and getTypeString().

◆ getSuppressSRet()

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

Definition at line 411 of file CGFunctionInfo.h.

References isIndirect().

Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().

◆ getUnpaddedCoerceAndExpandType()

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

◆ getZeroExtend()

static ABIArgInfo clang::CodeGen::ABIArgInfo::getZeroExtend ( QualType  Ty,
llvm::Type T = nullptr 
)
inlinestatic

Definition at line 150 of file CGFunctionInfo.h.

References ABIArgInfo(), Extend, and clang::Type::isIntegralOrEnumerationType().

Referenced by getExtend().

◆ 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 266 of file CGFunctionInfo.h.

References Expand.

◆ isExtend()

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

◆ isIgnore()

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

Definition at line 264 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 251 of file CGFunctionInfo.h.

Referenced by getCoerceAndExpand().

◆ isSignExt()

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

Definition at line 283 of file CGFunctionInfo.h.

References isExtend().

Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().

◆ isSRetAfterThis()

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

◆ setCanBeFlattened()

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

Definition at line 406 of file CGFunctionInfo.h.

References isDirect().

◆ setCoerceToType()

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

◆ setDirectOffset()

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

Definition at line 278 of file CGFunctionInfo.h.

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

◆ setInAllocaFieldIndex()

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

Definition at line 384 of file CGFunctionInfo.h.

References AllocaFieldIndex, and isInAlloca().

◆ setInAllocaSRet()

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

Definition at line 396 of file CGFunctionInfo.h.

References isInAlloca().

Referenced by isArgInAlloca().

◆ setIndirectAlign()

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

Definition at line 348 of file CGFunctionInfo.h.

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

◆ setIndirectByVal()

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

Definition at line 357 of file CGFunctionInfo.h.

References isIndirect().

◆ setIndirectRealign()

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

Definition at line 366 of file CGFunctionInfo.h.

References isIndirect().

◆ setInReg()

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

Definition at line 338 of file CGFunctionInfo.h.

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

Referenced by isRecordWithSSEVectorType().

◆ setPaddingInReg()

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

Definition at line 299 of file CGFunctionInfo.h.

◆ setSignExt()

void clang::CodeGen::ABIArgInfo::setSignExt ( bool  SExt)
inline

Definition at line 287 of file CGFunctionInfo.h.

References isExtend().

◆ setSRetAfterThis()

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

Definition at line 375 of file CGFunctionInfo.h.

References isIndirect().

Referenced by isDeletingDtor().

◆ setSuppressSRet()

void clang::CodeGen::ABIArgInfo::setSuppressSRet ( bool  Suppress)
inline

Definition at line 416 of file CGFunctionInfo.h.

References dump(), and 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: