clang  6.0.0svn
Classes | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
clang::CodeGen::ConstantEmitter Class Reference

#include "/opt/doxygen-docs/src/llvm/tools/clang/lib/CodeGen/ConstantEmitter.h"

Collaboration diagram for clang::CodeGen::ConstantEmitter:
Collaboration graph
[legend]

Public Member Functions

 ConstantEmitter (CodeGenModule &CGM, CodeGenFunction *CGF=nullptr)
 
 ConstantEmitter (CodeGenFunction &CGF)
 Initialize this emission in the context of the given function. More...
 
 ConstantEmitter (const ConstantEmitter &other)=delete
 
ConstantEmitteroperator= (const ConstantEmitter &other)=delete
 
 ~ConstantEmitter ()
 
bool isAbstract () const
 Is the current emission context abstract? More...
 
llvm::Constant * tryEmitForInitializer (const VarDecl &D)
 Try to emit the initiaizer of the given declaration as an abstract constant. More...
 
llvm::Constant * tryEmitForInitializer (const Expr *E, LangAS destAddrSpace, QualType destType)
 
llvm::Constant * emitForInitializer (const APValue &value, LangAS destAddrSpace, QualType destType)
 
void finalize (llvm::GlobalVariable *global)
 
llvm::Constant * tryEmitAbstractForInitializer (const VarDecl &D)
 Try to emit the initializer of the given declaration as an abstract constant. More...
 
llvm::Constant * emitAbstract (const Expr *E, QualType T)
 Emit the result of the given expression as an abstract constant, asserting that it succeeded. More...
 
llvm::Constant * emitAbstract (SourceLocation loc, const APValue &value, QualType T)
 
llvm::Constant * tryEmitAbstract (const Expr *E, QualType T)
 Try to emit the result of the given expression as an abstract constant. More...
 
llvm::Constant * tryEmitAbstractForMemory (const Expr *E, QualType T)
 
llvm::Constant * tryEmitAbstract (const APValue &value, QualType T)
 
llvm::Constant * tryEmitAbstractForMemory (const APValue &value, QualType T)
 
llvm::Constant * emitNullForMemory (QualType T)
 
llvm::Constant * emitForMemory (llvm::Constant *C, QualType T)
 
llvm::Constant * tryEmitPrivateForVarInit (const VarDecl &D)
 
llvm::Constant * tryEmitPrivate (const Expr *E, QualType T)
 
llvm::Constant * tryEmitPrivateForMemory (const Expr *E, QualType T)
 
llvm::Constant * tryEmitPrivate (const APValue &value, QualType T)
 
llvm::Constant * tryEmitPrivateForMemory (const APValue &value, QualType T)
 
llvm::GlobalValue * getCurrentAddrPrivate ()
 Get the address of the current location. More...
 
void registerCurrentAddrPrivate (llvm::Constant *signal, llvm::GlobalValue *placeholder)
 Register a 'signal' value with the emitter to inform it where to resolve a placeholder. More...
 

Static Public Member Functions

static llvm::Constant * emitNullForMemory (CodeGenModule &CGM, QualType T)
 
static llvm::Constant * emitForMemory (CodeGenModule &CGM, llvm::Constant *C, QualType T)
 

Public Attributes

CodeGenModuleCGM
 
CodeGenFunctionCGF
 

Detailed Description

Definition at line 24 of file ConstantEmitter.h.

Constructor & Destructor Documentation

◆ ConstantEmitter() [1/3]

clang::CodeGen::ConstantEmitter::ConstantEmitter ( CodeGenModule CGM,
CodeGenFunction CGF = nullptr 
)
inline

Definition at line 49 of file ConstantEmitter.h.

Referenced by ConstantEmitter().

◆ ConstantEmitter() [2/3]

clang::CodeGen::ConstantEmitter::ConstantEmitter ( CodeGenFunction CGF)
inline

Initialize this emission in the context of the given function.

Use this if the expression might contain contextaul references like block addresses or PredefinedExprs.

