LLVM API Documentation

Public Types | Public Member Functions | Public Attributes | Friends
llvm::LLVMContext Class Reference

#include <LLVMContext.h>

Collaboration diagram for llvm::LLVMContext:
Collaboration graph
[legend]

List of all members.

Public Types

enum  {
  MD_dbg = 0, MD_tbaa = 1, MD_prof = 2, MD_fpmath = 3,
  MD_range = 4, MD_tbaa_struct = 5, MD_invariant_load = 6, MD_alias_scope = 7,
  MD_noalias = 8, MD_nontemporal = 9, MD_mem_parallel_loop_access = 10, MD_nonnull = 11
}
typedef void(* InlineAsmDiagHandlerTy )(const SMDiagnostic &, void *Context, unsigned LocCookie)
typedef void(* DiagnosticHandlerTy )(const DiagnosticInfo &DI, void *Context)
typedef void(* YieldCallbackTy )(LLVMContext *Context, void *OpaqueHandle)

Public Member Functions

 LLVMContext ()
 ~LLVMContext ()
unsigned getMDKindID (StringRef Name) const
 getMDKindID - Return a unique non-zero ID for the specified metadata kind.
void getMDKindNames (SmallVectorImpl< StringRef > &Result) const
void setInlineAsmDiagnosticHandler (InlineAsmDiagHandlerTy DiagHandler, void *DiagContext=nullptr)
InlineAsmDiagHandlerTy getInlineAsmDiagnosticHandler () const
void * getInlineAsmDiagnosticContext () const
void setDiagnosticHandler (DiagnosticHandlerTy DiagHandler, void *DiagContext=nullptr, bool RespectFilters=false)
DiagnosticHandlerTy getDiagnosticHandler () const
void * getDiagnosticContext () const
void diagnose (const DiagnosticInfo &DI)
 Report a message to the currently installed diagnostic handler.
void setYieldCallback (YieldCallbackTy Callback, void *OpaqueHandle)
 Registers a yield callback with the given context.
void yield ()
 Calls the yield callback (if applicable).
void emitError (unsigned LocCookie, const Twine &ErrorStr)
void emitError (const Instruction *I, const Twine &ErrorStr)
void emitError (const Twine &ErrorStr)
template<typename ValT , typename Base , ValTBase::* Mem>
ValT getOption () const
 Query for a debug option's value.

Public Attributes

LLVMContextImpl *const pImpl

Friends

class Module

Detailed Description

This is an important class for using LLVM in a threaded context. It (opaquely) owns and manages the core "global" data of LLVM's core infrastructure, including the type and constant uniquing tables. LLVMContext itself provides no locking guarantees, so you should be careful to have one context per thread.

Definition at line 41 of file LLVMContext.h.


Member Typedef Documentation

typedef void(* llvm::LLVMContext::DiagnosticHandlerTy)(const DiagnosticInfo &DI, void *Context)

Defines the type of a diagnostic handler.

See also:
LLVMContext::setDiagnosticHandler.
LLVMContext::diagnose.

Definition at line 79 of file LLVMContext.h.

typedef void(* llvm::LLVMContext::InlineAsmDiagHandlerTy)(const SMDiagnostic &, void *Context, unsigned LocCookie)

Definition at line 73 of file LLVMContext.h.

typedef void(* llvm::LLVMContext::YieldCallbackTy)(LLVMContext *Context, void *OpaqueHandle)

Defines the type of a yield callback.

See also:
LLVMContext::setYieldCallback.

Definition at line 83 of file LLVMContext.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
MD_dbg 
MD_tbaa 
MD_prof 
MD_fpmath 
MD_range 
MD_tbaa_struct 
MD_invariant_load 
MD_alias_scope 
MD_noalias 
MD_nontemporal 
MD_mem_parallel_loop_access 
MD_nonnull 

Definition at line 49 of file LLVMContext.h.


Constructor & Destructor Documentation

Definition at line 97 of file LLVMContext.cpp.

References pImpl.


Member Function Documentation

Report a message to the currently installed diagnostic handler.

This function returns, in particular in the case of error reporting (DI.Severity == DS_Error), so the caller should leave the compilation process in a self-consistent state, even though the generated code need not be correct.

The diagnostic message will be implicitly prefixed with a severity keyword according to DI.getSeverity(), i.e., "error: " for DS_Error, "warning: " for DS_Warning, and "note: " for DS_Note.

Definition at line 191 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::DiagnosticContext, llvm::LLVMContextImpl::DiagnosticHandler, llvm::DS_Error, llvm::DS_Note, llvm::DS_Remark, llvm::DS_Warning, llvm::errs(), llvm::raw_ostream::flush(), llvm::DiagnosticInfo::getSeverity(), isDiagnosticEnabled(), pImpl, llvm::DiagnosticInfo::print(), and llvm::LLVMContextImpl::RespectDiagnosticFilters.

Referenced by emitError(), llvm::emitLoopInterleaveWarning(), llvm::emitLoopVectorizeWarning(), llvm::emitOptimizationRemark(), llvm::emitOptimizationRemarkAnalysis(), llvm::emitOptimizationRemarkMissed(), llvm::Linker::Linker(), llvm::AMDGPUTargetLowering::LowerCall(), llvm::AMDGPUTargetLowering::LowerGlobalAddress(), llvm::sampleprof::SampleProfileReader::reportParseError(), llvm::PEI::runOnMachineFunction(), and llvm::UpgradeDebugInfo().

void LLVMContext::emitError ( unsigned  LocCookie,
const Twine ErrorStr 
)

emitError - Emit an error message to the currently installed error handler with optional location information. This function returns, so code should be prepared to drop the erroneous construct on the floor and "not crash". The generated code need not be correct. The error message will be implicitly prefixed with "error: " and should not end with a ".".

Definition at line 224 of file LLVMContext.cpp.

References diagnose().

Referenced by diagnosePossiblyInvalidConstraint(), llvm::SIRegisterInfo::eliminateFrameIndex(), EmitGCCInlineAsmStr(), EmitMSInlineAsmStr(), llvm::SIInstrInfo::loadRegFromStackSlot(), llvm::SIInstrInfo::storeRegToStackSlot(), and llvm::TargetLowering::verifyReturnAddressArgumentIsConstant().

void LLVMContext::emitError ( const Instruction I,
const Twine ErrorStr 
)

Definition at line 162 of file LLVMContext.cpp.

References diagnose().

void LLVMContext::emitError ( const Twine ErrorStr)

Definition at line 158 of file LLVMContext.cpp.

References diagnose().

getDiagnosticContext - Return the diagnostic context set by setDiagnosticContext.

Definition at line 143 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::DiagnosticContext, and pImpl.

getDiagnosticHandler - Return the diagnostic handler set by setDiagnosticHandler.

Definition at line 139 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::DiagnosticHandler, and pImpl.

getInlineAsmDiagnosticContext - Return the diagnostic context set by setInlineAsmDiagnosticHandler.

Definition at line 127 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::InlineAsmDiagContext, and pImpl.

getInlineAsmDiagnosticHandler - Return the diagnostic handler set by setInlineAsmDiagnosticHandler.

Definition at line 121 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::InlineAsmDiagHandler, and pImpl.

getMDKindID - Return a unique non-zero ID for the specified metadata kind.

getMDKindID - Return a unique non-zero ID for the specified metadata kind. This ID is uniqued across modules in the current LLVMContext.

Definition at line 233 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::CustomMDKindNames, llvm::StringRef::front(), llvm::StringMap< ValueTy, AllocatorTy >::insert(), llvm::LibFunc::isdigit, pImpl, and llvm::StringMapImpl::size().

Referenced by llvm::Module::getMDKindID(), and LLVMContext().

getMDKindNames - Populate client supplied SmallVector with the name for custom metadata IDs registered in this LLVMContext.

