clang  10.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)
 
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 33 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 35 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 220 of file TargetInfo.cpp.

References clang::CodeGen::Type.

Referenced by setCanBeFlattened().

◆ getCanBeFlattened()

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

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

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

Referenced by classifyExpandedType(), and getTypeString().

◆ getCoerceAndExpandType()

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

Definition at line 310 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().

Referenced by isRecordWithSSEVectorType().

◆ getDirectOffset()

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

Definition at line 271 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 201 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 166 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 191 of file CGFunctionInfo.h.

References ABIArgInfo(), and InAlloca.

Referenced by isRecordWithSSEVectorType().

◆ getInAllocaFieldIndex()

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

Definition at line 377 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 388 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 185 of file CGFunctionInfo.h.

References getIndirect().

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

◆ getIndirectRealign()

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

Definition at line 359 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 289 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 137 of file CGFunctionInfo.h.

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

Referenced by getExtend(), and getTypeString().

◆ 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 147 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 263 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 261 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 248 of file CGFunctionInfo.h.

Referenced by getCoerceAndExpand().

◆ isSignExt()

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

Definition at line 280 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 403 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 275 of file CGFunctionInfo.h.

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

◆ setInAllocaFieldIndex()

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

Definition at line 381 of file CGFunctionInfo.h.

References AllocaFieldIndex, and isInAlloca().

◆ setInAllocaSRet()

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

Definition at line 393 of file CGFunctionInfo.h.

References isInAlloca().

Referenced by isArgInAlloca().

◆ setIndirectAlign()

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

Definition at line 345 of file CGFunctionInfo.h.

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

◆ setIndirectByVal()

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

Definition at line 354 of file CGFunctionInfo.h.

References isIndirect().

◆ setIndirectRealign()

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

Definition at line 363 of file CGFunctionInfo.h.

References isIndirect().

◆ setInReg()

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

Definition at line 335 of file CGFunctionInfo.h.

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

Referenced by hasMicrosoftABIRestrictions(), and isRecordWithSSEVectorType().

◆ setPaddingInReg()

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

Definition at line 296 of file CGFunctionInfo.h.

◆ setSignExt()

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

Definition at line 284 of file CGFunctionInfo.h.

References isExtend().

◆ setSRetAfterThis()

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

Definition at line 372 of file CGFunctionInfo.h.

References isIndirect().

Referenced by hasMicrosoftABIRestrictions().

Member Data Documentation

◆ AllocaFieldIndex

unsigned clang::CodeGen::ABIArgInfo::AllocaFieldIndex

Definition at line 87 of file CGFunctionInfo.h.

Referenced by getInAllocaFieldIndex(), and setInAllocaFieldIndex().

◆ DirectOffset

unsigned clang::CodeGen::ABIArgInfo::DirectOffset

Definition at line 85 of file CGFunctionInfo.h.

Referenced by getDirectOffset(), and setDirectOffset().

◆ IndirectAlign

unsigned clang::CodeGen::ABIArgInfo::IndirectAlign

Definition at line 86 of file CGFunctionInfo.h.

Referenced by getIndirectAlign(), and setIndirectAlign().

◆ PaddingType

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

Definition at line 81 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: