class LLVMContextImpl;
class StringRef;
class Instruction;
+class Module;
template <typename T> class SmallVectorImpl;
/// This is an important class for using LLVM in a threaded context. It
/// LLVMContext itself provides no locking guarantees, so you should be careful
/// to have one context per thread.
class LLVMContext {
- // DO NOT IMPLEMENT
- LLVMContext(LLVMContext&);
- void operator=(LLVMContext&);
-
public:
LLVMContextImpl *const pImpl;
LLVMContext();
// Pinned metadata names, which always have the same value. This is a
// compile-time performance optimization, not a correctness optimization.
enum {
- MD_dbg = 0 // "dbg"
+ MD_dbg = 0, // "dbg"
+ MD_tbaa = 1 // "tbaa"
};
/// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
unsigned getMDKindID(StringRef Name) const;
/// getMDKindNames - Populate client supplied SmallVector with the name for
- /// custom metadata IDs registered in this LLVMContext. ID #0 is not used,
- /// so it is filled in as an empty string.
+ /// custom metadata IDs registered in this LLVMContext.
void getMDKindNames(SmallVectorImpl<StringRef> &Result) const;
/// setInlineAsmDiagnosticHandler - This method sets a handler that is invoked
void emitError(unsigned LocCookie, StringRef ErrorStr);
void emitError(const Instruction *I, StringRef ErrorStr);
void emitError(StringRef ErrorStr);
+
+private:
+ // DO NOT IMPLEMENT
+ LLVMContext(LLVMContext&);
+ void operator=(LLVMContext&);
+
+ /// addModule - Register a module as being instantiated in this context. If
+ /// the context is deleted, the module will be deleted as well.
+ void addModule(Module*);
+
+ /// removeModule - Unregister a module from this context.
+ void removeModule(Module*);
+
+ // Module needs access to the add/removeModule methods.
+ friend class Module;
};
/// getGlobalContext - Returns a global context. This is for LLVM clients that