getHandlerNames - Populate client supplied smallvector using custome metadata name and ID.

Definition at line 246 of file LLVMContext.cpp.

References llvm::StringMap< ValueTy, AllocatorTy >::begin(), llvm::LLVMContextImpl::CustomMDKindNames, llvm::StringMap< ValueTy, AllocatorTy >::end(), I, pImpl, llvm::SmallVectorImpl< T >::resize(), and llvm::StringMapImpl::size().

Referenced by llvm::Module::getMDKindNames(), and llvm::AssemblyWriter::printInstruction().

template<typename ValT , typename Base , ValTBase::* Mem>
ValT llvm::LLVMContext::getOption ( ) const [inline]

Query for a debug option's value.

This function returns typed data populated from command line parsing.

Definition at line 174 of file LLVMContext.h.

References llvm::OptionRegistry::instance().

void LLVMContext::setDiagnosticHandler ( DiagnosticHandlerTy  DiagHandler,
void *  DiagContext = nullptr,
bool  RespectFilters = false 
)

setDiagnosticHandler - This method sets a handler that is invoked when the backend needs to report anything to the user. The first argument is a function pointer and the second is a context pointer that gets passed into the DiagHandler. The third argument should be set to true if the handler only expects enabled diagnostics.

LLVMContext doesn't take ownership or interpret either of these pointers.

Definition at line 131 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::DiagnosticContext, llvm::LLVMContextImpl::DiagnosticHandler, pImpl, and llvm::LLVMContextImpl::RespectDiagnosticFilters.

void LLVMContext::setInlineAsmDiagnosticHandler ( InlineAsmDiagHandlerTy  DiagHandler,
void *  DiagContext = nullptr 
)

setInlineAsmDiagnosticHandler - This method sets a handler that is invoked when problems with inline asm are detected by the backend. The first argument is a function pointer and the second is a context pointer that gets passed into the DiagHandler.

LLVMContext doesn't take ownership or interpret either of these pointers.

Definition at line 112 of file LLVMContext.cpp.

References llvm::LLVMContextImpl::InlineAsmDiagContext, llvm::LLVMContextImpl::InlineAsmDiagHandler, and pImpl.

void LLVMContext::setYieldCallback ( YieldCallbackTy  Callback,
void *  OpaqueHandle 
)

Registers a yield callback with the given context.

The yield callback function may be called by LLVM to transfer control back to the client that invoked the LLVM compilation. This can be used to yield control of the thread, or perform periodic work needed by the client. There is no guaranteed frequency at which callbacks must occur; in fact, the client is not guaranteed to ever receive this callback. It is at the sole discretion of LLVM to do so and only if it can guarantee that suspending the thread won't block any forward progress in other LLVM contexts in the same process.

At a suspend point, the state of the current LLVM context is intentionally undefined. No assumptions about it can or should be made. Only LLVM context API calls that explicitly state that they can be used during a yield callback are allowed to be used. Any other API calls into the context are not supported until the yield callback function returns control to LLVM. Other LLVM contexts are unaffected by this restriction.

Definition at line 147 of file LLVMContext.cpp.

References pImpl, llvm::LLVMContextImpl::YieldCallback, and llvm::LLVMContextImpl::YieldOpaqueHandle.

Calls the yield callback (if applicable).

This transfers control of the current thread back to the client, which may suspend the current thread. Only call this method when LLVM doesn't hold any global mutex or cannot block the execution in another LLVM context.

Definition at line 153 of file LLVMContext.cpp.

References pImpl, llvm::LLVMContextImpl::YieldCallback, and llvm::LLVMContextImpl::YieldOpaqueHandle.

Referenced by llvm::legacy::FunctionPassManagerImpl::run(), llvm::legacy::PassManagerImpl::run(), llvm::ModulePassManager::run(), llvm::FunctionPassManager::run(), and llvm::LPPassManager::runOnFunction().


Friends And Related Function Documentation

friend class Module [friend]

