clang 17.0.0git
Namespaces | Functions
CGCall.cpp File Reference
#include "CGCall.h"
#include "ABIInfo.h"
#include "CGBlocks.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/CodeGen/SwiftCallingConv.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Assumptions.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Type.h"
#include "llvm/Transforms/Utils/Local.h"
#include <optional>
Include dependency graph for CGCall.cpp:

Go to the source code of this file.

Namespaces

namespace  clang
 
namespace  clang::CodeGen
 

Functions

static CanQual< FunctionProtoTypeGetFormalType (const CXXMethodDecl *MD)
 Returns the canonical formal type of the given C++ method.
 
static CanQualType GetReturnType (QualType RetTy)
 Returns the "extra-canonicalized" return type, which discards qualifiers on the return type.
 
static void addExtParameterInfosForCall (llvm::SmallVectorImpl< FunctionProtoType::ExtParameterInfo > &paramInfos, const FunctionProtoType *proto, unsigned prefixArgs, unsigned totalArgs)
 
static void appendParameterTypes (const CodeGenTypes &CGT, SmallVectorImpl< CanQualType > &prefix, SmallVectorImpl< FunctionProtoType::ExtParameterInfo > &paramInfos, CanQual< FunctionProtoType > FPT)
 Adds the formal parameters in FPT to the given prefix.
 
static const CGFunctionInfoarrangeLLVMFunctionInfo (CodeGenTypes &CGT, bool instanceMethod, SmallVectorImpl< CanQualType > &prefix, CanQual< FunctionProtoType > FTP)
 Arrange the LLVM function layout for a value of the given function type, on top of any implicit parameters already stored.
 
static CallingConv getCallingConventionForDecl (const ObjCMethodDecl *D, bool IsWindows)
 
static void setCUDAKernelCallingConvention (CanQualType &FTy, CodeGenModule &CGM, const FunctionDecl *FD)
 Set calling convention for CUDA/HIP kernel.
 
static SmallVector< CanQualType, 16 > getArgTypesForCall (ASTContext &ctx, const CallArgList &args)
 
static SmallVector< CanQualType, 16 > getArgTypesForDeclaration (ASTContext &ctx, const FunctionArgList &args)
 
static llvm::SmallVector< FunctionProtoType::ExtParameterInfo, 16 > getExtParameterInfosForCall (const FunctionProtoType *proto, unsigned prefixArgs, unsigned totalArgs)
 
static const CGFunctionInfoarrangeFreeFunctionLikeCall (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.
 
void clang::CodeGen::computeSPIRKernelABIInfo (CodeGenModule &CGM, CGFunctionInfo &FI)
 
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, const Twine &Name="tmp")
 Create a temporary allocation for the purposes of coercion.
 
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.
 
static llvm::ValueCoerceIntOrPtrToIntOrPtr (llvm::Value *Val, llvm::Type *Ty, CodeGenFunction &CGF)
 CoerceIntOrPtrToIntOrPtr - Convert a value Val to the specific Ty where both are either integers or pointers.
 
static llvm::ValueCreateCoercedLoad (Address Src, llvm::Type *Ty, CodeGenFunction &CGF)
 CreateCoercedLoad - Create a load from.
 
static void CreateCoercedStore (llvm::Value *Src, Address Dst, bool DstIsVolatile, CodeGenFunction &CGF)
 CreateCoercedStore - Create a store to.
 
static Address emitAddressAtOffset (CodeGenFunction &CGF, Address addr, const ABIArgInfo &info)
 
static void AddAttributesFromFunctionProtoType (ASTContext &Ctx, llvm::AttrBuilder &FuncAttrs, const FunctionProtoType *FPT)
 
static void AddAttributesFromAssumes (llvm::AttrBuilder &FuncAttrs, const Decl *Callee)
 
static bool HasStrictReturn (const CodeGenModule &Module, QualType RetTy, const Decl *TargetDecl)
 
static void addNoBuiltinAttributes (llvm::AttrBuilder &FuncAttrs, const LangOptions &LangOpts, const NoBuiltinAttr *NBA=nullptr)
 
static bool DetermineNoUndef (QualType QTy, CodeGenTypes &Types, const llvm::DataLayout &DL, const ABIArgInfo &AI, bool CheckCoerce=true)
 
