clang API Documentation
#include <TargetInfo.h>
Public Member Functions | |
TargetCodeGenInfo (ABIInfo *info=0) | |
virtual | ~TargetCodeGenInfo () |
const ABIInfo & | getABIInfo () const |
getABIInfo() - Returns ABI info helper for the target. | |
virtual void | SetTargetAttributes (const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const |
virtual void | emitTargetMD (const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const |
virtual unsigned | getSizeOfUnwindException () const |
virtual bool | extendPointerWithSExt () const |
virtual int | getDwarfEHStackPointer (CodeGen::CodeGenModule &M) const |
virtual bool | initDwarfEHRegSizeTable (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const |
virtual llvm::Value * | decodeReturnAddress (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const |
virtual llvm::Value * | encodeReturnAddress (CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const |
virtual llvm::Type * | adjustInlineAsmType (CodeGen::CodeGenFunction &CGF, StringRef Constraint, llvm::Type *Ty) const |
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 |
virtual StringRef | getARCRetainAutoreleasedReturnValueMarker () const |
virtual llvm::Constant * | getUBSanFunctionSignature (CodeGen::CodeGenModule &CGM) const |
virtual bool | isNoProtoCallVariadic (const CodeGen::CallArgList &args, const FunctionNoProtoType *fnType) const |
virtual void | getDependentLibraryOption (llvm::StringRef Lib, llvm::SmallString< 24 > &Opt) const |
virtual void | getDetectMismatchOption (llvm::StringRef Name, llvm::StringRef Value, llvm::SmallString< 32 > &Opt) const |
virtual unsigned | getOpenMPSimdDefaultAlignment (QualType Type) const |
TargetCodeGenInfo - This class organizes various target-specific codegeneration issues, like target-specific attributes, builtins and so on.
Definition at line 45 of file lib/CodeGen/TargetInfo.h.
clang::TargetCodeGenInfo::TargetCodeGenInfo | ( | ABIInfo * | info = 0 | ) | [inline] |
Definition at line 50 of file lib/CodeGen/TargetInfo.h.
TargetCodeGenInfo::~TargetCodeGenInfo | ( | ) | [virtual] |
Definition at line 142 of file CodeGen/TargetInfo.cpp.
virtual void clang::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 [inline, virtual] |
Adds constraints and types for result registers.
Definition at line 134 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenFunction::EmitAsmStmt().
virtual llvm::Type* clang::TargetCodeGenInfo::adjustInlineAsmType | ( | CodeGen::CodeGenFunction & | CGF, |
StringRef | Constraint, | ||
llvm::Type * | Ty | ||
) | const [inline, virtual] |
Corrects the low-level LLVM type for a given constraint and "usual" type.
Definition at line 127 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenFunction::EmitAsmStmt().
virtual llvm::Value* clang::TargetCodeGenInfo::decodeReturnAddress | ( | CodeGen::CodeGenFunction & | CGF, |
llvm::Value * | Address | ||
) | const [inline, virtual] |
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 107 of file lib/CodeGen/TargetInfo.h.
virtual bool clang::TargetCodeGenInfo::doesReturnSlotInterfereWithArgs | ( | ) | const [inline, virtual] |
doesReturnSlotInterfereWithArgs - Return true if the target uses an argument slot for an 'sret' type.
Definition at line 143 of file lib/CodeGen/TargetInfo.h.
virtual void clang::TargetCodeGenInfo::emitTargetMD | ( | const Decl * | D, |
llvm::GlobalValue * | GV, | ||
CodeGen::CodeGenModule & | M | ||
) | const [inline, virtual] |
EmitTargetMD - Provides a convenient hook to handle extra target-specific metadata for the given global.
Definition at line 63 of file lib/CodeGen/TargetInfo.h.
virtual llvm::Value* clang::TargetCodeGenInfo::encodeReturnAddress | ( | CodeGen::CodeGenFunction & | CGF, |
llvm::Value * | Address | ||
) | const [inline, virtual] |
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 117 of file lib/CodeGen/TargetInfo.h.
virtual bool clang::TargetCodeGenInfo::extendPointerWithSExt | ( | ) | const [inline, virtual] |
Controls whether __builtin_extend_pointer should sign-extend pointers to uint64_t or zero-extend them (the default). Has no effect for targets:
Definition at line 83 of file lib/CodeGen/TargetInfo.h.
const ABIInfo& clang::TargetCodeGenInfo::getABIInfo | ( | ) | const [inline] |
getABIInfo() - Returns ABI info helper for the target.
Definition at line 54 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenModule::CodeGenModule().
virtual StringRef clang::TargetCodeGenInfo::getARCRetainAutoreleasedReturnValueMarker | ( | ) | const [inline, virtual] |
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 155 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue().
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 166 of file CodeGen/TargetInfo.cpp.
Referenced by clang::CodeGen::CodeGenModule::AddDependentLib(), and addLinkOptionsPostorder().
virtual void clang::TargetCodeGenInfo::getDetectMismatchOption | ( | llvm::StringRef | Name, |
llvm::StringRef | Value, | ||
llvm::SmallString< 32 > & | Opt | ||
) | const [inline, virtual] |
Gets the linker options necessary to detect object file mismatches on this platform.
Definition at line 218 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenModule::AddDetectMismatch().
virtual int clang::TargetCodeGenInfo::getDwarfEHStackPointer | ( | CodeGen::CodeGenModule & | M | ) | const [inline, virtual] |
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 89 of file lib/CodeGen/TargetInfo.h.
virtual unsigned clang::TargetCodeGenInfo::getOpenMPSimdDefaultAlignment | ( | QualType | Type | ) | const [inline, virtual] |
Gets the target-specific default alignment used when an 'aligned' clause is used with a 'simd' OpenMP directive without specifying a specific alignment.
Definition at line 225 of file lib/CodeGen/TargetInfo.h.
Referenced by EmitOMPAlignedClause().
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 146 of file CodeGen/TargetInfo.cpp.
Referenced by InitCatchParam().
virtual llvm::Constant* clang::TargetCodeGenInfo::getUBSanFunctionSignature | ( | CodeGen::CodeGenModule & | CGM | ) | const [inline, virtual] |
Return a constant used by UBSan as a signature to identify functions possessing type information, or 0 if the platform is unsupported.
Definition at line 162 of file lib/CodeGen/TargetInfo.h.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::StartFunction().
virtual bool clang::TargetCodeGenInfo::initDwarfEHRegSizeTable | ( | CodeGen::CodeGenFunction & | CGF, |
llvm::Value * | Address | ||
) | const [inline, virtual] |
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 97 of file lib/CodeGen/TargetInfo.h.
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:
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 156 of file CodeGen/TargetInfo.cpp.
Referenced by arrangeFreeFunctionLikeCall().
virtual void clang::TargetCodeGenInfo::SetTargetAttributes | ( | const Decl * | D, |
llvm::GlobalValue * | GV, | ||
CodeGen::CodeGenModule & | M | ||
) | const [inline, virtual] |
SetTargetAttributes - Provides a convenient hook to handle extra target-specific attributes for the given global.
Definition at line 58 of file lib/CodeGen/TargetInfo.h.