Definition at line 190 of file LLVMContext.h.


Member Data Documentation

Definition at line 43 of file LLVMContext.h.

Referenced by clearGarbage(), llvm::DILocation::computeNewDiscriminator(), llvm::StructType::create(), llvm::ConstantAggregateZero::destroyConstant(), llvm::ConstantArray::destroyConstant(), llvm::ConstantStruct::destroyConstant(), llvm::ConstantVector::destroyConstant(), llvm::ConstantPointerNull::destroyConstant(), llvm::ConstantDataSequential::destroyConstant(), llvm::BlockAddress::destroyConstant(), llvm::ConstantExpr::destroyConstant(), llvm::UndefValue::destroyConstant(), diagnose(), llvm::Instruction::dropUnknownMetadata(), llvm::IntegerType::get(), llvm::InlineAsm::get(), llvm::ConstantInt::get(), llvm::FunctionType::get(), llvm::MetadataAsValue::get(), llvm::Attribute::get(), llvm::AttributeSetNode::get(), llvm::ValueAsMetadata::get(), llvm::StructType::get(), llvm::ConstantFP::get(), llvm::ConstantAggregateZero::get(), llvm::ArrayType::get(), llvm::ConstantArray::get(), llvm::VectorType::get(), llvm::ConstantStruct::get(), llvm::MDString::get(), llvm::ConstantVector::get(), llvm::PointerType::get(), llvm::ConstantPointerNull::get(), llvm::BlockAddress::get(), llvm::ConstantExpr::get(), llvm::UndefValue::get(), getDiagnosticContext(), getDiagnosticHandler(), llvm::Type::getDoubleTy(), llvm::ConstantExpr::getExtractElement(), llvm::ConstantExpr::getExtractValue(), llvm::ConstantInt::getFalse(), llvm::ConstantExpr::getFCmp(), llvm::Type::getFloatTy(), getFoldedCast(), llvm::Type::getFP128Ty(), llvm::ConstantExpr::getGetElementPtr(), llvm::Type::getHalfTy(), llvm::ConstantExpr::getICmp(), llvm::MetadataAsValue::getIfExists(), llvm::ValueAsMetadata::getIfExists(), llvm::ConstantDataSequential::getImpl(), getInlineAsmDiagnosticContext(), getInlineAsmDiagnosticHandler(), llvm::ConstantExpr::getInsertElement(), llvm::ConstantExpr::getInsertValue(), llvm::Type::getInt16Ty(), llvm::Type::getInt1Ty(), llvm::Type::getInt32Ty(), llvm::Type::getInt64Ty(), llvm::Type::getInt8Ty(), llvm::Function::getIntrinsicID(), llvm::Type::getLabelTy(), getMDKindID(), getMDKindNames(), llvm::MDNode::getMDNode(), llvm::Type::getMetadataTy(), llvm::Type::getPPC_FP128Ty(), llvm::Function::getPrefixData(), llvm::Function::getPrologueData(), llvm::ConstantExpr::getSelect(), llvm::ConstantExpr::getShuffleVector(), llvm::ConstantInt::getTrue(), llvm::Module::getTypeByName(), llvm::Type::getVoidTy(), llvm::Type::getX86_FP80Ty(), llvm::Type::getX86_MMXTy(), llvm::ValueAsMetadata::handleDeletion(), llvm::BlockAddress::lookup(), llvm::BlockAddress::replaceUsesOfWithOnConstant(), llvm::StructType::setBody(), setDiagnosticHandler(), setInlineAsmDiagnosticHandler(), llvm::Instruction::setMetadata(), llvm::Value::setName(), llvm::StructType::setName(), llvm::Function::setPrefixData(), llvm::Function::setPrologueData(), setYieldCallback(), llvm::MDNode::storeDistinctInContext(), llvm::ValueHandleBase::ValueIsDeleted(), llvm::ValueHandleBase::ValueIsRAUWd(), yield(), llvm::Function::~Function(), and ~LLVMContext().


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