clang 22.0.0git
|
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"
Public Types | |
enum | Kind : uint8_t { Direct , Extend , Indirect , IndirectAliased , Ignore , Expand , CoerceAndExpand , TargetSpecific , InAlloca , KindFirst = Direct , KindLast = InAlloca } |
Static Public Member Functions | |
static ABIArgInfo | getDirect (llvm::Type *T=nullptr, unsigned Offset=0, llvm::Type *Padding=nullptr, bool CanBeFlattened=true, unsigned Align=0) |
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 | getNoExtend (llvm::IntegerType *T) |
static ABIArgInfo | getExtendInReg (QualType Ty, llvm::Type *T=nullptr) |
static ABIArgInfo | getIgnore () |
static ABIArgInfo | getIndirect (CharUnits Alignment, unsigned AddrSpace, bool ByVal=true, bool Realign=false, llvm::Type *Padding=nullptr) |
static ABIArgInfo | getIndirectAliased (CharUnits Alignment, unsigned AddrSpace, bool Realign=false, llvm::Type *Padding=nullptr) |
Pass this in memory using the IR byref attribute. | |
static ABIArgInfo | getIndirectInReg (CharUnits Alignment, bool ByVal=true, bool Realign=false) |
static ABIArgInfo | getInAlloca (unsigned FieldIndex, bool Indirect=false) |
static ABIArgInfo | getExpand () |
static ABIArgInfo | getExpandWithPadding (bool PaddingInReg, llvm::Type *Padding) |
static ABIArgInfo | getCoerceAndExpand (llvm::StructType *coerceToType, llvm::Type *unpaddedCoerceToType) |
static ABIArgInfo | getTargetSpecific (llvm::Type *T=nullptr, unsigned Offset=0, llvm::Type *Padding=nullptr, bool CanBeFlattened=true, unsigned Align=0) |
static bool | isPaddingForCoerceAndExpand (llvm::Type *eltType) |
ABIArgInfo - Helper class to encapsulate information about how a specific C type should be passed to or returned from a function.
Definition at line 32 of file CGFunctionInfo.h.
enum clang::CodeGen::ABIArgInfo::Kind : uint8_t |
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) and address space. |
IndirectAliased | IndirectAliased - Similar to Indirect, but the pointer may be to an object that is otherwise referenced. The object is known to not be modified through any other references for the duration of the call, and the callee must not itself modify the object. Because C allows parameter variables to be modified and guarantees that they have unique addresses, the callee must defensively copy the object into a local variable if it might be modified or its address might be compared. Since those are uncommon, in principle this convention allows programs to avoid copies in more situations. However, it may introduce extra copies if the callee fails to prove that a copy is unnecessary and the caller naturally produces an unaliased object for the argument. |
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. |
TargetSpecific | TargetSpecific - Some argument types are passed as target specific types such as RISC-V's tuple type, these need to be handled in the target hook. |
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 34 of file CGFunctionInfo.h.
Definition at line 141 of file CGFunctionInfo.h.
References Direct, DirectAttr, false, clang::nullptr, and PaddingType.
Referenced by getCoerceAndExpand(), getDirect(), getDirectInReg(), getExpand(), getExpandWithPadding(), getExtend(), getExtendInReg(), getIgnore(), getInAlloca(), getIndirect(), getIndirectAliased(), getIndirectInReg(), getNoExtend(), getSignExtend(), getTargetSpecific(), and getZeroExtend().
|
inline |
Definition at line 329 of file CGFunctionInfo.h.
References isCoerceAndExpand(), isDirect(), isExtend(), and isTargetSpecific().
Referenced by clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(), DetermineNoUndef(), getCoerceToType(), and setCoerceToType().
LLVM_DUMP_METHOD void ABIArgInfo::dump | ( | ) | const |
Definition at line 29 of file TargetInfo.cpp.
References CoerceAndExpand, Direct, Expand, Extend, getCoerceAndExpandType(), getCoerceToType(), getInAllocaFieldIndex(), getIndirectAddrSpace(), getIndirectAlign(), getIndirectByVal(), getIndirectRealign(), clang::CharUnits::getQuantity(), Ignore, InAlloca, Indirect, IndirectAliased, and TargetSpecific.
|
inline |
Definition at line 510 of file CGFunctionInfo.h.
References isDirect(), and isTargetSpecific().
Referenced by canApplyNoFPClass(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
unpaddedCoerceToType | The coerce-to type with padding elements removed, canonicalized to a single element if it would otherwise have exactly one element. |
Definition at line 267 of file CGFunctionInfo.h.
References ABIArgInfo(), CoerceAndExpand, and isPaddingForCoerceAndExpand().
Referenced by classifyExpandedType().
|
inline |
Definition at line 401 of file CGFunctionInfo.h.
References clang::cast(), and isCoerceAndExpand().
Referenced by dump(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
inline |
Definition at line 411 of file CGFunctionInfo.h.
References isCoerceAndExpand(), and UnpaddedCoerceAndExpandType.
Referenced by clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inline |
Definition at line 391 of file CGFunctionInfo.h.
References canHaveCoerceToType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(), canApplyNoFPClass(), DetermineNoUndef(), dump(), emitAddressAtOffset(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), clang::CodeGen::EmitVAArgInstr(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
Definition at line 148 of file CGFunctionInfo.h.
References ABIArgInfo(), Direct, and clang::T.
Referenced by clang::CodeGen::DefaultABIInfo::classifyArgumentType(), clang::CodeGen::DefaultABIInfo::classifyReturnType(), classifyType(), and getDirectInReg().
|
inline |
Definition at line 346 of file CGFunctionInfo.h.
References DirectAttr, isDirect(), isExtend(), and isTargetSpecific().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().
|
inlinestatic |
Definition at line 159 of file CGFunctionInfo.h.
References ABIArgInfo(), getDirect(), and clang::T.
|
inline |
Definition at line 335 of file CGFunctionInfo.h.
References DirectAttr, isDirect(), isExtend(), and isTargetSpecific().
Referenced by emitAddressAtOffset(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and clang::CodeGen::EmitVAArgInstr().
|
inlinestatic |
Definition at line 251 of file CGFunctionInfo.h.
References ABIArgInfo(), and Expand.
Referenced by classifyType(), and getExpandWithPadding().
|
inlinestatic |
Definition at line 256 of file CGFunctionInfo.h.
References ABIArgInfo(), and getExpand().
|
inlinestatic |
Definition at line 189 of file CGFunctionInfo.h.
References ABIArgInfo(), getSignExtend(), getZeroExtend(), clang::Type::hasSignedIntegerRepresentation(), clang::Type::isIntegralOrEnumerationType(), and clang::T.
Referenced by clang::CodeGen::DefaultABIInfo::classifyArgumentType(), clang::CodeGen::DefaultABIInfo::classifyReturnType(), and getExtendInReg().
|
inlinestatic |
Definition at line 206 of file CGFunctionInfo.h.
References ABIArgInfo(), getExtend(), and clang::T.
|
inlinestatic |
Definition at line 211 of file CGFunctionInfo.h.
References ABIArgInfo(), and Ignore.
Referenced by classifyExpandedType(), clang::CodeGen::DefaultABIInfo::classifyReturnType(), and classifyType().
|
inlinestatic |
Definition at line 245 of file CGFunctionInfo.h.
References ABIArgInfo(), InAlloca, and Indirect.
|
inline |
Definition at line 480 of file CGFunctionInfo.h.
References AllocaFieldIndex, and isInAlloca().
Referenced by dump(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
inline |
Definition at line 489 of file CGFunctionInfo.h.
References isInAlloca().
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
inline |
Return true if this field of an inalloca struct should be returned to implement a struct return calling convention.
Definition at line 500 of file CGFunctionInfo.h.
References isInAlloca().
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
Definition at line 214 of file CGFunctionInfo.h.
References ABIArgInfo(), and Indirect.
Referenced by classifyExpandedType(), classifyType(), getIndirectInReg(), and clang::CodeGen::ABIInfo::getNaturalAlignIndirect().
|
inline |
Definition at line 452 of file CGFunctionInfo.h.
References IndirectAttr, isIndirect(), and isIndirectAliased().
Referenced by dump(), clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
Pass this in memory using the IR byref attribute.
Definition at line 228 of file CGFunctionInfo.h.
References ABIArgInfo(), and IndirectAliased.
|
inline |
Definition at line 434 of file CGFunctionInfo.h.
References clang::CharUnits::fromQuantity(), IndirectAttr, isIndirect(), and isIndirectAliased().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList(), dump(), clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
inline |
Definition at line 443 of file CGFunctionInfo.h.
References isIndirect().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList(), dump(), clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitParmDecl().
|
inlinestatic |
Definition at line 239 of file CGFunctionInfo.h.
References ABIArgInfo(), and getIndirect().
Referenced by clang::CodeGen::ABIInfo::getNaturalAlignIndirectInReg().
|
inline |
Definition at line 462 of file CGFunctionInfo.h.
References isIndirect(), and isIndirectAliased().
Referenced by dump(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and clang::CodeGen::EmitVAArgInstr().
|
inline |
Definition at line 421 of file CGFunctionInfo.h.
References isDirect(), isExtend(), isIndirect(), and isTargetSpecific().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList(), clang::CodeGen::EmitVAArgInstr(), isArgInAlloca(), and clang::CodeGen::CodeGenModule::ReturnTypeHasInReg().
|
inline |
Definition at line 318 of file CGFunctionInfo.h.
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList(), DetermineNoUndef(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitForwardingCallToLambda(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), clang::CodeGen::CodeGenTypes::GetFunctionType(), isArgInAlloca(), and similar().
|
inlinestatic |
Definition at line 197 of file CGFunctionInfo.h.
References ABIArgInfo(), Extend, and clang::T.
|
inline |
Definition at line 384 of file CGFunctionInfo.h.
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().
|
inline |
Definition at line 380 of file CGFunctionInfo.h.
References PaddingType.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::EmitVAArgInstr(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
Definition at line 165 of file CGFunctionInfo.h.
References ABIArgInfo(), Extend, clang::Type::isIntegralOrEnumerationType(), and clang::T.
Referenced by getExtend().
|
inlinestatic |
Definition at line 299 of file CGFunctionInfo.h.
References ABIArgInfo(), clang::T, and TargetSpecific.
|
inline |
Definition at line 406 of file CGFunctionInfo.h.
References isCoerceAndExpand(), and UnpaddedCoerceAndExpandType.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and clang::CodeGen::CodeGenTypes::GetFunctionType().
|
inlinestatic |
Definition at line 176 of file CGFunctionInfo.h.
References ABIArgInfo(), Extend, clang::Type::isIntegralOrEnumerationType(), and clang::T.
Referenced by getExtend().
|
inline |
Definition at line 326 of file CGFunctionInfo.h.
References CoerceAndExpand.
Referenced by canHaveCoerceToType(), clang::CodeGen::CodeGenFunction::EmitCall(), getCoerceAndExpandType(), getCoerceAndExpandTypeSequence(), and getUnpaddedCoerceAndExpandType().
|
inline |
Definition at line 319 of file CGFunctionInfo.h.
References Direct.
Referenced by canHaveCoerceToType(), clang::CodeGen::CodeGenFunction::EmitAsmStmt(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), clang::CodeGen::CodeGenFunction::EmitMustTailThunk(), clang::CodeGen::EmitVAArgInstr(), getCanBeFlattened(), getDirectAlign(), getDirectOffset(), clang::CodeGen::CodeGenTypes::GetFunctionType(), getInReg(), setCanBeFlattened(), setDirectAlign(), setDirectOffset(), and setInReg().
|
inline |
Definition at line 325 of file CGFunctionInfo.h.
References Expand.
|
inline |
Definition at line 321 of file CGFunctionInfo.h.
References Extend.
Referenced by canHaveCoerceToType(), clang::CodeGen::CodeGenFunction::EmitAsmStmt(), clang::CodeGen::EmitVAArgInstr(), getDirectAlign(), getDirectOffset(), getInReg(), isNoExt(), isSignExt(), isZeroExt(), setDirectAlign(), setDirectOffset(), setInReg(), setSignExt(), and setZeroExt().
|
inline |
Definition at line 322 of file CGFunctionInfo.h.
References Ignore.
|
inline |
Definition at line 320 of file CGFunctionInfo.h.
References InAlloca.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitMustTailThunk(), getInAllocaFieldIndex(), getInAllocaIndirect(), getInAllocaSRet(), setInAllocaFieldIndex(), setInAllocaIndirect(), and setInAllocaSRet().
|
inline |
Definition at line 323 of file CGFunctionInfo.h.
References Indirect.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitMustTailThunk(), clang::CodeGen::CodeGenFunction::EmitParmDecl(), clang::CodeGen::EmitVAArgInstr(), getIndirectAddrSpace(), getIndirectAlign(), getIndirectByVal(), getIndirectRealign(), getInReg(), isSRetAfterThis(), clang::CodeGen::CodeGenModule::ReturnTypeUsesSRet(), setIndirectAddrSpace(), setIndirectAlign(), setIndirectByVal(), setIndirectRealign(), setInReg(), and setSRetAfterThis().
|
inline |
Definition at line 324 of file CGFunctionInfo.h.
References IndirectAliased.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), getIndirectAddrSpace(), getIndirectAlign(), getIndirectRealign(), setIndirectAddrSpace(), setIndirectAlign(), and setIndirectRealign().
|
inline |
Definition at line 375 of file CGFunctionInfo.h.
References isExtend().
Referenced by DetermineNoUndef().
|
inlinestatic |
Definition at line 313 of file CGFunctionInfo.h.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and getCoerceAndExpand().
|
inline |
Definition at line 357 of file CGFunctionInfo.h.
References isExtend().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().
|
inline |
Definition at line 471 of file CGFunctionInfo.h.
References isIndirect().
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), and clang::CodeGen::CodeGenFunction::EmitMustTailThunk().
|
inline |
Definition at line 327 of file CGFunctionInfo.h.
References TargetSpecific.
Referenced by canHaveCoerceToType(), getCanBeFlattened(), getDirectAlign(), getDirectOffset(), getInReg(), setCanBeFlattened(), setDirectAlign(), setDirectOffset(), and setInReg().
|
inline |
Definition at line 366 of file CGFunctionInfo.h.
References isExtend().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().
|
inline |
Definition at line 515 of file CGFunctionInfo.h.
References isDirect(), and isTargetSpecific().
|
inline |
Definition at line 396 of file CGFunctionInfo.h.
References canHaveCoerceToType(), and clang::T.
Referenced by clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo().
|
inline |
Definition at line 351 of file CGFunctionInfo.h.
References DirectAttr, isDirect(), isExtend(), and isTargetSpecific().
|
inline |
Definition at line 340 of file CGFunctionInfo.h.
References DirectAttr, isDirect(), isExtend(), and isTargetSpecific().
|
inline |
Definition at line 484 of file CGFunctionInfo.h.
References AllocaFieldIndex, and isInAlloca().
|
inline |
Definition at line 493 of file CGFunctionInfo.h.
References Indirect, and isInAlloca().
|
inline |
Definition at line 505 of file CGFunctionInfo.h.
References isInAlloca().
|
inline |
Definition at line 457 of file CGFunctionInfo.h.
References IndirectAttr, isIndirect(), and isIndirectAliased().
|
inline |
Definition at line 438 of file CGFunctionInfo.h.
References clang::CharUnits::getQuantity(), IndirectAttr, isIndirect(), and isIndirectAliased().
|
inline |
Definition at line 447 of file CGFunctionInfo.h.
References isIndirect().
|
inline |
Definition at line 466 of file CGFunctionInfo.h.
References isIndirect(), and isIndirectAliased().
|
inline |
Definition at line 427 of file CGFunctionInfo.h.
References isDirect(), isExtend(), isIndirect(), and isTargetSpecific().
|
inline |
Definition at line 387 of file CGFunctionInfo.h.
|
inline |
Definition at line 361 of file CGFunctionInfo.h.
References isExtend().
|
inline |
Definition at line 475 of file CGFunctionInfo.h.
References isIndirect().
|
inline |
Definition at line 370 of file CGFunctionInfo.h.
References isExtend().
unsigned clang::CodeGen::ABIArgInfo::AllocaFieldIndex |
Definition at line 112 of file CGFunctionInfo.h.
Referenced by getInAllocaFieldIndex(), and setInAllocaFieldIndex().
DirectAttrInfo clang::CodeGen::ABIArgInfo::DirectAttr |
Definition at line 110 of file CGFunctionInfo.h.
Referenced by ABIArgInfo(), getDirectAlign(), getDirectOffset(), setDirectAlign(), and setDirectOffset().
IndirectAttrInfo clang::CodeGen::ABIArgInfo::IndirectAttr |
Definition at line 111 of file CGFunctionInfo.h.
Referenced by getIndirectAddrSpace(), getIndirectAlign(), setIndirectAddrSpace(), and setIndirectAlign().
llvm::Type* clang::CodeGen::ABIArgInfo::PaddingType |
Definition at line 98 of file CGFunctionInfo.h.
Referenced by ABIArgInfo(), and getPaddingType().
llvm::Type* clang::CodeGen::ABIArgInfo::UnpaddedCoerceAndExpandType |
Definition at line 99 of file CGFunctionInfo.h.
Referenced by getCoerceAndExpandTypeSequence(), and getUnpaddedCoerceAndExpandType().