static bool IsArgumentMaybeUndef (const Decl *TargetDecl, unsigned NumRequiredArgs, unsigned ArgNo)
 Check if the argument of a function has maybe_undef attribute.
 
static bool canApplyNoFPClass (const ABIArgInfo &AI, QualType ParamType, bool IsReturn)
 Test if it's legal to apply nofpclass for the given parameter type and it's lowered IR type.
 
static llvm::FPClassTest getNoFPClassTestMask (const LangOptions &LangOpts)
 Return the nofpclass mask that can be applied to floating-point parameters.
 
static llvm::ValueemitArgumentDemotion (CodeGenFunction &CGF, const VarDecl *var, llvm::Value *value)
 An argument came in as a promoted argument; demote it back to its declared type.
 
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.
 
static void eraseUnusedBitCasts (llvm::Instruction *insn)
 
static llvm::ValuetryEmitFusedAutoreleaseOfResult (CodeGenFunction &CGF, llvm::Value *result)
 Try to emit a fused autorelease of a return result.
 
static llvm::ValuetryRemoveRetainOfSelf (CodeGenFunction &CGF, llvm::Value *result)
 If this is a +1 of the value of an immutable 'self', remove it.
 
static llvm::ValueemitAutoreleaseOfResult (CodeGenFunction &CGF, llvm::Value *result)
 Emit an ARC autorelease of the result of a function.
 
static llvm::StoreInst * findDominatingStoreToReturnValue (CodeGenFunction &CGF)
 Heuristically search for a dominating store to the return-value slot.
 
static void setBitRange (SmallVectorImpl< uint64_t > &Bits, int BitOffset, int BitWidth, int CharWidth)
 
static void setBitRange (SmallVectorImpl< uint64_t > &Bits, int StorageOffset, int StorageSize, int BitOffset, int BitWidth, int CharWidth, bool BigEndian)
 
static void setUsedBits (CodeGenModule &, QualType, int, SmallVectorImpl< uint64_t > &)
 
static void setUsedBits (CodeGenModule &CGM, const RecordType *RTy, int Offset, SmallVectorImpl< uint64_t > &Bits)
 
static void setUsedBits (CodeGenModule &CGM, const ConstantArrayType *ATy, int Offset, SmallVectorImpl< uint64_t > &Bits)
 
static uint64_t buildMultiCharMask (const SmallVectorImpl< uint64_t > &Bits, int Pos, int Size, int CharWidth, bool BigEndian)
 
static bool isInAllocaArgument (CGCXXABI &ABI, QualType type)
 
static AggValueSlot createPlaceholderSlot (CodeGenFunction &CGF, QualType Ty)
 
static bool isProvablyNull (llvm::Value *addr)
 
static void emitWriteback (CodeGenFunction &CGF, const CallArgList::Writeback &writeback)
 Emit the actual writing-back of a writeback.
 
static void emitWritebacks (CodeGenFunction &CGF, const CallArgList &args)
 
static void deactivateArgCleanupsBeforeCall (CodeGenFunction &CGF, const CallArgList &CallArgs)
 
static const ExprmaybeGetUnaryAddrOfOperand (const Expr *E)
 
static void emitWritebackArg (CodeGenFunction &CGF, CallArgList &args, const ObjCIndirectCopyRestoreExpr *CRE)
 Emit an argument that's being passed call-by-writeback.
 
static bool hasInAllocaArgs (CodeGenModule &CGM, CallingConv ExplicitCC, ArrayRef< QualType > ArgTypes)
 
static bool isObjCMethodWithTypeParams (const ObjCMethodDecl *method)
 
static unsigned getMaxVectorWidth (const llvm::Type *Ty)
 

Function Documentation

◆ AddAttributesFromAssumes()

static void AddAttributesFromAssumes ( llvm::AttrBuilder &  FuncAttrs,
const Decl Callee 
)
static

Definition at line 1773 of file CGCall.cpp.

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

◆ AddAttributesFromFunctionProtoType()

static void AddAttributesFromFunctionProtoType ( ASTContext Ctx,
llvm::AttrBuilder &  FuncAttrs,
const FunctionProtoType FPT 
)
static

◆ addExtParameterInfosForCall()

static void addExtParameterInfosForCall ( llvm::SmallVectorImpl< FunctionProtoType::ExtParameterInfo > &  paramInfos,
const FunctionProtoType proto,
unsigned  prefixArgs,
unsigned  totalArgs 
)
static

