clang  14.0.0git
Public Member Functions | List of all members
clang::CodeGen::CodeGenTypes Class Reference

This class organizes the cross-module state that is used while lowering AST types to LLVM types. More...

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

Public Member Functions

 CodeGenTypes (CodeGenModule &cgm)
 
 ~CodeGenTypes ()
 
const llvm::DataLayout & getDataLayout () const
 
ASTContextgetContext () const
 
const ABIInfogetABIInfo () const
 
const TargetInfogetTarget () const
 
CGCXXABIgetCXXABI () const
 
llvm::LLVMContext & getLLVMContext ()
 
const CodeGenOptionsgetCodeGenOpts () const
 
unsigned ClangCallConvToLLVMCallConv (CallingConv CC)
 Convert clang calling convention to LLVM callilng convention. More...
 
CanQualType DeriveThisType (const CXXRecordDecl *RD, const CXXMethodDecl *MD)
 Derives the 'this' type for codegen purposes, i.e. More...
 
llvm::Type * ConvertType (QualType T)
 ConvertType - Convert type T into a llvm::Type. More...
 
llvm::Type * ConvertTypeForMem (QualType T, bool ForBitField=false)
 ConvertTypeForMem - Convert type T into a llvm::Type. More...
 
llvm::FunctionType * GetFunctionType (const CGFunctionInfo &Info)
 GetFunctionType - Get the LLVM function type for. More...
 
llvm::FunctionType * GetFunctionType (GlobalDecl GD)
 
