From 4becee113cc07d89a29c7fa7cb3b353635079315 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Tue, 2 Sep 2014 22:41:07 +0000 Subject: [PATCH] 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 --- include/llvm/ExecutionEngine/ExecutionEngine.h | 9 ++++----- lib/ExecutionEngine/ExecutionEngine.cpp | 8 +++----- lib/ExecutionEngine/MCJIT/MCJIT.cpp | 12 +++++------- lib/ExecutionEngine/MCJIT/MCJIT.h | 8 ++++---- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/include/llvm/ExecutionEngine/ExecutionEngine.h b/include/llvm/ExecutionEngine/ExecutionEngine.h index 09b6cd2c60d..ffedb84da9a 100644 --- a/include/llvm/ExecutionEngine/ExecutionEngine.h +++ b/include/llvm/ExecutionEngine/ExecutionEngine.h @@ -139,11 +139,10 @@ protected: /// getMemoryforGV - Allocate memory for a global variable. virtual char *getMemoryForGV(const GlobalVariable *GV); - static ExecutionEngine *(*MCJITCtor)( - std::unique_ptr M, - std::string *ErrorStr, - RTDyldMemoryManager *MCJMM, - TargetMachine *TM); + static ExecutionEngine *(*MCJITCtor)(std::unique_ptr M, + std::string *ErrorStr, + RTDyldMemoryManager *MCJMM, + std::unique_ptr TM); static ExecutionEngine *(*InterpCtor)(std::unique_ptr M, std::string *ErrorStr); diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 315dee4944c..df5a4307d85 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -49,10 +49,8 @@ void ObjectBuffer::anchor() {} void ObjectBufferStream::anchor() {} ExecutionEngine *(*ExecutionEngine::MCJITCtor)( - std::unique_ptrM, - std::string *ErrorStr, - RTDyldMemoryManager *MCJMM, - TargetMachine *TM) = nullptr; + std::unique_ptr M, std::string *ErrorStr, + RTDyldMemoryManager *MCJMM, std::unique_ptr TM) = nullptr; ExecutionEngine *(*ExecutionEngine::InterpCtor)(std::unique_ptr M, std::string *ErrorStr) =nullptr; @@ -453,7 +451,7 @@ ExecutionEngine *EngineBuilder::create(TargetMachine *TM) { ExecutionEngine *EE = nullptr; if (ExecutionEngine::MCJITCtor) EE = ExecutionEngine::MCJITCtor(std::move(M), ErrorStr, - MCJMM ? MCJMM : JMM, TheTM.release()); + MCJMM ? MCJMM : JMM, std::move(TheTM)); if (EE) { EE->setVerifyModules(VerifyModules); return EE; 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 M, std::string *ErrorStr, RTDyldMemoryManager *MemMgr, - TargetMachine *TM) { + std::unique_ptr 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 M, TargetMachine *tm, +MCJIT::MCJIT(std::unique_ptr M, std::unique_ptr 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 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 M, TargetMachine *tm, + MCJIT(std::unique_ptr M, std::unique_ptr tm, RTDyldMemoryManager *MemMgr); typedef llvm::SmallPtrSet ModulePtrSet; @@ -208,7 +208,7 @@ class MCJIT : public ExecutionEngine { } }; - TargetMachine *TM; + std::unique_ptr 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 M, std::string *ErrorStr, RTDyldMemoryManager *MemMgr, - TargetMachine *TM); + std::unique_ptr TM); // @}