◆ addNoBuiltinAttributes()

static void addNoBuiltinAttributes ( llvm::AttrBuilder &  FuncAttrs,
const LangOptions LangOpts,
const NoBuiltinAttr *  NBA = nullptr 
)
static

◆ appendParameterTypes()

static void appendParameterTypes ( const CodeGenTypes CGT,
SmallVectorImpl< CanQualType > &  prefix,
SmallVectorImpl< FunctionProtoType::ExtParameterInfo > &  paramInfos,
CanQual< FunctionProtoType FPT 
)
static

Adds the formal parameters 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 149 of file CGCall.cpp.

References addExtParameterInfosForCall(), clang::CodeGen::CodeGenTypes::getContext(), clang::ASTContext::getSizeType(), and clang::CanQual< T >::getTypePtr().

Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), and arrangeLLVMFunctionInfo().

◆ arrangeFreeFunctionLikeCall()

static const CGFunctionInfo & arrangeFreeFunctionLikeCall ( CodeGenTypes CGT,
CodeGenModule CGM,
const CallArgList args,
const FunctionType fnType,
unsigned  numExtraRequiredArgs,
bool  chainCall 
)
static

◆ arrangeLLVMFunctionInfo()

static const CGFunctionInfo & arrangeLLVMFunctionInfo ( CodeGenTypes CGT,
bool  instanceMethod,
SmallVectorImpl< CanQualType > &  prefix,
CanQual< FunctionProtoType FTP 
)
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 182 of file CGCall.cpp.

References appendParameterTypes(), clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(), clang::CodeGen::RequiredArgs::forPrototypePlus(), and clang::CanQual< T >::getUnqualifiedType().

◆ buildMultiCharMask()

static uint64_t buildMultiCharMask ( const SmallVectorImpl< uint64_t > &  Bits,
int  Pos,
int  Size,
int  CharWidth,
bool  BigEndian 
)
static

Definition at line 3503 of file CGCall.cpp.

References P.

◆ canApplyNoFPClass()

static bool canApplyNoFPClass ( const ABIArgInfo AI,
QualType  ParamType,
bool  IsReturn 
)
static

Test if it's legal to apply nofpclass for the given parameter type and it's lowered IR type.

Definition at line 2111 of file CGCall.cpp.

References clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::ABIArgInfo::getCoerceToType(), and clang::Type::hasFloatingRepresentation().

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

◆ CoerceIntOrPtrToIntOrPtr()

static llvm::Value * CoerceIntOrPtrToIntOrPtr ( llvm::Value Val,
llvm::Type Ty,
CodeGenFunction CGF 
)
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 1199 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().

◆ CreateCoercedLoad()

static llvm::Value * CreateCoercedLoad ( Address  Src,
llvm::Type Ty,
CodeGenFunction CGF 
)
static

◆ CreateCoercedStore()

static void CreateCoercedStore ( llvm::Value Src,
Address  Dst,
bool  DstIsVolatile,
CodeGenFunction CGF 
)
static

◆ createPlaceholderSlot()

static AggValueSlot createPlaceholderSlot ( CodeGenFunction CGF,
QualType  Ty 
)
static

◆ CreateTempAllocaForCoercion()

static Address CreateTempAllocaForCoercion ( CodeGenFunction CGF,
llvm::Type Ty,
CharUnits  MinAlign,
const Twine &  Name = "tmp" 
)
static

◆ deactivateArgCleanupsBeforeCall()

static void deactivateArgCleanupsBeforeCall ( CodeGenFunction CGF,
const CallArgList CallArgs 
)
static

◆ DetermineNoUndef()

static bool DetermineNoUndef ( QualType  QTy,
CodeGenTypes Types,
const llvm::DataLayout &  DL,
const ABIArgInfo AI,
bool  CheckCoerce = true 
)
static

◆ emitAddressAtOffset()

static Address emitAddressAtOffset ( CodeGenFunction CGF,
Address  addr,
const ABIArgInfo info 
)
static

◆ emitArgumentDemotion()

static llvm::Value * emitArgumentDemotion ( CodeGenFunction CGF,
const VarDecl var,
llvm::Value value 
)
static

An argument came in as a promoted argument; demote it back to its declared type.

Definition at line 2699 of file CGCall.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), and clang::ValueDecl::getType().

◆ emitAutoreleaseOfResult()

