clang
3.7.0
|
#include "CGCall.h"
#include "ABIInfo.h"
#include "CGCXXABI.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/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/Frontend/CodeGenOptions.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/Attributes.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.
Classes | |
struct | DisableDebugLocationUpdates |
|
static |
Arrange a call as unto a free function, except possibly with an additional number of formal parameters considered required.
Definition at line 373 of file CGCall.cpp.
References 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::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 97 of file CGCall.cpp.
References 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 979 of file CGCall.cpp.
References clang::CharUnits::alignmentAtOffset(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenModule::getDataLayout(), and clang::CharUnits::getQuantity().
Referenced by CreateCoercedStore(), and clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
Definition at line 40 of file CGCall.cpp.
References AttributeLangSupport::C, clang::CC_AAPCS, clang::CC_AAPCS_VFP, clang::CC_IntelOclBicc, clang::CC_SpirFunction, clang::CC_SpirKernel, 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::arrangeLLVMFunctionInfo().
|
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 867 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getDataLayout(), and clang::CodeGen::CodeGenTypeCache::IntPtrTy.
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 921 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, CoerceIntOrPtrToIntOrPtr(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenModule::getDataLayout(), getElementType(), clang::CharUnits::getQuantity(), and clang::CodeGen::CodeGenTypeCache::IntPtrTy.
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 1009 of file CGCall.cpp.
References BuildAggStore(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, CoerceIntOrPtrToIntOrPtr(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenModule::getDataLayout(), getElementType(), clang::CharUnits::getQuantity(), and clang::CodeGen::CodeGenTypeCache::IntPtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitCall(), and clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
static |
Definition at line 2485 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::AggValueSlot::forAddr(), clang::QualType::getQualifiers(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, and clang::CharUnits::Zero().
Referenced by clang::CodeGen::CodeGenFunction::EmitCallArg().
|
static |
Definition at line 2608 of file CGCall.cpp.
References clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), clang::CodeGen::CodeGenFunction::DeactivateCleanupBlock(), clang::CodeGen::CallArgList::getCleanupsToDeactivate(), clang::TargetInfo::getCXXABI(), and clang::CodeGen::CodeGenFunction::getTarget().
Referenced by clang::CodeGen::CodeGenFunction::EmitCall().
|
static |
An argument came in as a promoted argument; demote it back to its declared type.
Definition at line 1716 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), and clang::ValueDecl::getType().
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionProlog().
|
static |
Emit an ARC autorelease of the result of a function.
Definition at line 2257 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 3093 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 2537 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), 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(), getElementType(), clang::CodeGen::LValue::getObjCLifetime(), 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
Definition at line 2630 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::CodeGenFunction::CreateTempAlloca(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::LValue::getObjCLifetime(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCIndirectCopyRestoreExpr::getSubExpr(), clang::Expr::getType(), isProvablyNonNull(), isProvablyNull(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), maybeGetUnaryAddrOfOperand(), clang::Qualifiers::OCL_Strong, and clang::ObjCIndirectCopyRestoreExpr::shouldCopy().
Referenced by clang::CodeGen::CodeGenFunction::EmitCallArg().
|
static |
Definition at line 2602 of file CGCall.cpp.
References emitWriteback(), 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 830 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getDataLayout(), and getElementType().
Referenced by CreateCoercedLoad(), and CreateCoercedStore().
|
static |
Definition at line 2117 of file CGCall.cpp.
Referenced by tryRemoveRetainOfSelf().
|
static |
Heuristically search for a dominating store to the return-value slot.
Definition at line 2275 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, and clang::CodeGen::CodeGenFunction::ReturnValue.
Referenced by clang::CodeGen::CodeGenFunction::EmitFunctionEpilog().
|
static |
Definition at line 118 of file CGCall.cpp.
References clang::CC_AAPCS, clang::CC_AAPCS_VFP, clang::CC_C, clang::CC_IntelOclBicc, clang::CC_X86_64SysV, clang::CC_X86_64Win64, clang::CC_X86FastCall, clang::CC_X86Pascal, clang::CC_X86StdCall, clang::CC_X86ThisCall, clang::CC_X86VectorCall, clang::Decl::getAttr(), and clang::Decl::hasAttr().
Referenced by clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature().
|
static |
Definition at line 687 of file CGCall.cpp.
References getTypeExpansion().
|
static |
Returns the canonical formal type of the given C++ method.
Definition at line 69 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 1736 of file CGCall.cpp.
References clang::Decl::getAttr(), clang::Type::isAnyPointerType(), clang::Type::isBlockPointerType(), and clang::Decl::specific_attrs().
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 78 of file CGCall.cpp.
References clang::Type::getCanonicalTypeUnqualified(), and clang::CanQual< T >::getUnqualifiedType().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), arrangeFreeFunctionLikeCall(), and clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature().
|
static |
Derives the 'this' type for codegen purposes, i.e. ignoring method qualification. FIXME: address space qualification?
Definition at line 63 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 630 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 2480 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 2532 of file CGCall.cpp.
Referenced by emitWriteback(), and emitWritebackArg().
|
static |
Definition at line 2528 of file CGCall.cpp.
Referenced by emitWriteback(), and emitWritebackArg().
Definition at line 2621 of file CGCall.cpp.
References clang::Expr::IgnoreParens(), and clang::UO_AddrOf.
Referenced by emitWritebackArg().
|
static |
Try to emit a fused autorelease of a return result.
Definition at line 2129 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseReturnValue(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), clang::CodeGen::ARCEntrypoints::objc_retain, clang::CodeGen::ARCEntrypoints::objc_retainAutoreleasedReturnValue, and clang::CodeGen::ARCEntrypoints::retainAutoreleasedReturnValueMarker.
Referenced by emitAutoreleaseOfResult().
|
static |
If this is a +1 of the value of an immutable 'self', remove it.
Definition at line 2218 of file CGCall.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::CurCodeDecl, eraseUnusedBitCasts(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), clang::ObjCMethodDecl::getSelfDecl(), and clang::CodeGen::ARCEntrypoints::objc_retain.
Referenced by emitAutoreleaseOfResult().