LLVM API Documentation
#include <LLVMContext.h>
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 } |
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) |
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) |
Public Attributes | |
LLVMContextImpl *const | pImpl |
Friends | |
class | Module |
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 40 of file LLVMContext.h.
typedef void(* llvm::LLVMContext::DiagnosticHandlerTy)(const DiagnosticInfo &DI, void *Context) |
Defines the type of a diagnostic handler.
Definition at line 75 of file LLVMContext.h.
typedef void(* llvm::LLVMContext::InlineAsmDiagHandlerTy)(const SMDiagnostic &, void *Context, unsigned LocCookie) |
Definition at line 69 of file LLVMContext.h.
typedef void(* llvm::LLVMContext::YieldCallbackTy)(LLVMContext *Context, void *OpaqueHandle) |
Defines the type of a yield callback.
Definition at line 79 of file LLVMContext.h.
anonymous enum |
MD_dbg | |
MD_tbaa | |
MD_prof | |
MD_fpmath | |
MD_range | |
MD_tbaa_struct | |
MD_invariant_load | |
MD_alias_scope | |
MD_noalias |
Definition at line 48 of file LLVMContext.h.
Definition at line 34 of file LLVMContext.cpp.
References getMDKindID(), MD_alias_scope, MD_dbg, MD_fpmath, MD_invariant_load, MD_noalias, MD_prof, MD_range, MD_tbaa, and MD_tbaa_struct.
Definition at line 80 of file LLVMContext.cpp.
References pImpl.
void LLVMContext::diagnose | ( | const DiagnosticInfo & | DI | ) |
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 148 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::DiagnosticContext, llvm::LLVMContextImpl::DiagnosticHandler, llvm::DK_OptimizationRemark, llvm::DK_OptimizationRemarkAnalysis, llvm::DK_OptimizationRemarkMissed, llvm::DS_Error, llvm::DS_Note, llvm::DS_Remark, llvm::DS_Warning, llvm::errs(), llvm::raw_ostream::flush(), llvm::DiagnosticInfo::getKind(), llvm::DiagnosticInfo::getSeverity(), pImpl, and llvm::DiagnosticInfo::print().
Referenced by emitError(), llvm::emitLoopInterleaveWarning(), llvm::emitLoopVectorizeWarning(), llvm::emitOptimizationRemark(), llvm::emitOptimizationRemarkAnalysis(), llvm::emitOptimizationRemarkMissed(), llvm::AMDGPUTargetLowering::LowerCall(), 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 198 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 143 of file LLVMContext.cpp.
References diagnose().
void LLVMContext::emitError | ( | const Twine & | ErrorStr | ) |
Definition at line 139 of file LLVMContext.cpp.
References diagnose().
void * LLVMContext::getDiagnosticContext | ( | ) | const |
getDiagnosticContext - Return the diagnostic context set by setDiagnosticContext.
Definition at line 124 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::DiagnosticContext, and pImpl.
getDiagnosticHandler - Return the diagnostic handler set by setDiagnosticHandler.
Definition at line 120 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::DiagnosticHandler, and pImpl.
void * LLVMContext::getInlineAsmDiagnosticContext | ( | ) | const |
getInlineAsmDiagnosticContext - Return the diagnostic context set by setInlineAsmDiagnosticHandler.
Definition at line 110 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::InlineAsmDiagContext, and pImpl.
getInlineAsmDiagnosticHandler - Return the diagnostic handler set by setInlineAsmDiagnosticHandler.
Definition at line 104 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::InlineAsmDiagHandler, and pImpl.
unsigned LLVMContext::getMDKindID | ( | StringRef | Name | ) | const |
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 226 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::CustomMDKindNames, llvm::StringMap< ValueTy, AllocatorTy >::GetOrCreateValue(), isValidName(), pImpl, and llvm::StringMapImpl::size().
Referenced by llvm::Module::getMDKindID(), and LLVMContext().
void LLVMContext::getMDKindNames | ( | SmallVectorImpl< StringRef > & | Names | ) | const |
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 237 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().
void LLVMContext::setDiagnosticHandler | ( | DiagnosticHandlerTy | DiagHandler, |
void * | DiagContext = nullptr |
||
) |
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.
LLVMContext doesn't take ownership or interpret either of these pointers.
Definition at line 114 of file LLVMContext.cpp.
References llvm::LLVMContextImpl::DiagnosticContext, llvm::LLVMContextImpl::DiagnosticHandler, and pImpl.
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 95 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 128 of file LLVMContext.cpp.
References pImpl, llvm::LLVMContextImpl::YieldCallback, and llvm::LLVMContextImpl::YieldOpaqueHandle.
void LLVMContext::yield | ( | ) |
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 134 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().
friend class Module [friend] |
Definition at line 176 of file LLVMContext.h.
Definition at line 42 of file LLVMContext.h.
Referenced by clearGarbage(), llvm::DILocation::computeNewDiscriminator(), llvm::StructType::create(), llvm::MDNode::deleteTemporary(), 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::MDString::get(), llvm::IntegerType::get(), llvm::DebugLoc::get(), llvm::InlineAsm::get(), llvm::ConstantInt::get(), llvm::FunctionType::get(), llvm::Attribute::get(), llvm::AttributeSetNode::get(), llvm::StructType::get(), llvm::ConstantFP::get(), llvm::ConstantAggregateZero::get(), llvm::ArrayType::get(), llvm::ConstantArray::get(), llvm::VectorType::get(), llvm::ConstantStruct::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::ConstantDataSequential::getImpl(), getInlineAsmDiagnosticContext(), getInlineAsmDiagnosticHandler(), llvm::DebugLoc::getInlinedAt(), 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::Type::getMetadataTy(), llvm::Type::getPPC_FP128Ty(), llvm::Function::getPrefixData(), llvm::DebugLoc::getScope(), llvm::DebugLoc::getScopeAndInlinedAt(), llvm::ConstantExpr::getSelect(), llvm::ConstantExpr::getShuffleVector(), llvm::ConstantInt::getTrue(), llvm::Module::getTypeByName(), llvm::Type::getVoidTy(), llvm::Type::getX86_FP80Ty(), llvm::Type::getX86_MMXTy(), llvm::BlockAddress::lookup(), llvm::BlockAddress::replaceUsesOfWithOnConstant(), llvm::StructType::setBody(), setDiagnosticHandler(), setInlineAsmDiagnosticHandler(), llvm::Instruction::setMetadata(), llvm::Value::setName(), llvm::StructType::setName(), llvm::Function::setPrefixData(), setYieldCallback(), llvm::ValueHandleBase::ValueIsDeleted(), llvm::ValueHandleBase::ValueIsRAUWd(), yield(), llvm::Function::~Function(), and ~LLVMContext().