1
//===-- llvm/LLVMContext.h - Class for managing "global" state --*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file declares LLVMContext, a container of "global" state in LLVM, such
11
// as the global type and constant uniquing tables.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_LLVMCONTEXT_H
16
#define LLVM_LLVMCONTEXT_H
20
class LLVMContextImpl;
23
template <typename T> class SmallVectorImpl;
25
/// This is an important class for using LLVM in a threaded context. It
26
/// (opaquely) owns and manages the core "global" data of LLVM's core
27
/// infrastructure, including the type and constant uniquing tables.
28
/// LLVMContext itself provides no locking guarantees, so you should be careful
29
/// to have one context per thread.
32
LLVMContext(LLVMContext&);
33
void operator=(LLVMContext&);
36
LLVMContextImpl *const pImpl;
40
// Pinned metadata names, which always have the same value. This is a
41
// compile-time performance optimization, not a correctness optimization.
46
/// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
47
/// This ID is uniqued across modules in the current LLVMContext.
48
unsigned getMDKindID(StringRef Name) const;
50
/// getMDKindNames - Populate client supplied SmallVector with the name for
51
/// custom metadata IDs registered in this LLVMContext.
52
void getMDKindNames(SmallVectorImpl<StringRef> &Result) const;
54
/// setInlineAsmDiagnosticHandler - This method sets a handler that is invoked
55
/// when problems with inline asm are detected by the backend. The first
56
/// argument is a function pointer (of type SourceMgr::DiagHandlerTy) and the
57
/// second is a context pointer that gets passed into the DiagHandler.
59
/// LLVMContext doesn't take ownership or interpreter either of these
61
void setInlineAsmDiagnosticHandler(void *DiagHandler, void *DiagContext = 0);
63
/// getInlineAsmDiagnosticHandler - Return the diagnostic handler set by
64
/// setInlineAsmDiagnosticHandler.
65
void *getInlineAsmDiagnosticHandler() const;
67
/// getInlineAsmDiagnosticContext - Return the diagnostic context set by
68
/// setInlineAsmDiagnosticHandler.
69
void *getInlineAsmDiagnosticContext() const;
72
/// emitError - Emit an error message to the currently installed error handler
73
/// with optional location information. This function returns, so code should
74
/// be prepared to drop the erroneous construct on the floor and "not crash".
75
/// The generated code need not be correct. The error message will be
76
/// implicitly prefixed with "error: " and should not end with a ".".
77
void emitError(unsigned LocCookie, StringRef ErrorStr);
78
void emitError(const Instruction *I, StringRef ErrorStr);
79
void emitError(StringRef ErrorStr);
82
/// getGlobalContext - Returns a global context. This is for LLVM clients that
83
/// only care about operating on a single thread.
84
extern LLVMContext &getGlobalContext();