clang 20.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 410 of file X86.cpp.
References addBaseAndFieldSizes(), addFieldSizes(), and clang::CXXRecordDecl::bases().
Referenced by addBaseAndFieldSizes().
|
static |
Definition at line 390 of file X86.cpp.
References clang::RecordDecl::fields(), clang::ASTContext::getTypeSize(), and is32Or64BitBasicType().
Referenced by addBaseAndFieldSizes().
|
static |
Definition at line 1111 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 2296 of file X86.cpp.
References BitsContainNoUserData(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::Type::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), clang::RecordType::getDecl(), clang::ASTRecordLayout::getFieldOffset(), clang::ASTContext::getTypeSize(), and clang::ASTContext::toBits().
Referenced by BitsContainNoUserData().
|
static |
Definition at line 1520 of file X86.cpp.
References checkAVXParamFeature(), and Diag().
Referenced by checkAVXParam().
|
static |
Definition at line 1538 of file X86.cpp.
References checkAVX512ParamFeature(), checkAVXParamFeature(), Diag(), and clang::ASTContext::getTypeSize().
|
static |
Definition at line 1498 of file X86.cpp.
References Diag().
Referenced by checkAVX512ParamFeature(), and checkAVXParam().
|
static |
Definition at line 2978 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 2374 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 2532 of file X86.cpp.
References clang::Result.
|
static |
Definition at line 1484 of file X86.cpp.
References clang::ASTContext::getFunctionFeatureMap().
|
static |
Definition at line 374 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 996 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, and clang::CodeGen::ABIArgInfo::IndirectAliased.
|
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