clang  19.0.0git
Functions
X86.cpp File Reference
#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. More...
 
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 ABIArgInfo classifyOpenCL (QualType Ty, ASTContext &Context)
 
static bool doOpenCLClassification (CGFunctionInfo &FI, ASTContext &Context)
 
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. More...
 
static llvm::Type * getFPTypeAtOffset (llvm::Type *IRType, unsigned IROffset, const llvm::DataLayout &TD)
 getFPTypeAtOffset - Return a floating point type at the specified offset. More...
 
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. More...
 
static Address EmitX86_64VAArgFromMemory (CodeGenFunction &CGF, Address VAListAddr, QualType Ty)
 

Function Documentation

◆ addBaseAndFieldSizes()

static bool addBaseAndFieldSizes ( ASTContext Context,
const CXXRecordDecl RD,
uint64_t &  Size 
)
static

Definition at line 423 of file X86.cpp.

◆ addFieldSizes()

static bool addFieldSizes ( ASTContext Context,
const RecordDecl RD,
uint64_t &  Size 
)
static

Definition at line 403 of file X86.cpp.

◆ addX86InterruptAttrs()

static void addX86InterruptAttrs ( const FunctionDecl FD,
llvm::GlobalValue *  GV,
CodeGen::CodeGenModule CGM 
)
static

◆ BitsContainNoUserData()

static bool BitsContainNoUserData ( QualType  Ty,
unsigned  StartBit,
unsigned  EndBit,
ASTContext Context 
)
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 2344 of file X86.cpp.

◆ checkAVX512ParamFeature()

static bool checkAVX512ParamFeature ( DiagnosticsEngine Diag,
SourceLocation  CallLoc,
const llvm::StringMap< bool > &  CallerMap,
const llvm::StringMap< bool > &  CalleeMap,
QualType  Ty,
bool  IsArgument 
)
static

Definition at line 1568 of file X86.cpp.

References checkAVXParamFeature(), and Diag().

Referenced by checkAVXParam().

◆ checkAVXParam()

static bool checkAVXParam ( DiagnosticsEngine Diag,
ASTContext Ctx,
SourceLocation  CallLoc,
const llvm::StringMap< bool > &  CallerMap,
const llvm::StringMap< bool > &  CalleeMap,
QualType  Ty,
bool  IsArgument 
)
static

◆ checkAVXParamFeature()

static bool checkAVXParamFeature ( DiagnosticsEngine Diag,
SourceLocation  CallLoc,
const llvm::StringMap< bool > &  CallerMap,
const llvm::StringMap< bool > &  CalleeMap,
QualType  Ty,
StringRef  Feature,
bool  IsArgument 
)
static

Definition at line 1546 of file X86.cpp.

References Diag().

Referenced by checkAVX512ParamFeature(), and checkAVXParam().

◆ classifyOpenCL()

static ABIArgInfo classifyOpenCL ( QualType  Ty,
ASTContext Context 
)
static

Definition at line 910 of file X86.cpp.

◆ doOpenCLClassification()

static bool doOpenCLClassification ( CGFunctionInfo FI,
ASTContext Context 
)
static

Definition at line 927 of file X86.cpp.

◆ EmitX86_64VAArgFromMemory()

static Address EmitX86_64VAArgFromMemory ( CodeGenFunction CGF,
Address  VAListAddr,
QualType  Ty 
)
static

◆ getFPTypeAtOffset()

static llvm::Type* getFPTypeAtOffset ( llvm::Type *  IRType,
unsigned  IROffset,
const llvm::DataLayout &  TD 
)
static

getFPTypeAtOffset - Return a floating point type at the specified offset.

Definition at line 2422 of file X86.cpp.

◆ GetX86_64ByValArgumentPair()

static llvm::Type* GetX86_64ByValArgumentPair ( llvm::Type *  Lo,
llvm::Type *  Hi,
const llvm::DataLayout &  TD 
)
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 2580 of file X86.cpp.

◆ initFeatureMaps()

static void initFeatureMaps ( const ASTContext Ctx,
llvm::StringMap< bool > &  CallerMap,
const FunctionDecl Caller,
llvm::StringMap< bool > &  CalleeMap,
const FunctionDecl Callee 
)
static

Definition at line 1532 of file X86.cpp.

References clang::ASTContext::getFunctionFeatureMap().

◆ is32Or64BitBasicType()

static bool is32Or64BitBasicType ( QualType  Ty,
ASTContext Context 
)
static

Definition at line 387 of file X86.cpp.

◆ isArgInAlloca()

static bool isArgInAlloca ( const ABIArgInfo Info)
static

◆ rewriteInputConstraintReferences()

static void rewriteInputConstraintReferences ( unsigned  FirstIn,
unsigned  NumNewOuts,
std::string &  AsmString 
)
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

Definition at line 262 of file X86.cpp.