diff options
author | Lang Hames <lhames@gmail.com> | 2017-06-23 21:45:29 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2017-06-23 21:45:29 +0000 |
commit | 2c19c1be56e7b365cb893003ca896755ac3ddfff (patch) | |
tree | 7355e91987c626b585d20b2b584ed12f9a59afa3 /llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h | |
parent | 36206206cdb20b17f8cf80b10b483af6efd4880e (diff) | |
download | bcm5719-llvm-2c19c1be56e7b365cb893003ca896755ac3ddfff.tar.gz bcm5719-llvm-2c19c1be56e7b365cb893003ca896755ac3ddfff.zip |
[ORC] Move ORC IR layer interface from addModuleSet to addModule and fix the
module type as std::shared_ptr<Module>.
llvm-svn: 306166
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h index 000ab0006ba..944eba7bc89 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h +++ b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h @@ -191,10 +191,15 @@ public: } else { assert(M->getDataLayout() == getDataLayout() && "DataLayout Mismatch"); } - Modules.push_back(std::move(M)); - std::vector<Module *> Ms; - Ms.push_back(&*Modules.back()); - LazyEmitLayer.addModuleSet(std::move(Ms), &MemMgr, &Resolver); + auto *MPtr = M.release(); + Retain[MPtr] = false; + auto Deleter = + [this](Module *Mod) { + if (!Retain[Mod]) + delete Mod; + }; + LocalModules.push_back(std::shared_ptr<Module>(MPtr, std::move(Deleter))); + LazyEmitLayer.addModule(LocalModules.back(), &MemMgr, &Resolver); } void addObjectFile(std::unique_ptr<object::ObjectFile> O) override { @@ -381,6 +386,8 @@ private: std::map<ObjectLayerT::ObjHandleT, SectionAddrSet, ObjHandleCompare> UnfinalizedSections; + std::map<Module*, bool> Retain; + std::vector<std::shared_ptr<Module>> LocalModules; std::vector<object::OwningBinary<object::Archive>> Archives; }; |