diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-09-02 22:41:07 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-09-02 22:41:07 +0000 |
commit | 4becee113cc07d89a29c7fa7cb3b353635079315 (patch) | |
tree | 0e7396f7ef1129596fe1bf10d12c76d3b34f83b0 /lib/ExecutionEngine/MCJIT | |
parent | 41b6e327f7dedfb9d3020f60f6c6804efeb75b16 (diff) |
unique_ptrify passing the TargetMachine to ExecutionEngine::MCJITCtor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216988 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/MCJIT')
-rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.cpp | 12 | ||||
-rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.h | 8 |
2 files changed, 9 insertions, 11 deletions
diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index b114d487daa..2724f8c61ef 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -46,20 +46,20 @@ extern "C" void LLVMLinkInMCJIT() { ExecutionEngine *MCJIT::createJIT(std::unique_ptr<Module> M, std::string *ErrorStr, RTDyldMemoryManager *MemMgr, - TargetMachine *TM) { + std::unique_ptr<TargetMachine> TM) { // Try to register the program as a source of symbols to resolve against. // // FIXME: Don't do this here. sys::DynamicLibrary::LoadLibraryPermanently(nullptr, nullptr); - return new MCJIT(std::move(M), TM, + return new MCJIT(std::move(M), std::move(TM), MemMgr ? MemMgr : new SectionMemoryManager()); } -MCJIT::MCJIT(std::unique_ptr<Module> M, TargetMachine *tm, +MCJIT::MCJIT(std::unique_ptr<Module> M, std::unique_ptr<TargetMachine> tm, RTDyldMemoryManager *MM) - : ExecutionEngine(std::move(M)), TM(tm), Ctx(nullptr), MemMgr(this, MM), - Dyld(&MemMgr), ObjCache(nullptr) { + : ExecutionEngine(std::move(M)), TM(std::move(tm)), Ctx(nullptr), + MemMgr(this, MM), Dyld(&MemMgr), ObjCache(nullptr) { // FIXME: We are managing our modules, so we do not want the base class // ExecutionEngine to manage them as well. To avoid double destruction // of the first (and only) module added in ExecutionEngine constructor @@ -93,8 +93,6 @@ MCJIT::~MCJIT() { LoadedObjects.clear(); Archives.clear(); - - delete TM; } void MCJIT::addModule(std::unique_ptr<Module> M) { diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.h b/lib/ExecutionEngine/MCJIT/MCJIT.h index be32716433a..1c0d22e0ece 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.h +++ b/lib/ExecutionEngine/MCJIT/MCJIT.h @@ -101,7 +101,7 @@ private: // called. class MCJIT : public ExecutionEngine { - MCJIT(std::unique_ptr<Module> M, TargetMachine *tm, + MCJIT(std::unique_ptr<Module> M, std::unique_ptr<TargetMachine> tm, RTDyldMemoryManager *MemMgr); typedef llvm::SmallPtrSet<Module *, 4> ModulePtrSet; @@ -208,7 +208,7 @@ class MCJIT : public ExecutionEngine { } }; - TargetMachine *TM; + std::unique_ptr<TargetMachine> TM; MCContext *Ctx; LinkingMemoryManager MemMgr; RuntimeDyld Dyld; @@ -311,7 +311,7 @@ public: uint64_t getGlobalValueAddress(const std::string &Name) override; uint64_t getFunctionAddress(const std::string &Name) override; - TargetMachine *getTargetMachine() override { return TM; } + TargetMachine *getTargetMachine() override { return TM.get(); } /// @} /// @name (Private) Registration Interfaces @@ -324,7 +324,7 @@ public: static ExecutionEngine *createJIT(std::unique_ptr<Module> M, std::string *ErrorStr, RTDyldMemoryManager *MemMgr, - TargetMachine *TM); + std::unique_ptr<TargetMachine> TM); // @} |