clang 20.0.0git
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
clang::CodeGen::TargetCodeGenInfo Class Reference

TargetCodeGenInfo - This class organizes various target-specific codegeneration issues, like target-specific attributes, builtins and so on. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/CodeGen/TargetInfo.h"

Inheritance diagram for clang::CodeGen::TargetCodeGenInfo:
Inheritance graph
[legend]

Classes

class  TargetOpenCLBlockHelper
 Interface class for filling custom fields of a block literal for OpenCL. More...
 

Public Member Functions

 TargetCodeGenInfo (std::unique_ptr< ABIInfo > Info)
 
virtual ~TargetCodeGenInfo ()
 
const ABIInfogetABIInfo () const
 getABIInfo() - Returns ABI info helper for the target.
 
const SwiftABIInfogetSwiftABIInfo () const
 Returns Swift ABI info helper for the target.
 
virtual void setTargetAttributes (const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const
 setTargetAttributes - Provides a convenient hook to handle extra target-specific attributes for the given global.
 
virtual void emitTargetMetadata (CodeGen::CodeGenModule &CGM, const llvm::MapVector< GlobalDecl, StringRef > &MangledDeclNames) const
 emitTargetMetadata - Provides a convenient hook to handle extra target-specific metadata for the given globals.
 
virtual void emitTargetGlobals (CodeGen::CodeGenModule &CGM) const
 Provides a convenient hook to handle extra target-specific globals.
 
virtual void checkFunctionABI (CodeGenModule &CGM, const FunctionDecl *Decl) const
 Any further codegen related checks that need to be done on a function signature in a target specific manner.
 
virtual void checkFunctionCallABI (CodeGenModule &CGM, SourceLocation CallLoc, const FunctionDecl *Caller, const FunctionDecl *Callee, const CallArgList &Args, QualType ReturnType) const
 Any further codegen related checks that need to be done on a function call in a target specific manner.
 
virtual unsigned getSizeOfUnwindException () const
 Determines the size of struct _Unwind_Exception on this platform, in 8-bit units.
 
virtual bool extendPointerWithSExt () const
 Controls whether __builtin_extend_pointer should sign-extend pointers to uint64_t or zero-extend them (the default).
 
virtual int getDwarfEHStackPointer (CodeGen::CodeGenModule &M) const
 Determines the DWARF register number for the stack pointer, for exception-handling purposes.
 
virtual bool initDwarfEHRegSizeTable (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const
 Initializes the given DWARF EH register-size table, a char*.
 
virtual llvm::Value * decodeReturnAddress (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const
 Performs the code-generation required to convert a return address as stored by the system into the actual address of the next instruction that will be executed.
 
virtual llvm::Value * encodeReturnAddress (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const
 Performs the code-generation required to convert the address of an instruction into a return address suitable for storage by the system in a return slot.
 
virtual llvm::Value * testFPKind (llvm::Value *V, unsigned BuiltinID, CGBuilderTy &Builder, CodeGenModule &CGM) const
 Performs a target specific test of a floating point value for things like IsNaN, Infinity, ... Nullptr is returned if no implementation exists.
 
virtual llvm::Type * adjustInlineAsmType (CodeGen::CodeGenFunction &CGF, StringRef Constraint, llvm::Type *Ty) const
 Corrects the low-level LLVM type for a given constraint and "usual" type.
 
virtual bool isScalarizableAsmOperand (CodeGen::CodeGenFunction &CGF, llvm::Type *Ty) const
 Target hook to decide whether an inline asm operand can be passed by value.
 
virtual void addReturnRegisterOutputs (CodeGen::CodeGenFunction &CGF, CodeGen::LValue ReturnValue, std::string &Constraints, std::vector< llvm::Type * > &ResultRegTypes, std::vector< llvm::Type * > &ResultTruncRegTypes, std::vector< CodeGen::LValue > &ResultRegDests, std::string &AsmString, unsigned NumOutputs) const
 Adds constraints and types for result registers.
 
virtual bool doesReturnSlotInterfereWithArgs () const
 doesReturnSlotInterfereWithArgs - Return true if the target uses an argument slot for an 'sret' type.
 
virtual StringRef getARCRetainAutoreleasedReturnValueMarker () const
 Retrieve the address of a function to call immediately before calling objc_retainAutoreleasedReturnValue.
 
virtual bool markARCOptimizedReturnCallsAsNoTail () const
 Determine whether a call to objc_retainAutoreleasedReturnValue or objc_unsafeClaimAutoreleasedReturnValue should be marked as 'notail'.
 
virtual llvm::Constant * getUBSanFunctionSignature (CodeGen::CodeGenModule &CGM) const
 Return a constant used by UBSan as a signature to identify functions possessing type information, or 0 if the platform is unsupported.
 
virtual bool isNoProtoCallVariadic (const CodeGen::CallArgList &args, const FunctionNoProtoType *fnType) const
 Determine whether a call to an unprototyped functions under the given calling convention should use the variadic convention or the non-variadic convention.
 
virtual void getDependentLibraryOption (llvm::StringRef Lib, llvm::SmallString< 24 > &Opt) const
 Gets the linker options necessary to link a dependent library on this platform.
 
virtual void getDetectMismatchOption (llvm::StringRef Name, llvm::StringRef Value, llvm::SmallString< 32 > &Opt) const
 Gets the linker options necessary to detect object file mismatches on this platform.
 
virtual unsigned getOpenCLKernelCallingConv () const
 Get LLVM calling convention for OpenCL kernel.
 
virtual llvm::Constant * getNullPointer (const CodeGen::CodeGenModule &CGM, llvm::PointerType *T, QualType QT) const
 Get target specific null pointer.
 
virtual LangAS getGlobalVarAddressSpace (CodeGenModule &CGM, const VarDecl *D) const
 Get target favored AST address space of a global variable for languages other than OpenCL and CUDA.
 
virtual LangAS getASTAllocaAddressSpace () const
 Get the AST address space for alloca.
 
Address performAddrSpaceCast (CodeGen::CodeGenFunction &CGF, Address Addr, LangAS SrcAddr, LangAS DestAddr, llvm::Type *DestTy, bool IsNonNull=false) const
 
virtual llvm::Value * performAddrSpaceCast (CodeGen::CodeGenFunction &CGF, llvm::Value *V, LangAS SrcAddr, LangAS DestAddr, llvm::Type *DestTy, bool IsNonNull=false) const
 Perform address space cast of an expression of pointer type.
 
virtual llvm::Constant * performAddrSpaceCast (CodeGenModule &CGM, llvm::Constant *V, LangAS SrcAddr, LangAS DestAddr, llvm::Type *DestTy) const
 Perform address space cast of a constant expression of pointer type.
 
virtual LangAS getAddrSpaceOfCxaAtexitPtrParam () const
 Get address space of pointer parameter for __cxa_atexit.
 
virtual llvm::SyncScope::ID getLLVMSyncScopeID (const LangOptions &LangOpts, SyncScope Scope, llvm::AtomicOrdering Ordering, llvm::LLVMContext &Ctx) const
 Get the syncscope used in LLVM IR.
 
virtual void setTargetAtomicMetadata (CodeGenFunction &CGF, llvm::AtomicRMWInst &RMW) const
 Allow the target to apply other metadata to an atomic instruction.
 
virtual TargetOpenCLBlockHelpergetTargetOpenCLBlockHelper () const
 
virtual llvm::Value * createEnqueuedBlockKernel (CodeGenFunction &CGF, llvm::Function *BlockInvokeFunc, llvm::Type *BlockTy) const
 Create an OpenCL kernel for an enqueued block.
 
virtual bool shouldEmitStaticExternCAliases () const
 
virtual bool shouldEmitDWARFBitFieldSeparators () const
 
virtual void setCUDAKernelCallingConvention (const FunctionType *&FT) const
 
virtual llvm::Type * getCUDADeviceBuiltinSurfaceDeviceType () const
 Return the device-side type for the CUDA device builtin surface type.
 
virtual llvm::Type * getCUDADeviceBuiltinTextureDeviceType () const
 Return the device-side type for the CUDA device builtin texture type.
 
virtual llvm::Type * getWasmExternrefReferenceType () const
 Return the WebAssembly externref reference type.
 
virtual llvm::Type * getWasmFuncrefReferenceType () const
 Return the WebAssembly funcref reference type.
 
virtual bool emitCUDADeviceBuiltinSurfaceDeviceCopy (CodeGenFunction &CGF, LValue Dst, LValue Src) const
 Emit the device-side copy of the builtin surface type.
 
virtual bool emitCUDADeviceBuiltinTextureDeviceCopy (CodeGenFunction &CGF, LValue Dst, LValue Src) const
 Emit the device-side copy of the builtin texture type.
 
virtual llvm::Type * getOpenCLType (CodeGenModule &CGM, const Type *T) const
 Return an LLVM type that corresponds to an OpenCL type.
 
virtual llvm::Type * getHLSLType (CodeGenModule &CGM, const Type *T) const
 Return an LLVM type that corresponds to a HLSL type.
 

Static Public Member Functions

static void setBranchProtectionFnAttributes (const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F)
 
static void initBranchProtectionFnAttributes (const TargetInfo::BranchProtectionInfo &BPI, llvm::AttrBuilder &FuncAttrs)
 

Protected Member Functions

template<typename T >
const TgetABIInfo () const
 
void addStackProbeTargetAttributes (const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const
 

Static Protected Member Functions

static std::string qualifyWindowsLibrary (StringRef Lib)
 

Protected Attributes

std::unique_ptr< SwiftABIInfoSwiftInfo
 

Detailed Description

TargetCodeGenInfo - This class organizes various target-specific codegeneration issues, like target-specific attributes, builtins and so on.

Definition at line 47 of file TargetInfo.h.

Constructor & Destructor Documentation

◆ TargetCodeGenInfo()

TargetCodeGenInfo::TargetCodeGenInfo ( std::unique_ptr< ABIInfo Info)

Definition at line 70 of file TargetInfo.cpp.

◆ ~TargetCodeGenInfo()

TargetCodeGenInfo::~TargetCodeGenInfo ( )
virtualdefault

Member Function Documentation

◆ addReturnRegisterOutputs()

virtual void clang::CodeGen::TargetCodeGenInfo::addReturnRegisterOutputs ( CodeGen::CodeGenFunction CGF,
CodeGen::LValue  ReturnValue,
std::string &  Constraints,
std::vector< llvm::Type * > &  ResultRegTypes,
std::vector< llvm::Type * > &  ResultTruncRegTypes,
std::vector< CodeGen::LValue > &  ResultRegDests,
std::string &  AsmString,
unsigned  NumOutputs 
) const
inlinevirtual

Adds constraints and types for result registers.

Definition at line 186 of file TargetInfo.h.

◆ addStackProbeTargetAttributes()

void TargetCodeGenInfo::addStackProbeTargetAttributes ( const Decl D,
llvm::GlobalValue *  GV,
CodeGen::CodeGenModule CGM 
) const
protected

Definition at line 162 of file TargetInfo.cpp.

References clang::CodeGen::CodeGenModule::getCodeGenOpts().

◆ adjustInlineAsmType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::adjustInlineAsmType ( CodeGen::CodeGenFunction CGF,
StringRef  Constraint,
llvm::Type *  Ty 
) const
inlinevirtual

Corrects the low-level LLVM type for a given constraint and "usual" type.

Returns
A pointer to a new LLVM type, possibly the same as the original on success; 0 on failure.

Definition at line 172 of file TargetInfo.h.

◆ checkFunctionABI()

virtual void clang::CodeGen::TargetCodeGenInfo::checkFunctionABI ( CodeGenModule CGM,
const FunctionDecl Decl 
) const
inlinevirtual

Any further codegen related checks that need to be done on a function signature in a target specific manner.

Definition at line 90 of file TargetInfo.h.

◆ checkFunctionCallABI()

virtual void clang::CodeGen::TargetCodeGenInfo::checkFunctionCallABI ( CodeGenModule CGM,
SourceLocation  CallLoc,
const FunctionDecl Caller,
const FunctionDecl Callee,
const CallArgList Args,
QualType  ReturnType 
) const
inlinevirtual

Any further codegen related checks that need to be done on a function call in a target specific manner.

Definition at line 95 of file TargetInfo.h.

◆ createEnqueuedBlockKernel()

llvm::Value * TargetCodeGenInfo::createEnqueuedBlockKernel ( CodeGenFunction CGF,
llvm::Function *  Invoke,
llvm::Type *  BlockTy 
) const
virtual

Create an OpenCL kernel for an enqueued block.

The kernel function is a wrapper for the block invoke function with target-specific calling convention and ABI as an OpenCL kernel. The wrapper function accepts block context and block arguments in target-specific way and calls the original block invoke function.

The kernel has the same function type as the block invoke function. Its name is the name of the block invoke function postfixed with "_kernel". It simply calls the block invoke function then returns.

Definition at line 178 of file TargetInfo.cpp.

References clang::CodeGen::CodeGenModule::addDefaultFunctionDefinitionAttributes(), clang::CodeGen::CodeGenFunction::Builder, clang::C, clang::Call, clang::CC_OpenCLKernel, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenTypes::ClangCallConvToLLVMCallConv(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), and clang::CodeGen::CodeGenFunction::getTypes().

Referenced by clang::CodeGen::CGOpenCLRuntime::emitOpenCLEnqueuedBlock().

◆ decodeReturnAddress()

virtual llvm::Value * clang::CodeGen::TargetCodeGenInfo::decodeReturnAddress ( CodeGen::CodeGenFunction CGF,
llvm::Value *  Address 
) const
inlinevirtual

Performs the code-generation required to convert a return address as stored by the system into the actual address of the next instruction that will be executed.

Used by __builtin_extract_return_addr().

Definition at line 142 of file TargetInfo.h.

◆ doesReturnSlotInterfereWithArgs()

virtual bool clang::CodeGen::TargetCodeGenInfo::doesReturnSlotInterfereWithArgs ( ) const
inlinevirtual

doesReturnSlotInterfereWithArgs - Return true if the target uses an argument slot for an 'sret' type.

Definition at line 195 of file TargetInfo.h.

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

◆ emitCUDADeviceBuiltinSurfaceDeviceCopy()

virtual bool clang::CodeGen::TargetCodeGenInfo::emitCUDADeviceBuiltinSurfaceDeviceCopy ( CodeGenFunction CGF,
LValue  Dst,
LValue  Src 
) const
inlinevirtual

Emit the device-side copy of the builtin surface type.

Definition at line 402 of file TargetInfo.h.

◆ emitCUDADeviceBuiltinTextureDeviceCopy()

virtual bool clang::CodeGen::TargetCodeGenInfo::emitCUDADeviceBuiltinTextureDeviceCopy ( CodeGenFunction CGF,
LValue  Dst,
LValue  Src 
) const
inlinevirtual

Emit the device-side copy of the builtin texture type.

Definition at line 409 of file TargetInfo.h.

◆ emitTargetGlobals()

virtual void clang::CodeGen::TargetCodeGenInfo::emitTargetGlobals ( CodeGen::CodeGenModule CGM) const
inlinevirtual

Provides a convenient hook to handle extra target-specific globals.

Definition at line 86 of file TargetInfo.h.

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

◆ emitTargetMetadata()

virtual void clang::CodeGen::TargetCodeGenInfo::emitTargetMetadata ( CodeGen::CodeGenModule CGM,
const llvm::MapVector< GlobalDecl, StringRef > &  MangledDeclNames 
) const
inlinevirtual

emitTargetMetadata - Provides a convenient hook to handle extra target-specific metadata for the given globals.

Definition at line 81 of file TargetInfo.h.

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

◆ encodeReturnAddress()

virtual llvm::Value * clang::CodeGen::TargetCodeGenInfo::encodeReturnAddress ( CodeGen::CodeGenFunction CGF,
llvm::Value *  Address 
) const
inlinevirtual

Performs the code-generation required to convert the address of an instruction into a return address suitable for storage by the system in a return slot.

Used by __builtin_frob_return_addr().

Definition at line 152 of file TargetInfo.h.

◆ extendPointerWithSExt()

virtual bool clang::CodeGen::TargetCodeGenInfo::extendPointerWithSExt ( ) const
inlinevirtual

Controls whether __builtin_extend_pointer should sign-extend pointers to uint64_t or zero-extend them (the default).

Has no effect for targets:

  • that have 64-bit pointers, or
  • that cannot address through registers larger than pointers, or
  • that implicitly ignore/truncate the top bits when addressing through such registers.

Definition at line 118 of file TargetInfo.h.

◆ getABIInfo() [1/2]

template<typename T >
const T & clang::CodeGen::TargetCodeGenInfo::getABIInfo ( ) const
inlineprotected

◆ getABIInfo() [2/2]

const ABIInfo & clang::CodeGen::TargetCodeGenInfo::getABIInfo ( ) const
inline

getABIInfo() - Returns ABI info helper for the target.

Definition at line 66 of file TargetInfo.h.

◆ getAddrSpaceOfCxaAtexitPtrParam()

virtual LangAS clang::CodeGen::TargetCodeGenInfo::getAddrSpaceOfCxaAtexitPtrParam ( ) const
inlinevirtual

Get address space of pointer parameter for __cxa_atexit.

Definition at line 327 of file TargetInfo.h.

References clang::Default.

Referenced by EmitDeclDestroy().

◆ getARCRetainAutoreleasedReturnValueMarker()

virtual StringRef clang::CodeGen::TargetCodeGenInfo::getARCRetainAutoreleasedReturnValueMarker ( ) const
inlinevirtual

Retrieve the address of a function to call immediately before calling objc_retainAutoreleasedReturnValue.

The implementation of objc_autoreleaseReturnValue sniffs the instruction stream following its return address to decide whether it's a call to objc_retainAutoreleasedReturnValue. This can be prohibitively expensive, depending on the relocation model, and so on some targets it instead sniffs for a particular instruction sequence. This functions returns that instruction sequence in inline assembly, which will be empty if none is required.

Definition at line 207 of file TargetInfo.h.

Referenced by emitAutoreleasedReturnValueMarker().

◆ getASTAllocaAddressSpace()

virtual LangAS clang::CodeGen::TargetCodeGenInfo::getASTAllocaAddressSpace ( ) const
inlinevirtual

Get the AST address space for alloca.

Definition at line 298 of file TargetInfo.h.

References clang::Default.

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

◆ getCUDADeviceBuiltinSurfaceDeviceType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getCUDADeviceBuiltinSurfaceDeviceType ( ) const
inlinevirtual

Return the device-side type for the CUDA device builtin surface type.

Definition at line 385 of file TargetInfo.h.

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

◆ getCUDADeviceBuiltinTextureDeviceType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getCUDADeviceBuiltinTextureDeviceType ( ) const
inlinevirtual

Return the device-side type for the CUDA device builtin texture type.

Definition at line 390 of file TargetInfo.h.

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

◆ getDependentLibraryOption()

void TargetCodeGenInfo::getDependentLibraryOption ( llvm::StringRef  Lib,
llvm::SmallString< 24 > &  Opt 
) const
virtual

Gets the linker options necessary to link a dependent library on this platform.

Definition at line 97 of file TargetInfo.cpp.

Referenced by clang::CodeGen::CodeGenModule::AddDependentLib(), and addLinkOptionsPostorder().

◆ getDetectMismatchOption()

virtual void clang::CodeGen::TargetCodeGenInfo::getDetectMismatchOption ( llvm::StringRef  Name,
llvm::StringRef  Value,
llvm::SmallString< 32 > &  Opt 
) const
inlinevirtual

Gets the linker options necessary to detect object file mismatches on this platform.

Definition at line 275 of file TargetInfo.h.

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

◆ getDwarfEHStackPointer()

virtual int clang::CodeGen::TargetCodeGenInfo::getDwarfEHStackPointer ( CodeGen::CodeGenModule M) const
inlinevirtual

Determines the DWARF register number for the stack pointer, for exception-handling purposes.

Implements __builtin_dwarf_sp_column.

Returns -1 if the operation is unsupported by this target.

Definition at line 124 of file TargetInfo.h.

◆ getGlobalVarAddressSpace()

LangAS TargetCodeGenInfo::getGlobalVarAddressSpace ( CodeGenModule CGM,
const VarDecl D 
) const
virtual

Get target favored AST address space of a global variable for languages other than OpenCL and CUDA.

If D is nullptr, returns the default target favored address space for global variable.

Definition at line 125 of file TargetInfo.cpp.

References D, clang::Default, and clang::CodeGen::CodeGenModule::getLangOpts().

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

◆ getHLSLType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getHLSLType ( CodeGenModule CGM,
const Type T 
) const
inlinevirtual

Return an LLVM type that corresponds to a HLSL type.

Definition at line 422 of file TargetInfo.h.

Referenced by clang::CodeGen::CGHLSLRuntime::convertHLSLSpecificType().

◆ getLLVMSyncScopeID()

llvm::SyncScope::ID TargetCodeGenInfo::getLLVMSyncScopeID ( const LangOptions LangOpts,
SyncScope  Scope,
llvm::AtomicOrdering  Ordering,
llvm::LLVMContext &  Ctx 
) const
virtual

Get the syncscope used in LLVM IR.

Definition at line 155 of file TargetInfo.cpp.

Referenced by EmitAtomicOp().

◆ getNullPointer()

llvm::Constant * TargetCodeGenInfo::getNullPointer ( const CodeGen::CodeGenModule CGM,
llvm::PointerType *  T,
QualType  QT 
) const
virtual

Get target specific null pointer.

Parameters
Tis the LLVM type of the null pointer.
QTis the clang QualType of the null pointer.
Returns
ConstantPointerNull with the given type T. Each target can override it to return its own desired constant value.

Definition at line 120 of file TargetInfo.cpp.

References clang::T.

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

◆ getOpenCLKernelCallingConv()

unsigned TargetCodeGenInfo::getOpenCLKernelCallingConv ( ) const
virtual

Get LLVM calling convention for OpenCL kernel.

Definition at line 106 of file TargetInfo.cpp.

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

◆ getOpenCLType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getOpenCLType ( CodeGenModule CGM,
const Type T 
) const
inlinevirtual

◆ getSizeOfUnwindException()

unsigned TargetCodeGenInfo::getSizeOfUnwindException ( ) const
virtual

Determines the size of struct _Unwind_Exception on this platform, in 8-bit units.

The Itanium ABI defines this as: struct _Unwind_Exception { uint64 exception_class; _Unwind_Exception_Cleanup_Fn exception_cleanup; uint64 private_1; uint64 private_2; };

Definition at line 77 of file TargetInfo.cpp.

Referenced by InitCatchParam().

◆ getSwiftABIInfo()

const SwiftABIInfo & clang::CodeGen::TargetCodeGenInfo::getSwiftABIInfo ( ) const
inline

Returns Swift ABI info helper for the target.

Definition at line 69 of file TargetInfo.h.

References SwiftInfo.

Referenced by getSwiftABIInfo().

◆ getTargetOpenCLBlockHelper()

virtual TargetOpenCLBlockHelper * clang::CodeGen::TargetCodeGenInfo::getTargetOpenCLBlockHelper ( ) const
inlinevirtual

◆ getUBSanFunctionSignature()

virtual llvm::Constant * clang::CodeGen::TargetCodeGenInfo::getUBSanFunctionSignature ( CodeGen::CodeGenModule CGM) const
inlinevirtual

Return a constant used by UBSan as a signature to identify functions possessing type information, or 0 if the platform is unsupported.

This magic number is invalid instruction encoding in many targets.

Definition at line 219 of file TargetInfo.h.

References clang::CodeGen::CodeGenTypeCache::Int32Ty.

Referenced by getPrologueSignature().

◆ getWasmExternrefReferenceType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getWasmExternrefReferenceType ( ) const
inlinevirtual

Return the WebAssembly externref reference type.

Reimplemented in WebAssemblyTargetCodeGenInfo.

Definition at line 396 of file TargetInfo.h.

◆ getWasmFuncrefReferenceType()

virtual llvm::Type * clang::CodeGen::TargetCodeGenInfo::getWasmFuncrefReferenceType ( ) const
inlinevirtual

Return the WebAssembly funcref reference type.

Reimplemented in WebAssemblyTargetCodeGenInfo.

Definition at line 399 of file TargetInfo.h.

◆ initBranchProtectionFnAttributes()

void TargetCodeGenInfo::initBranchProtectionFnAttributes ( const TargetInfo::BranchProtectionInfo BPI,
llvm::AttrBuilder &  FuncAttrs 
)
static

◆ initDwarfEHRegSizeTable()

virtual bool clang::CodeGen::TargetCodeGenInfo::initDwarfEHRegSizeTable ( CodeGen::CodeGenFunction CGF,
llvm::Value *  Address 
) const
inlinevirtual

Initializes the given DWARF EH register-size table, a char*.

Implements __builtin_init_dwarf_reg_size_table.

Returns true if the operation is unsupported by this target.

Definition at line 132 of file TargetInfo.h.

◆ isNoProtoCallVariadic()

bool TargetCodeGenInfo::isNoProtoCallVariadic ( const CodeGen::CallArgList args,
const FunctionNoProtoType fnType 
) const
virtual

Determine whether a call to an unprototyped functions under the given calling convention should use the variadic convention or the non-variadic convention.

There's a good reason to make a platform's variadic calling convention be different from its non-variadic calling convention: the non-variadic arguments can be passed in registers (better for performance), and the variadic arguments can be passed on the stack (also better for performance). If this is done, however, unprototyped functions must use the non-variadic convention, because C99 states that a call through an unprototyped function type must succeed if the function was defined with a non-variadic prototype with compatible parameters. Therefore, splitting the conventions makes it impossible to call a variadic function through an unprototyped type. Since function prototypes came out in the late 1970s, this is probably an acceptable trade-off. Nonetheless, not all platforms are willing to make it, and in particularly x86-64 bends over backwards to make the conventions compatible.

The default is false. This is correct whenever:

  • the conventions are exactly the same, because it does not matter and the resulting IR will be somewhat prettier in certain cases; or
  • the conventions are substantively different in how they pass arguments, because in this case using the variadic convention will lead to C99 violations.

However, some platforms make the conventions identical except for passing additional out-of-band information to a variadic function: for example, x86-64 passes the number of SSE arguments in al. On these platforms, it is desirable to call unprototyped functions using the variadic convention so that unprototyped calls to varargs functions still succeed.

Relatedly, platforms which pass the fixed arguments to this: A foo(B, C, D); differently than they would pass them to this: A foo(B, C, D, ...); may need to adjust the debugger-support code in Sema to do the right thing when calling a function with no know signature.

Definition at line 87 of file TargetInfo.cpp.

Referenced by arrangeFreeFunctionLikeCall().

◆ isScalarizableAsmOperand()

virtual bool clang::CodeGen::TargetCodeGenInfo::isScalarizableAsmOperand ( CodeGen::CodeGenFunction CGF,
llvm::Type *  Ty 
) const
inlinevirtual

Target hook to decide whether an inline asm operand can be passed by value.

Definition at line 180 of file TargetInfo.h.

Referenced by EmitAsmStores().

◆ markARCOptimizedReturnCallsAsNoTail()

virtual bool clang::CodeGen::TargetCodeGenInfo::markARCOptimizedReturnCallsAsNoTail ( ) const
inlinevirtual

Determine whether a call to objc_retainAutoreleasedReturnValue or objc_unsafeClaimAutoreleasedReturnValue should be marked as 'notail'.

Definition at line 213 of file TargetInfo.h.

Referenced by emitOptimizedARCReturnCall().

◆ performAddrSpaceCast() [1/3]

Address clang::CodeGen::TargetCodeGenInfo::performAddrSpaceCast ( CodeGen::CodeGenFunction CGF,
Address  Addr,
LangAS  SrcAddr,
LangAS  DestAddr,
llvm::Type *  DestTy,
bool  IsNonNull = false 
) const

◆ performAddrSpaceCast() [2/3]

llvm::Value * TargetCodeGenInfo::performAddrSpaceCast ( CodeGen::CodeGenFunction CGF,
llvm::Value *  V,
LangAS  SrcAddr,
LangAS  DestAddr,
llvm::Type *  DestTy,
bool  IsNonNull = false 
) const
virtual

Perform address space cast of an expression of pointer type.

Parameters
Vis the LLVM value to be casted to another address space.
SrcAddris the language address space of V.
DestAddris the targeted language address space.
DestTyis the destination LLVM pointer type.
IsNonNullis the flag indicating V is known to be non null.

Definition at line 133 of file TargetInfo.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::C, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateAddrSpaceCast(), and performAddrSpaceCast().

◆ performAddrSpaceCast() [3/3]

llvm::Constant * TargetCodeGenInfo::performAddrSpaceCast ( CodeGenModule CGM,
llvm::Constant *  V,
LangAS  SrcAddr,
LangAS  DestAddr,
llvm::Type *  DestTy 
) const
virtual

Perform address space cast of a constant expression of pointer type.

Parameters
Vis the LLVM constant to be casted to another address space.
SrcAddris the language address space of V.
DestAddris the targeted language address space.
DestTyis the destination LLVM pointer type.

Definition at line 146 of file TargetInfo.cpp.

◆ qualifyWindowsLibrary()

std::string TargetCodeGenInfo::qualifyWindowsLibrary ( StringRef  Lib)
staticprotected

Definition at line 1605 of file X86.cpp.

◆ setBranchProtectionFnAttributes()

void TargetCodeGenInfo::setBranchProtectionFnAttributes ( const TargetInfo::BranchProtectionInfo BPI,
llvm::Function &  F 
)
static

◆ setCUDAKernelCallingConvention()

virtual void clang::CodeGen::TargetCodeGenInfo::setCUDAKernelCallingConvention ( const FunctionType *&  FT) const
inlinevirtual

Definition at line 382 of file TargetInfo.h.

Referenced by setCUDAKernelCallingConvention().

◆ setTargetAtomicMetadata()

virtual void clang::CodeGen::TargetCodeGenInfo::setTargetAtomicMetadata ( CodeGenFunction CGF,
llvm::AtomicRMWInst &  RMW 
) const
inlinevirtual

Allow the target to apply other metadata to an atomic instruction.

Definition at line 338 of file TargetInfo.h.

◆ setTargetAttributes()

virtual void clang::CodeGen::TargetCodeGenInfo::setTargetAttributes ( const Decl D,
llvm::GlobalValue *  GV,
CodeGen::CodeGenModule M 
) const
inlinevirtual

setTargetAttributes - Provides a convenient hook to handle extra target-specific attributes for the given global.

Reimplemented in WebAssemblyTargetCodeGenInfo.

Definition at line 76 of file TargetInfo.h.

Referenced by clang::CodeGen::CGOpenMPRuntime::emitTargetOutlinedFunctionHelper(), clang::CodeGen::CodeGenModule::GetOrCreateLLVMGlobal(), clang::CodeGen::CodeGenModule::getOrCreateStaticVarDecl(), and WebAssemblyTargetCodeGenInfo::setTargetAttributes().

◆ shouldEmitDWARFBitFieldSeparators()

virtual bool clang::CodeGen::TargetCodeGenInfo::shouldEmitDWARFBitFieldSeparators ( ) const
inlinevirtual
Returns
true if annonymous zero-sized bitfields should be emitted to correctly distinguish between struct types whose memory layout is the same, but whose layout may differ when used as argument passed by value

Definition at line 380 of file TargetInfo.h.

◆ shouldEmitStaticExternCAliases()

virtual bool clang::CodeGen::TargetCodeGenInfo::shouldEmitStaticExternCAliases ( ) const
inlinevirtual
Returns
true if the target supports alias from the unmangled name to the mangled name of functions declared within an extern "C" region and marked as 'used', and having internal linkage.

Definition at line 375 of file TargetInfo.h.

◆ testFPKind()

virtual llvm::Value * clang::CodeGen::TargetCodeGenInfo::testFPKind ( llvm::Value *  V,
unsigned  BuiltinID,
CGBuilderTy Builder,
CodeGenModule CGM 
) const
inlinevirtual

Performs a target specific test of a floating point value for things like IsNaN, Infinity, ... Nullptr is returned if no implementation exists.

Definition at line 161 of file TargetInfo.h.

References V.

Referenced by tryUseTestFPKind().

Member Data Documentation

◆ SwiftInfo

std::unique_ptr<SwiftABIInfo> clang::CodeGen::TargetCodeGenInfo::SwiftInfo
protected

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