clang  8.0.0svn
Functions
CGDecl.cpp File Reference
#include "CGBlocks.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGDebugInfo.h"
#include "CGOpenCLRuntime.h"
#include "CGOpenMPRuntime.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "ConstantEmitter.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/Frontend/CodeGenOptions.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Type.h"
Include dependency graph for CGDecl.cpp:

Go to the source code of this file.

Functions

static std::string getStaticDeclName (CodeGenModule &CGM, const VarDecl &D)
 
static bool hasNontrivialDestruction (QualType T)
 hasNontrivialDestruction - Determine whether a type's destruction is non-trivial. More...
 
static void EmitAutoVarWithLifetime (CodeGenFunction &CGF, const VarDecl &var, Address addr, Qualifiers::ObjCLifetime lifetime)
 EmitAutoVarWithLifetime - Does the setup required for an automatic variable with lifetime. More...
 
static bool isAccessedBy (const VarDecl &var, const Stmt *s)
 
static bool isAccessedBy (const ValueDecl *decl, const Expr *e)
 
static bool tryEmitARCCopyWeakInit (CodeGenFunction &CGF, const LValue &destLV, const Expr *init)
 
static void drillIntoBlockVariable (CodeGenFunction &CGF, LValue &lvalue, const VarDecl *var)
 
static bool canEmitInitWithFewStoresAfterBZero (llvm::Constant *Init, unsigned &NumStores)
 Decide whether we can emit the non-zero parts of the specified initializer with equal or fewer than NumStores scalar stores. More...
 
static void emitStoresForInitAfterBZero (CodeGenModule &CGM, llvm::Constant *Init, Address Loc, bool isVolatile, CGBuilderTy &Builder)
 For inits that canEmitInitWithFewStoresAfterBZero returned true for, emit the scalar stores that would be required. More...
 
static bool shouldUseBZeroPlusStoresToInitialize (llvm::Constant *Init, uint64_t GlobalSize)
 Decide whether we should use bzero plus some stores to initialize a local variable instead of using a memcpy from a constant global. More...
 
static llvm::ValueshouldUseMemSetToInitialize (llvm::Constant *Init, uint64_t GlobalSize)
 Decide whether we should use memset to initialize a local variable instead of using a memcpy from a constant global. More...
 
static void emitStoresForConstant (CodeGenModule &CGM, const VarDecl &D, Address Loc, bool isVolatile, CGBuilderTy &Builder, llvm::Constant *constant)
 
static bool isCapturedBy (const VarDecl &Var, const Expr *E)
 Determines whether the given __block variable is potentially captured by the given expression. More...
 
static bool isCapturedBy (const VarDecl &Var, const Stmt *S)
 Determines whether the given __block variable is potentially captured by the given statement. More...
 
static void emitPartialArrayDestroy (CodeGenFunction &CGF, llvm::Value *begin, llvm::Value *end, QualType type, CharUnits elementAlign, CodeGenFunction::Destroyer *destroyer)
 Perform partial array destruction as if in an EH cleanup. More...
 

Function Documentation

◆ canEmitInitWithFewStoresAfterBZero()

static bool canEmitInitWithFewStoresAfterBZero ( llvm::Constant *  Init,
unsigned &  NumStores 
)
static

Decide whether we can emit the non-zero parts of the specified initializer with equal or fewer than NumStores scalar stores.

Definition at line 852 of file CGDecl.cpp.

Referenced by shouldUseBZeroPlusStoresToInitialize().

◆ drillIntoBlockVariable()

static void drillIntoBlockVariable ( CodeGenFunction CGF,
LValue lvalue,
const VarDecl var 
)
static

◆ EmitAutoVarWithLifetime()

static void EmitAutoVarWithLifetime ( CodeGenFunction CGF,
const VarDecl var,
Address  addr,
Qualifiers::ObjCLifetime  lifetime 
)
static

◆ emitPartialArrayDestroy()