Definition at line 55 of file ConstantEmitter.h.

References ConstantEmitter(), operator=(), and ~ConstantEmitter().

◆ ConstantEmitter() [3/3]

clang::CodeGen::ConstantEmitter::ConstantEmitter ( const ConstantEmitter other)
delete

◆ ~ConstantEmitter()

ConstantEmitter::~ConstantEmitter ( )

Definition at line 1373 of file CGExprConstant.cpp.

Referenced by ConstantEmitter().

Member Function Documentation

◆ emitAbstract() [1/2]

llvm::Constant * ConstantEmitter::emitAbstract ( const Expr E,
QualType  T 
)

Emit the result of the given expression as an abstract constant, asserting that it succeeded.

This is only safe to do when the expression is known to be a constant expression with either a fairly simple type or a known simple form.

Definition at line 1155 of file CGExprConstant.cpp.

References clang::CodeGen::CodeGenModule::EmitNullConstant(), clang::CodeGen::CodeGenModule::Error(), clang::Expr::getExprLoc(), and clang::CodeGen::state.

Referenced by clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(), and clang::CodeGen::CodeGenFunction::tryEmitAsConstant().

◆ emitAbstract() [2/2]

llvm::Constant * ConstantEmitter::emitAbstract ( SourceLocation  loc,
const APValue value,
QualType  T 
)

◆ emitForInitializer()

llvm::Constant * ConstantEmitter::emitForInitializer ( const APValue value,
LangAS  destAddrSpace,
QualType  destType 
)

Definition at line 1193 of file CGExprConstant.cpp.

◆ emitForMemory() [1/2]

llvm::Constant* clang::CodeGen::ConstantEmitter::emitForMemory ( llvm::Constant *  C,
QualType  T 
)
inline

◆ emitForMemory() [2/2]

llvm::Constant * ConstantEmitter::emitForMemory ( CodeGenModule CGM,
llvm::Constant *  C,
QualType  T 
)
static

◆ emitNullForMemory() [1/2]

llvm::Constant* clang::CodeGen::ConstantEmitter::emitNullForMemory ( QualType  T)
inline

◆ emitNullForMemory() [2/2]

llvm::Constant * ConstantEmitter::emitNullForMemory ( CodeGenModule CGM,
QualType  T 
)
static

◆ finalize()

void ConstantEmitter::finalize ( llvm::GlobalVariable *  global)

◆ getCurrentAddrPrivate()

llvm::GlobalValue * ConstantEmitter::getCurrentAddrPrivate ( )

Get the address of the current location.

This is a constant that will resolve, after finalization, to the address of the 'signal' value that is registered with the emitter later.

Definition at line 1202 of file CGExprConstant.cpp.

References clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getModule(), clang::ASTContext::getTargetAddressSpace(), and clang::CodeGen::CodeGenTypeCache::Int8Ty.

Referenced by emitForMemory().

◆ isAbstract()

bool clang::CodeGen::ConstantEmitter::isAbstract ( ) const
inline

Is the current emission context abstract?

Definition at line 64 of file ConstantEmitter.h.

References tryEmitForInitializer().

◆ operator=()

ConstantEmitter& clang::CodeGen::ConstantEmitter::operator= ( const ConstantEmitter other)
delete

Referenced by ConstantEmitter().

◆ registerCurrentAddrPrivate()

void ConstantEmitter::registerCurrentAddrPrivate ( llvm::Constant *  signal,
llvm::GlobalValue *  placeholder 
)

Register a 'signal' value with the emitter to inform it where to resolve a placeholder.

The signal value must be unique in the initializer; it might, for example, be the address of a global that refers to the current-address value in its own initializer.

Uses of the placeholder must be properly anchored before finalizing the emitter, e.g. by being installed as the initializer of a global variable. That is, it must be possible to replaceAllUsesWith the placeholder with the proper address of the signal.

Definition at line 1222 of file CGExprConstant.cpp.

