clang 22.0.0git
|
#include "ABIInfoImpl.h"
#include "TargetInfo.h"
#include "clang/Basic/DiagnosticFrontend.h"
#include "llvm/ADT/SmallBitVector.h"
Go to the source code of this file.
Functions | |
static void | rewriteInputConstraintReferences (unsigned FirstIn, unsigned NumNewOuts, std::string &AsmString) |
Rewrite input constraint references after adding some output constraints. | |
static bool | is32Or64BitBasicType (QualType Ty, ASTContext &Context) |
static bool | addFieldSizes (ASTContext &Context, const RecordDecl *RD, uint64_t &Size) |
static bool | addBaseAndFieldSizes (ASTContext &Context, const CXXRecordDecl *RD, uint64_t &Size) |
static bool | isArgInAlloca (const ABIArgInfo &Info) |
static void | addX86InterruptAttrs (const FunctionDecl *FD, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) |
static void | initFeatureMaps (const ASTContext &Ctx, llvm::StringMap< bool > &CallerMap, const FunctionDecl *Caller, llvm::StringMap< bool > &CalleeMap, const FunctionDecl *Callee) |
static bool | checkAVXParamFeature (DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap< bool > &CallerMap, const llvm::StringMap< bool > &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) |
static bool | checkAVX512ParamFeature (DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap< bool > &CallerMap, const llvm::StringMap< bool > &CalleeMap, QualType Ty, bool IsArgument) |
static bool | checkAVXParam (DiagnosticsEngine &Diag, ASTContext &Ctx, SourceLocation CallLoc, const llvm::StringMap< bool > &CallerMap, const llvm::StringMap< bool > &CalleeMap, QualType Ty, bool IsArgument) |
static bool | BitsContainNoUserData (QualType Ty, unsigned StartBit, unsigned EndBit, ASTContext &Context) |
BitsContainNoUserData - Return true if the specified [start,end) bit range is known to either be off the end of the specified type or being in alignment padding. | |
static llvm::Type * | getFPTypeAtOffset (llvm::Type *IRType, unsigned IROffset, const llvm::DataLayout &TD) |
getFPTypeAtOffset - Return a floating point type at the specified offset. | |
static llvm::Type * | GetX86_64ByValArgumentPair (llvm::Type *Lo, llvm::Type *Hi, const llvm::DataLayout &TD) |
GetX86_64ByValArgumentPair - Given a high and low type that can ideally be used as elements of a two register pair to pass or return, return a first class aggregate to represent them. | |
static Address | EmitX86_64VAArgFromMemory (CodeGenFunction &CGF, Address VAListAddr, QualType Ty) |
|
static |
Definition at line 411 of file X86.cpp.
References addBaseAndFieldSizes(), addFieldSizes(), and clang::CXXRecordDecl::bases().
Referenced by addBaseAndFieldSizes().
|
static |
Definition at line 391 of file X86.cpp.
References clang::RecordDecl::fields(), clang::ASTContext::getTypeSize(), and is32Or64BitBasicType().
Referenced by addBaseAndFieldSizes().
|
static |
Definition at line 1119 of file X86.cpp.
References clang::CodeGen::CodeGenTypes::ConvertType(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), and clang::Decl::hasAttr().
|
static |
BitsContainNoUserData - Return true if the specified [start,end) bit range is known to either be off the end of the specified type or being in alignment padding.
The user type specified is known to be at most 128 bits in size, and have passed through X86_64ABIInfo::classify with a successful classification that put one of the two halves in the INTEGER class.
It is conservatively correct to return false.
Definition at line 2319 of file X86.cpp.
References BitsContainNoUserData(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::ASTContext::getAsConstantArrayType(), clang::Type::getAsRecordDecl(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), clang::ASTRecordLayout::getFieldOffset(), clang::ASTContext::getTypeSize(), and clang::ASTContext::toBits().
Referenced by BitsContainNoUserData().
|
static |
Definition at line 1536 of file X86.cpp.
References checkAVXParamFeature(), and Diag().
Referenced by checkAVXParam().
|
static |
Definition at line 1554 of file X86.cpp.
References checkAVX512ParamFeature(), checkAVXParamFeature(), Diag(), and clang::ASTContext::getTypeSize().
|
static |
Definition at line 1514 of file X86.cpp.
References Diag(), and Feature.
Referenced by checkAVX512ParamFeature(), and checkAVXParam().
|
static |
Definition at line 3015 of file X86.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateGEP(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::emitRoundPointerUpToAlignment(), clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenFunction::getContext(), clang::ASTContext::getTypeAlignInChars(), clang::ASTContext::getTypeSize(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8Ty.
|
static |
getFPTypeAtOffset - Return a floating point type at the specified offset.
Definition at line 2395 of file X86.cpp.
References getFPTypeAtOffset().
Referenced by getFPTypeAtOffset().
|
static |
GetX86_64ByValArgumentPair - Given a high and low type that can ideally be used as elements of a two register pair to pass or return, return a first class aggregate to represent them.
For example, if the low part of a by-value argument should be passed as i32* and the high part as float, return {i32*, float}.
Definition at line 2559 of file X86.cpp.
References clang::Result.
|
static |
Definition at line 1500 of file X86.cpp.
References clang::ASTContext::getFunctionFeatureMap().
|
static |
Definition at line 375 of file X86.cpp.
References clang::Type::getAs(), clang::ASTContext::getTypeSize(), clang::Type::hasPointerRepresentation(), clang::Type::isBlockPointerType(), and clang::Type::isEnumeralType().
Referenced by addFieldSizes().
|
static |
Definition at line 1003 of file X86.cpp.
References clang::CodeGen::ABIArgInfo::CoerceAndExpand, clang::CodeGen::ABIArgInfo::Direct, clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CodeGen::ABIArgInfo::getInReg(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::ABIArgInfo::IndirectAliased, and clang::CodeGen::ABIArgInfo::TargetSpecific.
|
static |
Rewrite input constraint references after adding some output constraints.
In the case where there is one output and one input and we add one output, we need to replace all operand references greater than or equal to 1: mov $0, $1 mov eax, $1 The result will be: mov $0, $2 mov eax, $2