static llvm::Value * emitAutoreleaseOfResult ( CodeGenFunction CGF,
llvm::Value result 
)
static

Emit an ARC autorelease of the result of a function.

Returns
the value to actually return from the function

Definition at line 3304 of file CGCall.cpp.

References clang::CodeGen::CodeGenFunction::EmitARCAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::shouldUseFusedARCCalls(), tryEmitFusedAutoreleaseOfResult(), and tryRemoveRetainOfSelf().

◆ emitWriteback()

static void emitWriteback ( CodeGenFunction CGF,
const CallArgList::Writeback writeback 
)
static

◆ emitWritebackArg()

static void emitWritebackArg ( CodeGenFunction CGF,
CallArgList args,
const ObjCIndirectCopyRestoreExpr CRE 
)
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 4004 of file CGCall.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::CallArgList::addWriteback(), clang::CodeGen::CodeGenFunction::Builder, clang::Type::castAs(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CodeGenFunction::createBasicBlock(), 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::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::LValue::getObjCLifetime(), clang::Type::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCIndirectCopyRestoreExpr::getSubExpr(), clang::Expr::getType(), isProvablyNull(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), maybeGetUnaryAddrOfOperand(), clang::Qualifiers::OCL_Strong, and clang::ObjCIndirectCopyRestoreExpr::shouldCopy().

◆ emitWritebacks()

static void emitWritebacks ( CodeGenFunction CGF,
const CallArgList args 
)
static

Definition at line 3976 of file CGCall.cpp.

References emitWriteback(), and clang::CodeGen::CallArgList::writebacks().

◆ EnterStructPointerForCoercedAccess()

static Address EnterStructPointerForCoercedAccess ( Address  SrcPtr,
llvm::StructType *  SrcSTy,
uint64_t  DstSize,
CodeGenFunction CGF 
)
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 1163 of file CGCall.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateStructGEP(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenModule::getDataLayout(), and clang::CodeGen::Address::getElementType().

Referenced by CreateCoercedLoad(), CreateCoercedStore(), and EnterStructPointerForCoercedAccess().

◆ eraseUnusedBitCasts()

static void eraseUnusedBitCasts ( llvm::Instruction *  insn)
static

Definition at line 3165 of file CGCall.cpp.

Referenced by tryRemoveRetainOfSelf().

◆ findDominatingStoreToReturnValue()

static llvm::StoreInst * findDominatingStoreToReturnValue ( CodeGenFunction CGF)
static

Heuristically search for a dominating store to the return-value slot.

Definition at line 3322 of file CGCall.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getPointer(), and clang::CodeGen::CodeGenFunction::ReturnValue.

◆ forConstantArrayExpansion()

static void forConstantArrayExpansion ( CodeGenFunction CGF,
ConstantArrayExpansion *  CAE,
Address  BaseAddr,
llvm::function_ref< void(Address)>  Fn 
)
static

◆ getArgTypesForCall()

static SmallVector< CanQualType, 16 > getArgTypesForCall ( ASTContext ctx,
const CallArgList args 
)
static

◆ getArgTypesForDeclaration()

static SmallVector< CanQualType, 16 > getArgTypesForDeclaration ( ASTContext ctx,
const FunctionArgList args 
)
static

◆ getCallingConventionForDecl()

static CallingConv getCallingConventionForDecl ( const ObjCMethodDecl D,
bool  IsWindows 
)
static

◆ getExpansionSize()

static int getExpansionSize ( QualType  Ty,
const ASTContext Context 
)
static

Definition at line 979 of file CGCall.cpp.

References getExpansionSize(), and getTypeExpansion().

Referenced by getExpansionSize().

◆ getExtParameterInfosForCall()

static llvm::SmallVector< FunctionProtoType::ExtParameterInfo, 16 > getExtParameterInfosForCall ( const FunctionProtoType proto,
unsigned  prefixArgs,
unsigned  totalArgs 
)
static

◆ GetFormalType()

static CanQual< FunctionProtoType > GetFormalType ( const CXXMethodDecl MD)
static

◆ getMaxVectorWidth()

static unsigned getMaxVectorWidth ( const llvm::Type Ty)
static

Definition at line 4766 of file CGCall.cpp.

References getMaxVectorWidth().

Referenced by getMaxVectorWidth().

◆ getNoFPClassTestMask()

static llvm::FPClassTest getNoFPClassTestMask ( const LangOptions LangOpts)
static

Return the nofpclass mask that can be applied to floating-point parameters.

Definition at line 2133 of file CGCall.cpp.

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

◆ getNonNullAttr()

static const NonNullAttr * getNonNullAttr ( const Decl FD,
const ParmVarDecl PVD,
QualType  ArgType,
unsigned  ArgNo 
)
static

Returns the attribute (either parameter attribute, or function attribute), which declares argument ArgNo to be non-null.

Definition at line 2719 of file CGCall.cpp.

References clang::Decl::getAttr(), clang::Type::isAnyPointerType(), clang::Type::isBlockPointerType(), and clang::Decl::specific_attrs().

◆ GetReturnType()

static CanQualType GetReturnType ( QualType  RetTy)
static

◆ getTypeExpansion()

static std::unique_ptr< TypeExpansion > getTypeExpansion ( QualType  Ty,
const ASTContext Context 
)
static

◆ hasInAllocaArgs()

static bool hasInAllocaArgs ( CodeGenModule CGM,
CallingConv  ExplicitCC,
ArrayRef< QualType ArgTypes 
)
static

◆ HasStrictReturn()

static bool HasStrictReturn ( const CodeGenModule Module,
QualType  RetTy,
const Decl TargetDecl 
)
static

Definition at line 1800 of file CGCall.cpp.

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

◆ IsArgumentMaybeUndef()

static bool IsArgumentMaybeUndef ( const Decl TargetDecl,
unsigned  NumRequiredArgs,
unsigned  ArgNo 
)
static

Check if the argument of a function has maybe_undef attribute.

Definition at line 2089 of file CGCall.cpp.

References clang::Decl::hasAttr().

◆ isInAllocaArgument()

static bool isInAllocaArgument ( CGCXXABI ABI,
QualType  type 
)
static

◆ isObjCMethodWithTypeParams()

static bool isObjCMethodWithTypeParams ( const ObjCMethodDecl method)
static

Definition at line 4218 of file CGCall.cpp.

References clang::Decl::getDeclContext().

◆ isProvablyNull()

static bool isProvablyNull ( llvm::Value addr)
static

Definition at line 3905 of file CGCall.cpp.

Referenced by emitWriteback(), and emitWritebackArg().

◆ maybeGetUnaryAddrOfOperand()

static const Expr * maybeGetUnaryAddrOfOperand ( const Expr E)
static

Definition at line 3993 of file CGCall.cpp.

References clang::Expr::IgnoreParens().

Referenced by emitWritebackArg().

◆ setBitRange() [1/2]

static void setBitRange ( SmallVectorImpl< uint64_t > &  Bits,
int  BitOffset,
int  BitWidth,
int  CharWidth 
)
static

Definition at line 3382 of file CGCall.cpp.

References Used.

Referenced by setBitRange(), and setUsedBits().

◆ setBitRange() [2/2]

static void setBitRange ( SmallVectorImpl< uint64_t > &  Bits,
int  StorageOffset,
int  StorageSize,
int  BitOffset,
int  BitWidth,
int  CharWidth,
bool  BigEndian 
)
static

Definition at line 3413 of file CGCall.cpp.

References setBitRange(), and V.

◆ setCUDAKernelCallingConvention()

static void setCUDAKernelCallingConvention ( CanQualType FTy,
CodeGenModule CGM,
const FunctionDecl FD 
)
static

◆ setUsedBits() [1/3]

static void setUsedBits ( CodeGenModule CGM,
QualType  QTy,
int  Offset,
SmallVectorImpl< uint64_t > &  Bits 
)
static

◆ setUsedBits() [2/3]

static void setUsedBits ( CodeGenModule CGM,
const ConstantArrayType ATy,
int  Offset,
SmallVectorImpl< uint64_t > &  Bits 
)
static

◆ setUsedBits() [3/3]

static void setUsedBits ( CodeGenModule CGM,
const RecordType RTy,
int  Offset,
SmallVectorImpl< uint64_t > &  Bits 
)
static

◆ tryEmitFusedAutoreleaseOfResult()

static llvm::Value * tryEmitFusedAutoreleaseOfResult ( CodeGenFunction CGF,
llvm::Value result 
)
static

◆ tryRemoveRetainOfSelf()

static llvm::Value * tryRemoveRetainOfSelf ( CodeGenFunction CGF,
llvm::Value result 
)
static