References clang::CodeGen::Base, clang::ast_matchers::expr, clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::Type.

Referenced by emitForMemory().

◆ tryEmitAbstract() [1/2]

llvm::Constant * ConstantEmitter::tryEmitAbstract ( const Expr E,
QualType  T 
)

Try to emit the result of the given expression as an abstract constant.

Definition at line 1141 of file CGExprConstant.cpp.

References clang::CodeGen::state.

Referenced by createReferenceTemporary(), and EmitCXXNewAllocSize().

◆ tryEmitAbstract() [2/2]

llvm::Constant * ConstantEmitter::tryEmitAbstract ( const APValue value,
QualType  T 
)

Definition at line 1148 of file CGExprConstant.cpp.

References clang::CodeGen::state.

◆ tryEmitAbstractForInitializer()

llvm::Constant * ConstantEmitter::tryEmitAbstractForInitializer ( const VarDecl D)

Try to emit the initializer of the given declaration as an abstract constant.

Definition at line 1134 of file CGExprConstant.cpp.

References clang::CodeGen::state.

Referenced by clang::CodeGen::CodeGenFunction::EmitAutoVarInit(), and tryCaptureAsConstant().

◆ tryEmitAbstractForMemory() [1/2]

llvm::Constant * ConstantEmitter::tryEmitAbstractForMemory ( const Expr E,
QualType  T 
)

Definition at line 1429 of file CGExprConstant.cpp.

References getNonMemoryType().

◆ tryEmitAbstractForMemory() [2/2]

llvm::Constant * ConstantEmitter::tryEmitAbstractForMemory ( const APValue value,
QualType  T 
)

Definition at line 1436 of file CGExprConstant.cpp.

References getNonMemoryType().

◆ tryEmitForInitializer() [1/2]

llvm::Constant * ConstantEmitter::tryEmitForInitializer ( const VarDecl D)

Try to emit the initiaizer of the given declaration as an abstract constant.

If this succeeds, the emission must be finalized.

Definition at line 1181 of file CGExprConstant.cpp.

References clang::QualType::getAddressSpace(), and clang::ValueDecl::getType().

Referenced by clang::CodeGen::CodeGenFunction::AddInitializerToStaticVarDecl(), isAbstract(), and clang::CodeGen::CodeGenModule::isTypeConstant().

◆ tryEmitForInitializer() [2/2]

llvm::Constant * ConstantEmitter::tryEmitForInitializer ( const Expr E,
LangAS  destAddrSpace,
QualType  destType 
)

Definition at line 1186 of file CGExprConstant.cpp.

◆ tryEmitPrivate() [1/2]

llvm::Constant * ConstantEmitter::tryEmitPrivate ( const Expr E,
QualType  T 
)

◆ tryEmitPrivate() [2/2]

llvm::Constant * ConstantEmitter::tryEmitPrivate ( const APValue value,
QualType  T 
)

◆ tryEmitPrivateForMemory() [1/2]

llvm::Constant * ConstantEmitter::tryEmitPrivateForMemory ( const Expr E,
QualType  T 
)

Definition at line 1443 of file CGExprConstant.cpp.

References getNonMemoryType().

Referenced by emitForMemory().

◆ tryEmitPrivateForMemory() [2/2]

llvm::Constant * ConstantEmitter::tryEmitPrivateForMemory ( const APValue value,
QualType  T 
)

Definition at line 1450 of file CGExprConstant.cpp.

References getNonMemoryType().

◆ tryEmitPrivateForVarInit()

llvm::Constant * ConstantEmitter::tryEmitPrivateForVarInit ( const VarDecl D)

Member Data Documentation

◆ CGF

CodeGenFunction* clang::CodeGen::ConstantEmitter::CGF

Definition at line 27 of file ConstantEmitter.h.

◆ CGM

CodeGenModule& clang::CodeGen::ConstantEmitter::CGM

Definition at line 26 of file ConstantEmitter.h.

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


The documentation for this class was generated from the following files: