summaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/MCJIT
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-09-02 22:41:07 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-09-02 22:41:07 +0000
commit4becee113cc07d89a29c7fa7cb3b353635079315 (patch)
tree0e7396f7ef1129596fe1bf10d12c76d3b34f83b0 /lib/ExecutionEngine/MCJIT
parent41b6e327f7dedfb9d3020f60f6c6804efeb75b16 (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.cpp12
-rw-r--r--lib/ExecutionEngine/MCJIT/MCJIT.h8
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);
// @}