bool isFuncTypeConvertible (const FunctionType *FT)
 isFuncTypeConvertible - Utility to check whether a function type can be converted to an LLVM type (i.e. More...
 
bool isFuncParamTypeConvertible (QualType Ty)
 isFuncParamTypeConvertible - Return true if the specified type in a function parameter or result position can be converted to an IR type at this point. More...
 
bool inheritingCtorHasParams (const InheritedConstructor &Inherited, CXXCtorType Type)
 Determine if a C++ inheriting constructor should have parameters matching those of its inherited constructor. More...
 
llvm::Type * GetFunctionTypeForVTable (GlobalDecl GD)
 GetFunctionTypeForVTable - Get the LLVM function type for use in a vtable, given a CXXMethodDecl. More...
 
const CGRecordLayoutgetCGRecordLayout (const RecordDecl *)
 getCGRecordLayout - Return record layout info for the given record decl. More...
 
void UpdateCompletedType (const TagDecl *TD)
 UpdateCompletedType - When we find the full definition for a TagDecl, replace the 'opaque' type we previously made for it if applicable. More...
 
void RefreshTypeCacheForClass (const CXXRecordDecl *RD)
 Remove stale types from the type cache when an inheritance model gets assigned to a class. More...
 
const CGFunctionInfoarrangeGlobalDeclaration (GlobalDecl GD)
 
const CGFunctionInfoarrangeCall (const CGFunctionInfo &declFI, const CallArgList &args)
 Given a function info for a declaration, return the function info for a call with the given arguments. More...
 
const CGFunctionInfoarrangeFunctionDeclaration (const FunctionDecl *FD)
 Free functions are functions that are compatible with an ordinary C function pointer type. More...
 
const CGFunctionInfoarrangeFreeFunctionCall (const CallArgList &Args, const FunctionType *Ty, bool ChainCall)
 Figure out the rules for calling a function with the given formal type using the given arguments. More...
 
const CGFunctionInfoarrangeFreeFunctionType (CanQual< FunctionProtoType > Ty)
 Arrange the argument and result information for a value of the given freestanding function type. More...
 
const CGFunctionInfoarrangeFreeFunctionType (CanQual< FunctionNoProtoType > Ty)
 Arrange the argument and result information for a value of the given unprototyped freestanding function type. More...
 
const CGFunctionInfoarrangeNullaryFunction ()
 A nullary function is a freestanding function of type 'void ()'. More...
 
const CGFunctionInfoarrangeBuiltinFunctionDeclaration (QualType resultType, const FunctionArgList &args)
 A builtin function is a freestanding function using the default C conventions. More...
 
const CGFunctionInfoarrangeBuiltinFunctionDeclaration (CanQualType resultType, ArrayRef< CanQualType > argTypes)
 
const CGFunctionInfoarrangeBuiltinFunctionCall (QualType resultType, const CallArgList &args)
 
const CGFunctionInfoarrangeObjCMethodDeclaration (const ObjCMethodDecl *MD)
 Objective-C methods are C functions with some implicit parameters. More...
 
const CGFunctionInfoarrangeObjCMessageSendSignature (const ObjCMethodDecl *MD, QualType receiverType)
 Arrange the argument and result information for the function type through which to perform a send to the given Objective-C method, using the given receiver type. More...
 
const CGFunctionInfoarrangeUnprototypedObjCMessageSend (QualType returnType, const CallArgList &args)
 
const CGFunctionInfoarrangeBlockFunctionDeclaration (const FunctionProtoType *type, const FunctionArgList &args)
 Block invocation functions are C functions with an implicit parameter. More...
 
const CGFunctionInfoarrangeBlockFunctionCall (const CallArgList &args, const FunctionType *type)
 A block function is essentially a free function with an extra implicit argument. More...
 
const CGFunctionInfoarrangeCXXMethodDeclaration (const CXXMethodDecl *MD)
 C++ methods have some special rules and also have implicit parameters. More...
 
const CGFunctionInfoarrangeCXXStructorDeclaration (GlobalDecl GD)
 
const CGFunctionInfoarrangeCXXConstructorCall (const CallArgList &Args, const CXXConstructorDecl *D, CXXCtorType CtorKind, unsigned ExtraPrefixArgs, unsigned ExtraSuffixArgs, bool PassProtoArgs=true)
 Arrange a call to a C++ method, passing the given arguments. More...
 
const CGFunctionInfoarrangeCXXMethodCall (const CallArgList &args, const FunctionProtoType *type, RequiredArgs required, unsigned numPrefixArgs)
 Arrange a call to a C++ method, passing the given arguments. More...
 
const CGFunctionInfoarrangeUnprototypedMustTailThunk (const CXXMethodDecl *MD)
 Arrange a thunk that takes 'this' as the first parameter followed by varargs. More...
 
const CGFunctionInfoarrangeMSCtorClosure (const CXXConstructorDecl *CD, CXXCtorType CT)
 
const CGFunctionInfoarrangeCXXMethodType (const CXXRecordDecl *RD, const FunctionProtoType *FTP, const CXXMethodDecl *MD)
 Arrange the argument and result information for a call to an unknown C++ non-static member function of the given abstract type. More...
 
const CGFunctionInfoarrangeLLVMFunctionInfo (CanQualType returnType, bool instanceMethod, bool chainCall, ArrayRef< CanQualType > argTypes, FunctionType::ExtInfo info, ArrayRef< FunctionProtoType::ExtParameterInfo > paramInfos, RequiredArgs args)
 "Arrange" the LLVM information for a call or type with the given signature. More...
 
std::unique_ptr< CGRecordLayoutComputeRecordLayout (const RecordDecl *D, llvm::StructType *Ty)
 Compute a new LLVM record layout object for the given record. More...
 
void addRecordTypeName (const RecordDecl *RD, llvm::StructType *Ty, StringRef suffix)
 addRecordTypeName - Compute a name from the given record decl with an optional suffix and name the given LLVM type using it. More...
 
llvm::StructType * ConvertRecordDeclType (const RecordDecl *TD)
 ConvertRecordDeclType - Lay out a tagged decl type like struct or union. More...
 
void getExpandedTypes (QualType Ty, SmallVectorImpl< llvm::Type * >::iterator &TI)
 getExpandedTypes - Expand the type More...
 
bool isZeroInitializable (QualType T)
 IsZeroInitializable - Return whether a type can be zero-initialized (in the C++ sense) with an LLVM zeroinitializer. More...
 
bool isPointerZeroInitializable (QualType T)
 Check if the pointer type can be zero-initialized (in the C++ sense) with an LLVM zeroinitializer. More...
 
bool isZeroInitializable (const RecordDecl *RD)
 IsZeroInitializable - Return whether a record type can be zero-initialized (in the C++ sense) with an LLVM zeroinitializer. More...
 
bool isRecordLayoutComplete (const Type *Ty) const
 isRecordLayoutComplete - Return true if the specified type is already completely laid out. More...
 
bool noRecordsBeingLaidOut () const
 
bool isRecordBeingLaidOut (const Type *Ty) const
 

Detailed Description

This class organizes the cross-module state that is used while lowering AST types to LLVM types.

Definition at line 59 of file CodeGenTypes.h.

Constructor & Destructor Documentation

◆ CodeGenTypes()

CodeGenTypes::CodeGenTypes ( CodeGenModule cgm)

Definition at line 31 of file CodeGenTypes.cpp.

References clang::Target.

◆ ~CodeGenTypes()

CodeGenTypes::~CodeGenTypes ( )

Definition at line 38 of file CodeGenTypes.cpp.

Member Function Documentation

◆ addRecordTypeName()

void CodeGenTypes::addRecordTypeName ( const RecordDecl RD,
llvm::StructType *  Ty,
StringRef  suffix 
)

◆ arrangeBlockFunctionCall()

const CGFunctionInfo & CodeGenTypes::arrangeBlockFunctionCall ( const CallArgList args,
const FunctionType type 
)

A block function is essentially a free function with an extra implicit argument.

Definition at line 625 of file CGCall.cpp.

References arrangeFreeFunctionLikeCall().

Referenced by clang::CodeGen::CodeGenFunction::EmitBlockCallExpr().

◆ arrangeBlockFunctionDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeBlockFunctionDeclaration ( const FunctionProtoType type,
const FunctionArgList args 
)

◆ arrangeBuiltinFunctionCall()

const CGFunctionInfo & CodeGenTypes::arrangeBuiltinFunctionCall ( QualType  resultType,
const CallArgList args 
)

◆ arrangeBuiltinFunctionDeclaration() [1/2]

const CGFunctionInfo & CodeGenTypes::arrangeBuiltinFunctionDeclaration ( CanQualType  resultType,
ArrayRef< CanQualType argTypes 
)

Definition at line 667 of file CGCall.cpp.

References clang::CodeGen::RequiredArgs::All, and arrangeLLVMFunctionInfo().

◆ arrangeBuiltinFunctionDeclaration() [2/2]

const CGFunctionInfo & CodeGenTypes::arrangeBuiltinFunctionDeclaration ( QualType  resultType,
const FunctionArgList args 
)

◆ arrangeCall()

const CGFunctionInfo & CodeGenTypes::arrangeCall ( const CGFunctionInfo declFI,
const CallArgList args 
)

◆ arrangeCXXConstructorCall()

const CGFunctionInfo & CodeGenTypes::arrangeCXXConstructorCall ( const CallArgList args,
const CXXConstructorDecl D,
CXXCtorType  CtorKind,
unsigned  ExtraPrefixArgs,
unsigned  ExtraSuffixArgs,
bool  PassProtoArgs = true 
)

Arrange a call to a C++ method, passing the given arguments.

ExtraPrefixArgs is the number of ABI-specific args passed after the this parameter. ExtraSuffixArgs is the number of ABI-specific args passed at the end of args. PassProtoArgs indicates whether args has args for the parameters in the given CXXConstructorDecl.

Definition at line 394 of file CGCall.cpp.

References addExtParameterInfosForCall(), clang::CodeGen::RequiredArgs::All, arrangeLLVMFunctionInfo(), clang::CodeGen::RequiredArgs::forPrototypePlus(), clang::ASTContext::getCanonicalParamType(), clang::CodeGen::CodeGenModule::getContext(), GetFormalType(), clang::CanQual< T >::getTypePtr(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.

Referenced by canEmitDelegateCallArgs(), and clang::CodeGen::CodeGenFunction::EmitCXXConstructorCall().

◆ arrangeCXXMethodCall()

const CGFunctionInfo & CodeGenTypes::arrangeCXXMethodCall ( const CallArgList args,
const FunctionProtoType proto,
RequiredArgs  required,
unsigned  numPrefixArgs 
)

◆ arrangeCXXMethodDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeCXXMethodDeclaration ( const CXXMethodDecl MD)

C++ methods have some special rules and also have implicit parameters.

Arrange the argument and result information for a declaration or definition of the given C++ non-static member function.

The member function must be an ordinary function, i.e. not a constructor or destructor.

Definition at line 283 of file CGCall.cpp.

References arrangeCXXMethodType(), arrangeFreeFunctionType(), clang::CanQual< T >::getAs(), GetFormalType(), clang::CodeGen::CGCXXABI::getThisArgumentTypeForMethod(), clang::CXXMethodDecl::isInstance(), and setCUDAKernelCallingConvention().

Referenced by arrangeFunctionDeclaration(), clang::CodeGen::CodeGenFunction::EmitForwardingCallToLambda(), and clang::CodeGen::CodeGenModule::GetAddrOfGlobal().

◆ arrangeCXXMethodType()

const CGFunctionInfo & CodeGenTypes::arrangeCXXMethodType ( const CXXRecordDecl RD,
const FunctionProtoType FTP,
const CXXMethodDecl MD 
)

Arrange the argument and result information for a call to an unknown C++ non-static member function of the given abstract type.

(A null RD means we don't have any meaningful "this" argument type, so fall back to a generic pointer type). The member function must be an ordinary function, i.e. not a constructor or destructor.

Definition at line 255 of file CGCall.cpp.

References arrangeLLVMFunctionInfo(), DeriveThisType(), clang::CanQual< T >::getAs(), and clang::Type::getCanonicalTypeUnqualified().

Referenced by arrangeCXXMethodDeclaration(), clang::CodeGen::arrangeCXXMethodType(), and clang::CodeGen::CGCXXABI::EmitLoadOfMemberFunctionPointer().

◆ arrangeCXXStructorDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeCXXStructorDeclaration ( GlobalDecl  GD)

◆ arrangeFreeFunctionCall()

const CGFunctionInfo & CodeGenTypes::arrangeFreeFunctionCall ( const CallArgList args,
const FunctionType fnType,
bool  chainCall 
)

Figure out the rules for calling a function with the given formal type using the given arguments.

The arguments are necessary because the function might be unprototyped, in which case it's target-dependent in crazy ways.

Definition at line 615 of file CGCall.cpp.

References arrangeFreeFunctionLikeCall().

Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and EmitNewDeleteCall().

◆ arrangeFreeFunctionType() [1/2]

const CGFunctionInfo & CodeGenTypes::arrangeFreeFunctionType ( CanQual< FunctionNoProtoType Ty)

Arrange the argument and result information for a value of the given unprototyped freestanding function type.

Definition at line 107 of file CGCall.cpp.

References arrangeLLVMFunctionInfo(), and clang::CanQual< T >::getUnqualifiedType().

◆ arrangeFreeFunctionType() [2/2]

const CGFunctionInfo & CodeGenTypes::arrangeFreeFunctionType ( CanQual< FunctionProtoType Ty)

Arrange the argument and result information for a value of the given freestanding function type.

Definition at line 197 of file CGCall.cpp.

References arrangeLLVMFunctionInfo().

Referenced by arrangeCXXMethodDeclaration(), clang::CodeGen::arrangeFreeFunctionType(), and arrangeFunctionDeclaration().

◆ arrangeFunctionDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeFunctionDeclaration ( const FunctionDecl FD)

Free functions are functions that are compatible with an ordinary C function pointer type.

Arrange the argument and result information for the declaration or definition of the given function.

Definition at line 438 of file CGCall.cpp.

References clang::CodeGen::RequiredArgs::All, arrangeCXXMethodDeclaration(), arrangeFreeFunctionType(), arrangeLLVMFunctionInfo(), clang::CanQual< T >::castAs(), clang::CanQual< T >::getAs(), clang::Type::getCanonicalTypeUnqualified(), clang::ValueDecl::getType(), and setCUDAKernelCallingConvention().

Referenced by arrangeGlobalDeclaration(), and clang::CodeGen::CodeGenFunction::EmitAutoVarCleanups().

◆ arrangeGlobalDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeGlobalDeclaration ( GlobalDecl  GD)

◆ arrangeLLVMFunctionInfo()

const CGFunctionInfo & CodeGenTypes::arrangeLLVMFunctionInfo ( CanQualType  resultType,
bool  instanceMethod,
bool  chainCall,
ArrayRef< CanQualType argTypes,
FunctionType::ExtInfo  info,
ArrayRef< FunctionProtoType::ExtParameterInfo paramInfos,
RequiredArgs  required 
)

"Arrange" the LLVM information for a call or type with the given signature.

Arrange the argument and result information for an abstract value of a given function type.

This is largely an internal method; other clients should use one of the above routines, which ultimately defer to this.

Parameters
argTypes- must all actually be canonical as params

This is the method which all of the above functions ultimately defer to.

Definition at line 741 of file CGCall.cpp.

References clang::CodeGen::CGFunctionInfo::arguments(), clang::CodeGen::ABIArgInfo::canHaveCoerceToType(), clang::CC_Swift, clang::CC_SwiftAsync, ClangCallConvToLLVMCallConv(), clang::CodeGen::swiftcall::computeABIInfo(), clang::CodeGen::ABIInfo::computeInfo(), clang::CodeGen::computeSPIRKernelABIInfo(), ConvertType(), clang::CodeGen::CGFunctionInfo::create(), getABIInfo(), clang::FunctionType::ExtInfo::getCC(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::CanQual< T >::isCanonicalAsParam(), clang::CodeGen::CGFunctionInfo::Profile(), and clang::CodeGen::ABIArgInfo::setCoerceToType().

Referenced by arrangeBlockFunctionDeclaration(), arrangeBuiltinFunctionCall(), arrangeBuiltinFunctionDeclaration(), arrangeCall(), arrangeCXXConstructorCall(), arrangeCXXMethodCall(), arrangeCXXStructorDeclaration(), clang::CodeGen::arrangeFreeFunctionCall(), arrangeFreeFunctionLikeCall(), arrangeFreeFunctionType(), arrangeFunctionDeclaration(), arrangeLLVMFunctionInfo(), arrangeMSCtorClosure(), arrangeNullaryFunction(), arrangeObjCMessageSendSignature(), arrangeUnprototypedMustTailThunk(), arrangeUnprototypedObjCMessageSend(), and clang::CodeGen::CodeGenFunction::createTLSAtExitStub().

◆ arrangeMSCtorClosure()

const CGFunctionInfo & CodeGenTypes::arrangeMSCtorClosure ( const CXXConstructorDecl CD,
CXXCtorType  CT 
)

◆ arrangeNullaryFunction()

const CGFunctionInfo & CodeGenTypes::arrangeNullaryFunction ( )

A nullary function is a freestanding function of type 'void ()'.

This method works for both calls and declarations.

Definition at line 699 of file CGCall.cpp.

References clang::CodeGen::RequiredArgs::All, arrangeLLVMFunctionInfo(), and getContext().

Referenced by clang::CodeGen::CodeGenFunction::createAtExitStub(), createGlobalInitOrCleanupFn(), clang::CodeGen::CGOpenMPRuntime::emitDeclareTargetVarDefinition(), and clang::CodeGen::CGOpenMPRuntime::emitRequiresDirectiveRegFun().

◆ arrangeObjCMessageSendSignature()

const CGFunctionInfo & CodeGenTypes::arrangeObjCMessageSendSignature ( const ObjCMethodDecl MD,
QualType  receiverType 
)

Arrange the argument and result information for the function type through which to perform a send to the given Objective-C method, using the given receiver type.

The receiver type is not always the 'self' type of the method or even an Objective-C pointer type. This is not the right method for actually performing such a message send, due to the possibility of optional arguments.

Definition at line 475 of file CGCall.cpp.

References clang::CodeGen::RequiredArgs::All, arrangeLLVMFunctionInfo(), getCallingConventionForDecl(), clang::ASTContext::getCanonicalParamType(), getContext(), clang::ASTContext::getObjCSelType(), GetReturnType(), clang::ObjCMethodDecl::getReturnType(), clang::ASTContext::getTargetInfo(), clang::TargetInfo::getTriple(), clang::Decl::hasAttr(), clang::ObjCMethodDecl::isVariadic(), clang::ObjCMethodDecl::parameters(), clang::FunctionType::ExtInfo::withCallingConv(), clang::FunctionType::ExtParameterInfo::withIsNoEscape(), and clang::FunctionType::ExtInfo::withProducesResult().

Referenced by clang::CodeGen::arrangeObjCMessageSendSignature(), arrangeObjCMethodDeclaration(), and clang::CodeGen::CGObjCRuntime::getMessageSendInfo().

◆ arrangeObjCMethodDeclaration()

const CGFunctionInfo & CodeGenTypes::arrangeObjCMethodDeclaration ( const ObjCMethodDecl MD)

Objective-C methods are C functions with some implicit parameters.

Arrange the argument and result information for the declaration or definition of an Objective-C method.

Definition at line 462 of file CGCall.cpp.

References arrangeObjCMessageSendSignature(), clang::ObjCMethodDecl::getSelfDecl(), and clang::ValueDecl::getType().

Referenced by clang::CodeGen::CodeGenFunction::StartObjCMethod().

◆ arrangeUnprototypedMustTailThunk()

const CGFunctionInfo & CodeGenTypes::arrangeUnprototypedMustTailThunk ( const CXXMethodDecl MD)

Arrange a thunk that takes 'this' as the first parameter followed by varargs.

Return a void pointer, regardless of the actual return type. The body of the thunk will end in a musttail call to a function of the correct type, and the caller will bitcast the function to the correct prototype.

Definition at line 534 of file CGCall.cpp.

References arrangeLLVMFunctionInfo(), DeriveThisType(), GetFormalType(), clang::CXXMethodDecl::getParent(), clang::CXXMethodDecl::isVirtual(), and clang::ASTContext::VoidTy.

◆ arrangeUnprototypedObjCMessageSend()

const CGFunctionInfo & CodeGenTypes::arrangeUnprototypedObjCMessageSend ( QualType  returnType,
const CallArgList args 
)

◆ ClangCallConvToLLVMCallConv()

unsigned CodeGenTypes::ClangCallConvToLLVMCallConv ( CallingConv  CC)

◆ ComputeRecordLayout()

std::unique_ptr< CGRecordLayout > CodeGenTypes::ComputeRecordLayout ( const RecordDecl D,
llvm::StructType *  Ty 
)

Compute a new LLVM record layout object for the given record.

Definition at line 878 of file CGRecordLayoutBuilder.cpp.

Referenced by ConvertRecordDeclType().

◆ ConvertRecordDeclType()

llvm::StructType * CodeGenTypes::ConvertRecordDeclType ( const RecordDecl TD)

◆ ConvertType()

llvm::Type * CodeGenTypes::ConvertType ( QualType  T)

ConvertType - Convert type T into a llvm::Type.

ConvertType - Convert the specified type to its LLVM form.

Definition at line 395 of file CodeGenTypes.cpp.

References clang::CodeGen::CGCXXABI::ConvertMemberPointerType(), clang::CodeGen::CGOpenCLRuntime::convertOpenCLSpecificType(), ConvertRecordDeclType(), ConvertTypeForMem(), clang::serialized_diags::create(), clang::ASTContext::BuiltinVectorTypeInfo::EC, clang::ASTContext::BuiltinVectorTypeInfo::ElementType, clang::ASTContext::getBuiltinVectorTypeInfo(), clang::ASTContext::getCanonicalType(), clang::CodeGen::TargetCodeGenInfo::getCUDADeviceBuiltinSurfaceDeviceType(), clang::CodeGen::TargetCodeGenInfo::getCUDADeviceBuiltinTextureDeviceType(), getCXXABI(), getDataLayout(), clang::ArrayType::getElementType(), clang::VectorType::getElementType(), clang::MatrixType::getElementType(), clang::ASTContext::getFloatTypeSemantics(), clang::CodeGen::CodeGenModule::getGenericBlockLiteralType(), clang::ArrayType::getIndexTypeCVRQualifiers(), clang::EnumDecl::getIntegerType(), getKind(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ASTContext::getLangOpts(), getLLVMContext(), clang::ConstantMatrixType::getNumColumns(), clang::VectorType::getNumElements(), clang::ConstantMatrixType::getNumRows(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), clang::CodeGen::CGOpenCLRuntime::getPipeType(), clang::Type::getPointeeType(), clang::PointerType::getPointeeType(), clang::ReferenceType::getPointeeType(), clang::ConstantArrayType::getSize(), clang::ASTContext::getTargetAddressSpace(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::ASTContext::getTargetInfo(), clang::Type::getTypeClass(), getTypeForFormat(), clang::QualType::getTypePtr(), clang::ASTContext::getTypeSize(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::TagDecl::isCompleteDefinition(), clang::Type::isCUDADeviceBuiltinSurfaceType(), clang::Type::isCUDADeviceBuiltinTextureType(), clang::EnumDecl::isFixed(), clang::ASTContext::BuiltinVectorTypeInfo::NumVectors, and clang::TargetInfo::useFP16ConversionIntrinsics().

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData(), addX86InterruptAttrs(), arrangeLLVMFunctionInfo(), buildBlockDescriptor(), buildGlobalBlock(), computeBlockInfo(), clang::CodeGen::convertFreeFunctionType(), clang::CodeGen::CGCXXABI::ConvertMemberPointerType(), clang::CodeGen::CodeGenFunction::ConvertType(), ConvertTypeForMem(), clang::CodeGen::CodeGenFunction::EmitCXXDestructorCall(), EmitDeclDestroy(), clang::CodeGen::CodeGenFunction::EmitDeleteCall(), clang::CodeGen::CodeGenFunction::EmitExtVectorElementLValue(), EmitFunctionDeclPointer(), clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), clang::CodeGen::CodeGenFunction::EmitLoadOfGlobalRegLValue(), clang::CodeGen::CodeGenFunction::EmitObjCCollectionLiteral(), clang::CodeGen::CodeGenFunction::EmitStoreThroughGlobalRegLValue(), clang::CodeGen::CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(), clang::CodeGen::CodeGenModule::GetAddrOfConstantCFString(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::CodeGen::CodeGenModule::getBlockDescriptorType(), clang::CodeGen::CGCXXABI::GetBogusMemberPointer(), getExpandedTypes(), GetFunctionType(), getGuardAcquireFn(), clang::CodeGen::CodeGenModule::GetNonVirtualBaseClassOffset(), clang::CodeGen::ConstantEmitter::tryEmitPrivate(), and UpdateCompletedType().

◆ ConvertTypeForMem()

llvm::Type * CodeGenTypes::ConvertTypeForMem ( QualType  T,
bool  ForBitField = false 
)

ConvertTypeForMem - Convert type T into a llvm::Type.

This differs from ConvertType in that it is used to convert to the memory representation for a type. For example, the scalar representation for _Bool is i1, but the memory representation is usually i8 or i32, depending on the target.

Definition at line 90 of file CodeGenTypes.cpp.

References ConvertType(), clang::ASTContext::getCanonicalType(), clang::MatrixType::getElementType(), getLLVMContext(), clang::ConstantMatrixType::getNumColumns(), clang::ConstantMatrixType::getNumRows(), clang::CanQual< T >::getTypePtr(), clang::ASTContext::getTypeSize(), clang::Type::isConstantMatrixType(), and clang::Type::isExtIntType().

Referenced by clang::CodeGen::CGOpenMPRuntimeGPU::clear(), computeBlockInfo(), ConvertType(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::convertTypeForMemory(), clang::CodeGen::CodeGenFunction::EmitCXXGlobalVarDeclInit(), clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(), clang::CodeGen::ConstantEmitter::emitForMemory(), emitGlobalToListCopyFunction(), emitGlobalToListReduceFunction(), EmitGlobalVarDeclLValue(), emitListToGlobalCopyFunction(), emitListToGlobalReduceFunction(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenModule::EmitOMPAllocateDecl(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), clang::CodeGen::CGOpenMPRuntime::getAddrOfDeclareTargetVar(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalVar(), GetFunctionType(), and clang::CodeGen::CodeGenModule::GetWeakRefReference().

◆ DeriveThisType()

CanQualType CodeGenTypes::DeriveThisType ( const CXXRecordDecl RD,
const CXXMethodDecl MD 
)

Derives the 'this' type for codegen purposes, i.e.

ignoring method CVR qualification.

ignoring method CVR qualification. Either or both of RD and MD may be null. A null RD indicates that there is no meaningful 'this' type, and a null MD can occur when calling a method pointer.

Definition at line 77 of file CGCall.cpp.

References clang::CanQual< Type >::CreateUnsafe(), clang::Qualifiers::getAddressSpace(), clang::ASTContext::getAddrSpaceQualType(), clang::Type::getCanonicalTypeInternal(), clang::CXXMethodDecl::getMethodQualifiers(), clang::ASTContext::getPointerType(), clang::ASTContext::getTagDeclType(), and clang::ASTContext::VoidTy.

Referenced by arrangeCXXMethodType(), arrangeCXXStructorDeclaration(), arrangeMSCtorClosure(), arrangeUnprototypedMustTailThunk(), and commonEmitCXXMemberOrOperatorCall().

◆ getABIInfo()

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

◆ getCGRecordLayout()

const CGRecordLayout & CodeGenTypes::getCGRecordLayout ( const RecordDecl RD)

◆ getCodeGenOpts()

const CodeGenOptions & CodeGenTypes::getCodeGenOpts ( ) const

◆ getContext()

ASTContext& clang::CodeGen::CodeGenTypes::getContext ( ) const
inline

◆ getCXXABI()

CGCXXABI& clang::CodeGen::CodeGenTypes::getCXXABI ( ) const
inline

◆ getDataLayout()

const llvm::DataLayout& clang::CodeGen::CodeGenTypes::getDataLayout ( ) const
inline

◆ getExpandedTypes()

void CodeGenTypes::getExpandedTypes ( QualType  Ty,
SmallVectorImpl< llvm::Type * >::iterator &  TI 
)

getExpandedTypes - Expand the type

Definition at line 985 of file CGCall.cpp.

References ConvertType(), and getTypeExpansion().

Referenced by GetFunctionType().

◆ GetFunctionType() [1/2]

llvm::FunctionType * CodeGenTypes::GetFunctionType ( const CGFunctionInfo Info)

GetFunctionType - Get the LLVM function type for.

  • Info.

Definition at line 1595 of file CGCall.cpp.

References clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::ABIArgInfo::CoerceAndExpand, clang::CodeGen::CGFunctionInfo::const_arg_iterator, ConvertType(), ConvertTypeForMem(), clang::CodeGen::ABIArgInfo::Direct, clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CodeGen::CGFunctionInfo::getArgStruct(), clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::ABIArgInfo::getCoerceAndExpandTypeSequence(), clang::CodeGen::ABIArgInfo::getCoerceToType(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), getExpandedTypes(), clang::CodeGen::ABIArgInfo::getInAllocaSRet(), clang::CodeGen::ABIArgInfo::getIndirectAddrSpace(), clang::CodeGen::ABIArgInfo::getKind(), getLLVMContext(), clang::CodeGen::CGFunctionInfo::getNumRequiredArgs(), clang::CodeGen::ABIArgInfo::getPaddingType(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::ASTContext::getTargetAddressSpace(), clang::CodeGen::ABIArgInfo::getUnpaddedCoerceAndExpandType(), clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::ABIArgInfo::IndirectAliased, clang::CodeGen::ABIArgInfo::isDirect(), clang::CodeGen::CGFunctionInfo::isVariadic(), and Ret().

Referenced by clang::CodeGen::CodeGenFunction::BuildAppleKextVirtualDestructorCall(), emitAtomicLibcall(), clang::CodeGen::CodeGenFunction::EmitBlockCallExpr(), clang::CodeGen::CodeGenFunction::EmitCall(), emitCombinerOrInitializer(), clang::CodeGen::CGOpenMPRuntime::emitDeclareTargetVarDefinition(), emitDestructorsFunction(), clang::CodeGen::CodeGenFunction::EmitForwardingCallToLambda(), clang::CodeGen::CodeGenModule::EmitGlobal(), emitGlobalToListCopyFunction(), emitGlobalToListReduceFunction(), emitInterWarpCopyFunction(), emitListToGlobalCopyFunction(), emitListToGlobalReduceFunction(), clang::CodeGen::CGCXXABI::EmitLoadOfMemberFunctionPointer(), emitOutlinedFunctionPrologue(), emitProxyTaskFunction(), emitReduceCombFunction(), emitReduceFiniFunction(), emitReduceInitFunction(), clang::CodeGen::CGOpenMPRuntime::emitRequiresDirectiveRegFun(), emitShuffleAndReduceFunction(), emitTaskDupFunction(), emitTaskPrivateMappingFunction(), clang::CodeGen::CGOpenMPRuntime::emitThreadPrivateVarDefinition(), clang::CodeGen::CGOpenMPRuntime::emitUserDefinedMapper(), clang::CodeGen::CodeGenFunction::GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), clang::CodeGen::CodeGenFunction::GenerateCopyHelperFunction(), clang::CodeGen::CodeGenFunction::generateDestroyHelper(), clang::CodeGen::CodeGenFunction::GenerateDestroyHelperFunction(), clang::CodeGen::CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(), clang::CodeGen::CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction(), clang::CodeGen::CodeGenFunction::generateThunk(), clang::CodeGen::CodeGenFunction::GenerateVarArgsThunk(), clang::CodeGen::CodeGenModule::getAddrAndTypeOfCXXStructor(), clang::CodeGen::CodeGenModule::GetAddrOfGlobal(), GetFunctionType(), GetFunctionTypeForVTable(), and clang::CodeGen::CGObjCRuntime::getMessageSendInfo().

◆ GetFunctionType() [2/2]

llvm::FunctionType * CodeGenTypes::GetFunctionType ( GlobalDecl  GD)

Definition at line 1589 of file CGCall.cpp.

References arrangeGlobalDeclaration(), and GetFunctionType().

◆ GetFunctionTypeForVTable()

llvm::Type * CodeGenTypes::GetFunctionTypeForVTable ( GlobalDecl  GD)

GetFunctionTypeForVTable - Get the LLVM function type for use in a vtable, given a CXXMethodDecl.

If the method to has an incomplete return type, and/or incomplete argument types, this will return the opaque type.

Definition at line 1729 of file CGCall.cpp.

References clang::Type::getAs(), clang::GlobalDecl::getDecl(), GetFunctionType(), getLLVMContext(), clang::ValueDecl::getType(), and isFuncTypeConvertible().

◆ getLLVMContext()

llvm::LLVMContext& clang::CodeGen::CodeGenTypes::getLLVMContext ( )
inline

◆ getTarget()

const TargetInfo& clang::CodeGen::CodeGenTypes::getTarget ( ) const
inline

Definition at line 118 of file CodeGenTypes.h.

References clang::Target.

Referenced by clang::CodeGen::ABIInfo::getTarget(), and occupiesMoreThan().

◆ inheritingCtorHasParams()

bool CodeGenTypes::inheritingCtorHasParams ( const InheritedConstructor Inherited,
CXXCtorType  Type 
)

◆ isFuncParamTypeConvertible()

bool CodeGenTypes::isFuncParamTypeConvertible ( QualType  Ty)

isFuncParamTypeConvertible - Return true if the specified type in a function parameter or result position can be converted to an IR type at this point.

This boils down to being whether it is complete, as well as whether we've temporarily deferred expanding the type because we're in a recursive context.

Definition at line 206 of file CodeGenTypes.cpp.

References clang::Type::getAs(), getCXXABI(), clang::RecordType::getDecl(), clang::Type::isIncompleteType(), clang::CodeGen::CGCXXABI::isMemberPointerConvertible(), and isSafeToConvert().

Referenced by isFuncTypeConvertible().

◆ isFuncTypeConvertible()

bool CodeGenTypes::isFuncTypeConvertible ( const FunctionType FT)

isFuncTypeConvertible - Utility to check whether a function type can be converted to an LLVM type (i.e.

Code to verify a given function type is complete, i.e.

doesn't depend on an incomplete tag type).

the return type and all of the parameter types are complete. Also check to see if we are in a RS_StructPointer context, and if so whether any struct types have been pended. If so, we don't want to ask the ABI lowering code to handle a type that cannot be converted to an IR type.

Definition at line 240 of file CodeGenTypes.cpp.

References clang::FunctionType::getReturnType(), and isFuncParamTypeConvertible().

Referenced by GetFunctionTypeForVTable().

◆ isPointerZeroInitializable()

bool CodeGenTypes::isPointerZeroInitializable ( QualType  T)

Check if the pointer type can be zero-initialized (in the C++ sense) with an LLVM zeroinitializer.

Definition at line 892 of file CodeGenTypes.cpp.

References clang::Type::isAnyPointerType(), clang::Type::isBlockPointerType(), and isZeroInitializable().

Referenced by isSimpleZero().

◆ isRecordBeingLaidOut()

bool clang::CodeGen::CodeGenTypes::isRecordBeingLaidOut ( const Type Ty) const
inline

Definition at line 309 of file CodeGenTypes.h.

Referenced by isSafeToConvert().

◆ isRecordLayoutComplete()

bool CodeGenTypes::isRecordLayoutComplete ( const Type Ty) const

isRecordLayoutComplete - Return true if the specified type is already completely laid out.

Definition at line 113 of file CodeGenTypes.cpp.

Referenced by isSafeToConvert().

◆ isZeroInitializable() [1/2]

bool CodeGenTypes::isZeroInitializable ( const RecordDecl RD)

IsZeroInitializable - Return whether a record type can be zero-initialized (in the C++ sense) with an LLVM zeroinitializer.

Definition at line 925 of file CodeGenTypes.cpp.

References getCGRecordLayout(), and clang::CodeGen::CGRecordLayout::isZeroInitializable().

◆ isZeroInitializable() [2/2]

bool CodeGenTypes::isZeroInitializable ( QualType  T)

◆ noRecordsBeingLaidOut()

bool clang::CodeGen::CodeGenTypes::noRecordsBeingLaidOut ( ) const
inline

Definition at line 306 of file CodeGenTypes.h.

Referenced by isSafeToConvert().

◆ RefreshTypeCacheForClass()

void CodeGenTypes::RefreshTypeCacheForClass ( const CXXRecordDecl RD)

Remove stale types from the type cache when an inheritance model gets assigned to a class.

Definition at line 290 of file CodeGenTypes.cpp.

References clang::ASTContext::getCanonicalType(), clang::ASTContext::getRecordType(), and clang::QualType::getTypePtr().

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

◆ UpdateCompletedType()

void CodeGenTypes::UpdateCompletedType ( const TagDecl TD)

UpdateCompletedType - When we find the full definition for a TagDecl, replace the 'opaque' type we previously made for it if applicable.

Definition at line 254 of file CodeGenTypes.cpp.

References ConvertRecordDeclType(), ConvertType(), clang::CodeGen::CodeGenModule::getModuleDebugInfo(), clang::ASTContext::getTagDeclType(), clang::QualType::getTypePtr(), and clang::TagDecl::isDependentType().

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


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