static void emitPartialArrayDestroy ( CodeGenFunction CGF,
llvm::Value begin,
llvm::Value end,
QualType  type,
CharUnits  elementAlign,
CodeGenFunction::Destroyer *  destroyer 
)
static

◆ emitStoresForConstant()

static void emitStoresForConstant ( CodeGenModule CGM,
const VarDecl D,
Address  Loc,
bool  isVolatile,
CGBuilderTy Builder,
llvm::Constant *  constant 
)
static

◆ emitStoresForInitAfterBZero()

static void emitStoresForInitAfterBZero ( CodeGenModule CGM,
llvm::Constant *  Init,
Address  Loc,
bool  isVolatile,
CGBuilderTy Builder 
)
static

For inits that canEmitInitWithFewStoresAfterBZero returned true for, emit the scalar stores that would be required.

Definition at line 890 of file CGDecl.cpp.

References clang::CodeGen::CGBuilderTy::CreateConstInBoundsGEP2_32(), clang::CodeGen::CGBuilderTy::CreateStore(), and clang::CodeGen::CodeGenModule::getDataLayout().

Referenced by emitStoresForConstant().

◆ getStaticDeclName()

static std::string getStaticDeclName ( CodeGenModule CGM,
const VarDecl D 
)
static

◆ hasNontrivialDestruction()

static bool hasNontrivialDestruction ( QualType  T)
static

hasNontrivialDestruction - Determine whether a type's destruction is non-trivial.

If so, and the variable uses static initialization, we must register its destructor to run on exit.

Definition at line 303 of file CGDecl.cpp.

References clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), and clang::CXXRecordDecl::hasTrivialDestructor().

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

◆ isAccessedBy() [1/2]

static bool isAccessedBy ( const VarDecl var,
const Stmt s 
)
static

Definition at line 630 of file CGDecl.cpp.

Referenced by clang::CodeGen::CodeGenFunction::EmitScalarInit(), and isAccessedBy().

◆ isAccessedBy() [2/2]

static bool isAccessedBy ( const ValueDecl decl,
const Expr e 
)
static

Definition at line 655 of file CGDecl.cpp.

References clang::ast_matchers::decl, and isAccessedBy().

◆ isCapturedBy() [1/2]

static bool isCapturedBy ( const VarDecl Var,
const Expr E 
)
static

Determines whether the given __block variable is potentially captured by the given expression.

Definition at line 1336 of file CGDecl.cpp.

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

◆ isCapturedBy() [2/2]

static bool isCapturedBy ( const VarDecl Var,
const Stmt S 
)
static

Determines whether the given __block variable is potentially captured by the given statement.

Definition at line 1325 of file CGDecl.cpp.

◆ shouldUseBZeroPlusStoresToInitialize()

static bool shouldUseBZeroPlusStoresToInitialize ( llvm::Constant *  Init,
uint64_t  GlobalSize 
)
static

Decide whether we should use bzero plus some stores to initialize a local variable instead of using a memcpy from a constant global.

It is beneficial to use bzero if the global is all zeros, or mostly zeros and large.

Definition at line 936 of file CGDecl.cpp.

References canEmitInitWithFewStoresAfterBZero().

Referenced by emitStoresForConstant().

◆ shouldUseMemSetToInitialize()

static llvm::Value* shouldUseMemSetToInitialize ( llvm::Constant *  Init,
uint64_t  GlobalSize 
)
static

Decide whether we should use memset to initialize a local variable instead of using a memcpy from a constant global.

Assumes we've already decided to not user bzero. FIXME We could be more clever, as we are for bzero above, and generate memset followed by stores. It's unclear that's worth the effort.

Definition at line 957 of file CGDecl.cpp.

Referenced by emitStoresForConstant().

◆ tryEmitARCCopyWeakInit()

static bool tryEmitARCCopyWeakInit ( CodeGenFunction CGF,
const LValue destLV,
const Expr init 
)
static