clang
3.9.0
|
#include "CodeGenFunction.h"
#include "CGBlocks.h"
#include "CGCleanup.h"
#include "CGDebugInfo.h"
#include "CGOpenCLRuntime.h"
#include "CGOpenMPRuntime.h"
#include "CodeGenModule.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/IR/DataLayout.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Type.h"
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 | canEmitInitWithFewStoresAfterMemset (llvm::Constant *Init, unsigned &NumStores) |
canEmitInitWithFewStoresAfterMemset - Decide whether we can emit the non-zero parts of the specified initializer with equal or fewer than NumStores scalar stores. More... | |
static void | emitStoresForInitAfterMemset (llvm::Constant *Init, llvm::Value *Loc, bool isVolatile, CGBuilderTy &Builder) |
emitStoresForInitAfterMemset - For inits that canEmitInitWithFewStoresAfterMemset returned true for, emit the scalar stores that would be required. More... | |
static bool | shouldUseMemSetPlusStoresToInitialize (llvm::Constant *Init, uint64_t GlobalSize) |
shouldUseMemSetPlusStoresToInitialize - Decide whether we should use memset plus some stores to initialize a local variable instead of using a memcpy from a constant global. More... | |
static bool | shouldEmitLifetimeMarkers (const CodeGenOptions &CGOpts, const LangOptions &LangOpts) |
shouldEmitLifetimeMarkers - Decide whether we need emit the life-time markers. More... | |
static bool | isCapturedBy (const VarDecl &var, const Expr *e) |
Determines whether the given __block variable is potentially captured by the given expression. 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... | |
|
static |
canEmitInitWithFewStoresAfterMemset - Decide whether we can emit the non-zero parts of the specified initializer with equal or fewer than NumStores scalar stores.
Definition at line 802 of file CGDecl.cpp.
Referenced by shouldUseMemSetPlusStoresToInitialize().
|
static |
Definition at line 654 of file CGDecl.cpp.
References clang::CodeGen::CodeGenFunction::emitBlockByrefAddress(), clang::CodeGen::LValue::getAddress(), and clang::CodeGen::LValue::setAddress().
Referenced by clang::CodeGen::CodeGenFunction::EmitExprAsInit(), and clang::CodeGen::CodeGenFunction::EmitScalarInit().
|
static |
EmitAutoVarWithLifetime - Does the setup required for an automatic variable with lifetime.
Definition at line 536 of file CGDecl.cpp.
References clang::CodeGen::CodeGenFunction::destroyARCStrongImprecise, clang::CodeGen::CodeGenFunction::destroyARCStrongPrecise, clang::CodeGen::CodeGenFunction::destroyARCWeak, clang::CodeGen::EHCleanup, clang::CodeGen::CodeGenFunction::getARCCleanupKind(), clang::ValueDecl::getType(), clang::CodeGen::NormalAndEHCleanup, clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, and clang::CodeGen::CodeGenFunction::pushDestroy().
Referenced by clang::CodeGen::CodeGenFunction::EmitParmDecl().
|
static |
Perform partial array destruction as if in an EH cleanup.
Unlike emitArrayDestroy, the element type here may still be an array type.
Definition at line 1597 of file CGDecl.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::emitArrayDestroy(), clang::ASTContext::getAsArrayType(), clang::CodeGen::CodeGenFunction::getContext(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
|
static |
emitStoresForInitAfterMemset - For inits that canEmitInitWithFewStoresAfterMemset returned true for, emit the scalar stores that would be required.
Definition at line 841 of file CGDecl.cpp.
References clang::CodeGen::CGBuilderTy::CreateDefaultAlignedStore().
Referenced by clang::CodeGen::CodeGenFunction::EmitAutoVarInit().
|
static |
Definition at line 163 of file CGDecl.cpp.
References clang::CodeGen::CodeGenModule::getBlockMangledName(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getMangledName(), clang::NamedDecl::getNameAsString(), and clang::NamedDecl::isExternallyVisible().
Referenced by clang::CodeGen::CodeGenFunction::EmitAutoVarInit(), and clang::CodeGen::CodeGenModule::getOrCreateStaticVarDecl().
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 282 of file CGDecl.cpp.
References clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), and clang::CXXRecordDecl::hasTrivialDestructor().
Referenced by clang::CodeGen::CodeGenFunction::AddInitializerToStaticVarDecl().
Definition at line 572 of file CGDecl.cpp.
References clang::BlockDecl::captures(), and I.
Referenced by clang::CodeGen::CodeGenFunction::EmitScalarInit(), and isAccessedBy().
Definition at line 597 of file CGDecl.cpp.
References clang::ast_matchers::decl, and isAccessedBy().
Determines whether the given __block variable is potentially captured by the given expression.
Definition at line 1115 of file CGDecl.cpp.
References clang::CompoundStmt::body(), clang::BlockDecl::captures(), E, I, and clang::Expr::IgnoreParenCasts().
Referenced by clang::CodeGen::CodeGenFunction::EmitAutoVarInit().
|
static |
shouldEmitLifetimeMarkers - Decide whether we need emit the life-time markers.
Definition at line 912 of file CGDecl.cpp.
References clang::SanitizerSet::has(), and clang::LangOptions::Sanitize.
Referenced by clang::CodeGen::CodeGenFunction::EmitLifetimeStart().
|
static |
shouldUseMemSetPlusStoresToInitialize - Decide whether we should use memset plus some stores to initialize a local variable instead of using a memcpy from a constant global.
It is beneficial to use memset if the global is all zeros, or mostly zeros and large.
Definition at line 885 of file CGDecl.cpp.
References canEmitInitWithFewStoresAfterMemset().
Referenced by clang::CodeGen::CodeGenFunction::EmitAutoVarInit().
|
static |
Definition at line 604 of file CGDecl.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::ast_matchers::castExpr, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CodeGenFunction::EmitARCCopyWeak(), clang::CodeGen::CodeGenFunction::EmitARCMoveWeak(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getElementType(), clang::QualType::getObjCLifetime(), clang::Expr::getType(), clang::Expr::getValueKind(), clang::Expr::IgnoreParens(), clang::Qualifiers::OCL_Weak, clang::VK_LValue, and clang::VK_XValue.
Referenced by clang::CodeGen::CodeGenFunction::EmitScalarInit().