clang
3.9.0
|
#include "CGCall.h"
#include "ABIInfo.h"
#include "CGBlocks.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/CodeGen/SwiftCallingConv.h"
#include "clang/Frontend/CodeGenOptions.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/Transforms/Utils/Local.h"
Go to the source code of this file.
Functions | |
static CanQualType | GetThisType (ASTContext &Context, const CXXRecordDecl *RD) |
Derives the 'this' type for codegen purposes, i.e. More... | |
static CanQual< FunctionProtoType > | GetFormalType (const CXXMethodDecl *MD) |
Returns the canonical formal type of the given C++ method. More... | |
static CanQualType | GetReturnType (QualType RetTy) |
Returns the "extra-canonicalized" return type, which discards qualifiers on the return type. More... | |
static void | appendParameterTypes (const CodeGenTypes &CGT, SmallVectorImpl< CanQualType > &prefix, SmallVectorImpl< FunctionProtoType::ExtParameterInfo > ¶mInfos, CanQual< FunctionProtoType > FPT, const FunctionDecl *FD) |
Adds the formal paramaters in FPT to the given prefix. More... | |
static const CGFunctionInfo & | arrangeLLVMFunctionInfo (CodeGenTypes &CGT, bool instanceMethod, SmallVectorImpl< CanQualType > &prefix, CanQual< FunctionProtoType > FTP, const FunctionDecl *FD) |
Arrange the LLVM function layout for a value of the given function type, on top of any implicit parameters already stored. More... | |
static CallingConv | getCallingConventionForDecl (const Decl *D, bool IsWindows) |
static SmallVector < CanQualType, 16 > | getArgTypesForCall (ASTContext &ctx, const CallArgList &args) |
static SmallVector < CanQualType, 16 > | getArgTypesForDeclaration (ASTContext &ctx, const FunctionArgList &args) |
static void | addExtParameterInfosForCall (llvm::SmallVectorImpl< FunctionProtoType::ExtParameterInfo > ¶mInfos, const FunctionProtoType *proto, unsigned prefixArgs, unsigned totalArgs) |
static llvm::SmallVector < FunctionProtoType::ExtParameterInfo, 16 > | getExtParameterInfosForCall (const FunctionProtoType *proto, unsigned prefixArgs, unsigned totalArgs) |
static const CGFunctionInfo & | arrangeFreeFunctionLikeCall (CodeGenTypes &CGT, CodeGenModule &CGM, const CallArgList &args, const FunctionType *fnType, unsigned numExtraRequiredArgs, bool chainCall) |
Arrange a call as unto a free function, except possibly with an additional number of formal parameters considered required. More... | |
static std::unique_ptr < TypeExpansion > | getTypeExpansion (QualType Ty, const ASTContext &Context) |
static int | getExpansionSize (QualType Ty, const ASTContext &Context) |
static void | forConstantArrayExpansion (CodeGenFunction &CGF, ConstantArrayExpansion *CAE, Address BaseAddr, llvm::function_ref< void(Address)> Fn) |
static Address | CreateTempAllocaForCoercion (CodeGenFunction &CGF, llvm::Type *Ty, CharUnits MinAlign) |
Create a temporary allocation for the purposes of coercion. More... | |
static Address | EnterStructPointerForCoercedAccess (Address SrcPtr, llvm::StructType *SrcSTy, uint64_t DstSize, CodeGenFunction &CGF) |
EnterStructPointerForCoercedAccess - Given a struct pointer that we are accessing some number of bytes out of it, try to gep into the struct to get at its inner goodness. More... | |
static llvm::Value * | CoerceIntOrPtrToIntOrPtr (llvm::Value *Val, llvm::Type *Ty, CodeGenFunction &CGF) |
CoerceIntOrPtrToIntOrPtr - Convert a value Val to the specific Ty where both are either integers or pointers. More... | |
static llvm::Value * | CreateCoercedLoad (Address Src, llvm::Type *Ty, CodeGenFunction &CGF) |
CreateCoercedLoad - Create a load from. More... | |
static void | BuildAggStore (CodeGenFunction &CGF, llvm::Value *Val, Address Dest, bool DestIsVolatile) |
static void | CreateCoercedStore (llvm::Value *Src, Address Dst, bool DstIsVolatile, CodeGenFunction &CGF) |
CreateCoercedStore - Create a store to. More... | |
static Address | emitAddressAtOffset (CodeGenFunction &CGF, Address addr, const ABIArgInfo &info) |
static void | AddAttributesFromFunctionProtoType (ASTContext &Ctx, llvm::AttrBuilder &FuncAttrs, const FunctionProtoType *FPT) |
static llvm::Value * | emitArgumentDemotion (CodeGenFunction &CGF, const VarDecl *var, llvm::Value *value) |
An argument came in as a promoted argument; demote it back to its declared type. More... | |
static const NonNullAttr * | getNonNullAttr (const Decl *FD, const ParmVarDecl *PVD, QualType ArgType, unsigned ArgNo) |
Returns the attribute (either parameter attribute, or function attribute), which declares argument ArgNo to be non-null. More... | |
static void | eraseUnusedBitCasts (llvm::Instruction *insn) |
static llvm::Value * | tryEmitFusedAutoreleaseOfResult (CodeGenFunction &CGF, llvm::Value *result) |
Try to emit a fused autorelease of a return result. More... | |
static llvm::Value * | tryRemoveRetainOfSelf (CodeGenFunction &CGF, llvm::Value *result) |
If this is a +1 of the value of an immutable 'self', remove it. More... | |
static llvm::Value * | emitAutoreleaseOfResult (CodeGenFunction &CGF, llvm::Value *result) |
Emit an ARC autorelease of the result of a function. More... | |
static llvm::StoreInst * | findDominatingStoreToReturnValue (CodeGenFunction &CGF) |
Heuristically search for a dominating store to the return-value slot. More... | |
static bool | isInAllocaArgument (CGCXXABI &ABI, QualType type) |
static AggValueSlot | createPlaceholderSlot (CodeGenFunction &CGF, QualType Ty) |
static bool | isProvablyNull (llvm::Value *addr) |
static bool | isProvablyNonNull (llvm::Value *addr) |
static void | emitWriteback (CodeGenFunction &CGF, const CallArgList::Writeback &writeback) |
Emit the actual writing-back of a writeback. More... | |
static void | emitWritebacks (CodeGenFunction &CGF, const CallArgList &args) |
static void | deactivateArgCleanupsBeforeCall (CodeGenFunction &CGF, const CallArgList &CallArgs) |
static const Expr * | maybeGetUnaryAddrOfOperand (const Expr *E) |
static void | emitWritebackArg (CodeGenFunction &CGF, CallArgList &args, const ObjCIndirectCopyRestoreExpr *CRE) |
Emit an argument that's being passed call-by-writeback. More... | |
static void | getBundlesForFunclet (llvm::Value *Callee, llvm::Instruction *CurrentFuncletPad, SmallVectorImpl< llvm::OperandBundleDef > &BundleList) |
static void | EmitInitStoreOfNonAggregate (CodeGenFunction &CGF, RValue Src, LValue Dst) |
Store a non-aggregate value to an address to initialize it. More... | |
|
static |
Definition at line 1609 of file CGCall.cpp.
References clang::FunctionProtoType::getExceptionSpecType(), clang::FunctionProtoType::isNothrow(), and clang::isUnresolvedExceptionSpec().
Referenced by clang::CodeGen::CodeGenModule::ConstructAttributeList().
|
static |
Definition at line 319 of file CGCall.cpp.
References clang::FunctionProtoType::getExtParameterInfos(), clang::FunctionProtoType::getNumParams(), and clang::FunctionProtoType::hasExtParameterInfos().
Referenced by arrangeFreeFunctionLikeCall(), and getExtParameterInfosForCall().
|
static |
Adds the formal paramaters in FPT to the given prefix.
If any parameter in FPT has pass_object_size attrs, then we'll add parameters for those, too.
Definition at line 104 of file CGCall.cpp.
References E, clang::CodeGen::CodeGenTypes::getContext(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ASTContext::getSizeType(), and I.
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), and arrangeLLVMFunctionInfo().
|
static |
Arrange a call as unto a free function, except possibly with an additional number of formal parameters considered required.
Definition at line 508 of file CGCall.cpp.
References addExtParameterInfosForCall(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(), clang::ASTContext::getCanonicalParamType(), clang::CodeGen::CodeGenTypes::getContext(), clang::FunctionType::getExtInfo(), GetReturnType(), clang::FunctionType::getReturnType(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), and clang::CodeGen::TargetCodeGenInfo::isNoProtoCallVariadic().
Referenced by clang::CodeGen::CodeGenTypes::arrangeBlockFunctionCall(), and clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall().
|
static |
Arrange the LLVM function layout for a value of the given function type, on top of any implicit parameters already stored.
Definition at line 140 of file CGCall.cpp.
References appendParameterTypes(), clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(), clang::CodeGen::RequiredArgs::forPrototypePlus(), and clang::CanQual< T >::getUnqualifiedType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), and clang::CodeGen::CodeGenTypes::arrangeFreeFunctionType().
|
static |
Definition at line 1191 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CharUnits::fromQuantity(), and clang::CodeGen::CodeGenModule::getDataLayout().
Referenced by CreateCoercedStore(), and clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
CoerceIntOrPtrToIntOrPtr - Convert a value Val to the specific Ty where both are either integers or pointers.
This does a truncation of the value if it is too large or a zero extension if it is too small.
This behaves as if the value were coerced through memory, so on big-endian targets the high bits are preserved in a truncation, while little-endian targets preserve the low bits.
Definition at line 1086 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, and clang::CodeGen::Type.
Referenced by CreateCoercedLoad(), and CreateCoercedStore().
|
static |
CreateCoercedLoad - Create a load from.
This safely handles the case when the src type is smaller than the destination type; in this situation the values of bits which not present in the src are undefined.
Definition at line 1140 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, CoerceIntOrPtrToIntOrPtr(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), CreateTempAllocaForCoercion(), EnterStructPointerForCoercedAccess(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntPtrTy, and clang::CodeGen::Type.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitFunctionEpilog().
|
static |
CreateCoercedStore - Create a store to.
This safely handles the case when the src type is larger than the destination type; the upper bits of the src will be lost.
Definition at line 1216 of file CGCall.cpp.
References BuildAggStore(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, CoerceIntOrPtrToIntOrPtr(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAllocaForCoercion(), EnterStructPointerForCoercedAccess(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::Address::getType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntPtrTy, and clang::CodeGen::Type.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
static |
Definition at line 2861 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedLoad(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::AggValueSlot::forAddr(), clang::CharUnits::fromQuantity(), clang::QualType::getQualifiers(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, and clang::CodeGen::Type.
Referenced by clang::CodeGen::CodeGenFunction::EmitCallArg().
|
static |
Create a temporary allocation for the purposes of coercion.
Definition at line 1036 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::CreateTempAlloca(), clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenModule::getDataLayout(), and max().
Referenced by CreateCoercedLoad(), and CreateCoercedStore().
|
static |
Definition at line 2982 of file CGCall.cpp.
References clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), clang::CodeGen::CodeGenFunction::DeactivateCleanupBlock(), clang::CodeGen::CallArgList::getCleanupsToDeactivate(), clang::TargetInfo::getCXXABI(), clang::CodeGen::CodeGenFunction::getTarget(), and I.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
Definition at line 1269 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateConstInBoundsByteGEP(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CharUnits::fromQuantity(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::ABIArgInfo::getDirectOffset(), and clang::CodeGen::CodeGenTypeCache::Int8Ty.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
static |
An argument came in as a promoted argument; demote it back to its declared type.
Definition at line 2014 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::ValueDecl::getType(), and clang::CodeGen::Type.
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
static |
Emit an ARC autorelease of the result of a function.
Definition at line 2584 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::shouldUseFusedARCCalls(), tryEmitFusedAutoreleaseOfResult(), and tryRemoveRetainOfSelf().
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionEpilog().
|
static |
Store a non-aggregate value to an address to initialize it.
For initialization, a non-atomic store will be used.
Definition at line 3494 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::EmitStoreOfComplex(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::RValue::getComplexVal(), clang::CodeGen::RValue::getScalarVal(), and clang::CodeGen::RValue::isScalar().
Referenced by clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
Emit the actual writing-back of a writeback.
Definition at line 2911 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::EmitARCIntrinsicUse(), clang::CodeGen::CodeGenFunction::EmitARCRelease(), clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getElementType(), clang::CodeGen::LValue::getObjCLifetime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::LValue::isARCPreciseLifetime(), isProvablyNonNull(), isProvablyNull(), clang::Qualifiers::OCL_Strong, clang::CodeGen::CallArgList::Writeback::Source, clang::CodeGen::CallArgList::Writeback::Temporary, and clang::CodeGen::CallArgList::Writeback::ToUse.
Referenced by emitWritebacks().
|
static |
Emit an argument that's being passed call-by-writeback.
That is, we are passing the address of an __autoreleased temporary; it might be copy-initialized with the current value of the given address, but it will definitely be copied out of after the call.
Definition at line 3005 of file CGCall.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CallArgList::addWriteback(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), clang::CodeGen::CodeGenFunction::Builder, clang::Type::castAs(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::LValue::getObjCLifetime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCIndirectCopyRestoreExpr::getSubExpr(), clang::Expr::getType(), isProvablyNonNull(), isProvablyNull(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), maybeGetUnaryAddrOfOperand(), clang::Qualifiers::OCL_Strong, and clang::ObjCIndirectCopyRestoreExpr::shouldCopy().
Referenced by clang::CodeGen::CodeGenFunction::EmitCallArg().
|
static |
Definition at line 2976 of file CGCall.cpp.
References emitWriteback(), I, and clang::CodeGen::CallArgList::writebacks().
Referenced by clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
EnterStructPointerForCoercedAccess - Given a struct pointer that we are accessing some number of bytes out of it, try to gep into the struct to get at its inner goodness.
Dive as deep as possible without entering an element with an in-memory size smaller than DstSize.
Definition at line 1050 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::Address::getElementType(), and clang::CodeGen::Type.
Referenced by CreateCoercedLoad(), and CreateCoercedStore().
|
static |
Definition at line 2444 of file CGCall.cpp.
Referenced by tryRemoveRetainOfSelf().
|
static |
Heuristically search for a dominating store to the return-value slot.
Definition at line 2602 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::Address::getPointer(), I, and clang::CodeGen::CodeGenFunction::ReturnValue.
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionEpilog().
|
static |
Definition at line 931 of file CGCall.cpp.
References clang::CharUnits::alignmentOfArrayElement(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::Address::getPointer(), and clang::ASTContext::getTypeSizeInChars().
|
static |
Definition at line 304 of file CGCall.cpp.
References clang::ASTContext::getCanonicalParamType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCall(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), and clang::CodeGen::CodeGenTypes::arrangeUnprototypedObjCMessageSend().
|
static |
Definition at line 312 of file CGCall.cpp.
References clang::ASTContext::getCanonicalParamType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeBlockFunctionDeclaration(), and clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration().
|
static |
Definition at line 3396 of file CGCall.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitCallOrInvoke(), and clang::CodeGen::CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke().
|
static |
Definition at line 167 of file CGCall.cpp.
References clang::CC_AAPCS, clang::CC_AAPCS_VFP, clang::CC_C, clang::CC_IntelOclBicc, clang::CC_PreserveAll, clang::CC_PreserveMost, clang::CC_X86_64SysV, clang::CC_X86_64Win64, clang::CC_X86FastCall, clang::CC_X86Pascal, clang::CC_X86StdCall, clang::CC_X86ThisCall, and clang::CC_X86VectorCall.
Referenced by clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature().
|
static |
Definition at line 889 of file CGCall.cpp.
References Context, and getTypeExpansion().
|
static |
Definition at line 340 of file CGCall.cpp.
References addExtParameterInfosForCall(), and clang::FunctionProtoType::hasExtParameterInfos().
Referenced by clang::CodeGen::CodeGenTypes::arrangeBlockFunctionDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXConstructorCall(), and clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall().
|
static |
Returns the canonical formal type of the given C++ method.
Definition at line 77 of file CGCall.cpp.
References clang::CanQual< T >::getAs(), clang::Type::getCanonicalTypeUnqualified(), and clang::ValueDecl::getType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXConstructorCall(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), clang::CodeGen::CodeGenTypes::arrangeMSCtorClosure(), and clang::CodeGen::CodeGenTypes::arrangeMSMemberPointerThunk().
|
static |
Returns the attribute (either parameter attribute, or function attribute), which declares argument ArgNo to be non-null.
Definition at line 2034 of file CGCall.cpp.
References clang::Type::isAnyPointerType(), and clang::Type::isBlockPointerType().
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionProlog(), and clang::CodeGen::CodeGenFunction::EmitNonNullArgCheck().
|
static |
Returns the "extra-canonicalized" return type, which discards qualifiers on the return type.
Codegen doesn't care about them, and it makes ABI code a little easier to be able to assume that all parameter and return types are top-level unqualified.
Definition at line 86 of file CGCall.cpp.
References clang::Type::getCanonicalTypeUnqualified(), and clang::CanQual< T >::getUnqualifiedType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeBlockFunctionDeclaration(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionCall(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), arrangeFreeFunctionLikeCall(), clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature(), and clang::CodeGen::CodeGenTypes::arrangeUnprototypedObjCMessageSend().
|
static |
Derives the 'this' type for codegen purposes, i.e.
ignoring method qualification. FIXME: address space qualification?
Definition at line 71 of file CGCall.cpp.
References clang::CanQual< Type >::CreateUnsafe(), clang::Type::getCanonicalTypeInternal(), clang::ASTContext::getPointerType(), and clang::ASTContext::getTagDeclType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), clang::CodeGen::CodeGenTypes::arrangeMSCtorClosure(), and clang::CodeGen::CodeGenTypes::arrangeMSMemberPointerThunk().
|
static |
Definition at line 832 of file CGCall.cpp.
References clang::RecordDecl::fields(), clang::Type::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getTypeSizeInChars(), clang::RecordDecl::hasFlexibleArrayMember(), clang::TagDecl::isUnion(), and clang::CharUnits::Zero().
Referenced by clang::CodeGen::CodeGenTypes::getExpandedTypes(), and getExpansionSize().
Definition at line 2856 of file CGCall.cpp.
References clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CGCXXABI::getRecordArgABI(), and clang::CodeGen::CGCXXABI::RAA_DirectInMemory.
Referenced by clang::CodeGen::CodeGenFunction::EmitCallArgs(), and clang::CodeGen::CodeGenFunction::EmitDelegateCallArg().
|
static |
Definition at line 2906 of file CGCall.cpp.
Referenced by emitWriteback(), and emitWritebackArg().
|
static |
Definition at line 2902 of file CGCall.cpp.
Referenced by emitWriteback(), and emitWritebackArg().
Definition at line 2994 of file CGCall.cpp.
References clang::Expr::IgnoreParens().
Referenced by emitWritebackArg().
|
static |
Try to emit a fused autorelease of a return result.
Definition at line 2456 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseReturnValue(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::ObjCEntrypoints::objc_retain, clang::CodeGen::ObjCEntrypoints::objc_retainAutoreleasedReturnValue, clang::CodeGen::ObjCEntrypoints::retainAutoreleasedReturnValueMarker, and clang::CodeGen::Type.
Referenced by emitAutoreleaseOfResult().
|
static |
If this is a +1 of the value of an immutable 'self', remove it.
Definition at line 2545 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::CurCodeDecl, eraseUnusedBitCasts(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::Address::getPointer(), clang::ObjCMethodDecl::getSelfDecl(), clang::CodeGen::ObjCEntrypoints::objc_retain, and clang::CodeGen::Type.
Referenced by emitAutoreleaseOfResult().