X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FLLVMContext.h;h=e5b77777d9f01d98eff5e58ee4df5fa959dc9dae;hb=9a376a8003c486054ea4d7c2465cb90b501c9893;hp=7cb6579aef661a4168254df8dd0f2f6329279117;hpb=5d809119834a1aa8170e8341ee883e69e5a6bbd1;p=oota-llvm.git diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h index 7cb6579aef6..e5b77777d9f 100644 --- a/include/llvm/LLVMContext.h +++ b/include/llvm/LLVMContext.h @@ -20,6 +20,7 @@ namespace llvm { class LLVMContextImpl; class StringRef; class Instruction; +class Module; template class SmallVectorImpl; /// This is an important class for using LLVM in a threaded context. It @@ -28,10 +29,6 @@ template class SmallVectorImpl; /// 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(); @@ -40,7 +37,8 @@ public: // 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. @@ -77,6 +75,21 @@ public: 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