X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=tools%2Flli%2FOrcLazyJIT.h;h=2f7a0199fef37e70ccfef7d2b33b61d9bf7cfd0d;hp=2b2db6e668cc60de448a19c79b787424d050b8e6;hb=fe8e55cbc0b7df0eca07c10e4b6b440c80ab6d13;hpb=a1c91277c445c3a9d9101629d157af4c6a9b46b0 diff --git a/tools/lli/OrcLazyJIT.h b/tools/lli/OrcLazyJIT.h index 2b2db6e668c..2f7a0199fef 100644 --- a/tools/lli/OrcLazyJIT.h +++ b/tools/lli/OrcLazyJIT.h @@ -21,7 +21,6 @@ #include "llvm/ExecutionEngine/Orc/ExecutionUtils.h" #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h" -#include "llvm/ExecutionEngine/Orc/LazyEmittingLayer.h" #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" #include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/IR/LLVMContext.h" @@ -37,9 +36,7 @@ public: typedef std::function(std::unique_ptr)> TransformFtor; typedef orc::IRTransformLayer IRDumpLayerT; - typedef orc::LazyEmittingLayer LazyEmitLayerT; - typedef orc::CompileOnDemandLayer CODLayerT; + typedef orc::CompileOnDemandLayer CODLayerT; typedef CODLayerT::ModuleSetHandleT ModuleHandleT; typedef std::function< @@ -57,9 +54,8 @@ public: ObjectLayer(), CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)), IRDumpLayer(CompileLayer, createDebugDumper()), - LazyEmitLayer(IRDumpLayer), CCMgr(BuildCallbackMgr(IRDumpLayer, CCMgrMemMgr, Context)), - CODLayer(LazyEmitLayer, *CCMgr), + CODLayer(IRDumpLayer, *CCMgr, false), CXXRuntimeOverrides([this](const std::string &S) { return mangle(S); }) {} ~OrcLazyJIT() { @@ -93,22 +89,25 @@ public: // 2) Check for C++ runtime overrides. // 3) Search the host process (LLI)'s symbol table. auto Resolver = - orc::createLambdaResolver( - [this](const std::string &Name) { - - if (auto Sym = CODLayer.findSymbol(Name, true)) - return RuntimeDyld::SymbolInfo(Sym.getAddress(), Sym.getFlags()); - - if (auto Sym = CXXRuntimeOverrides.searchOverrides(Name)) - return Sym; - - if (auto Addr = RTDyldMemoryManager::getSymbolAddressInProcess(Name)) - return RuntimeDyld::SymbolInfo(Addr, JITSymbolFlags::Exported); - - return RuntimeDyld::SymbolInfo(nullptr); - }, - [](const std::string &Name) { return RuntimeDyld::SymbolInfo(nullptr); } - ); + std::shared_ptr( + orc::createLambdaResolver( + [this](const std::string &Name) { + if (auto Sym = CODLayer.findSymbol(Name, true)) + return RuntimeDyld::SymbolInfo(Sym.getAddress(), + Sym.getFlags()); + if (auto Sym = CXXRuntimeOverrides.searchOverrides(Name)) + return Sym; + + if (auto Addr = + RTDyldMemoryManager::getSymbolAddressInProcess(Name)) + return RuntimeDyld::SymbolInfo(Addr, JITSymbolFlags::Exported); + + return RuntimeDyld::SymbolInfo(nullptr); + }, + [](const std::string &Name) { + return RuntimeDyld::SymbolInfo(nullptr); + } + )); // Add the module to the JIT. std::vector> S; @@ -120,8 +119,7 @@ public: orc::CtorDtorRunner CtorRunner(std::move(CtorNames), H); CtorRunner.runViaLayer(CODLayer); - IRStaticDestructorRunners.push_back( - orc::CtorDtorRunner(std::move(DtorNames), H)); + IRStaticDestructorRunners.emplace_back(std::move(DtorNames), H); return H; } @@ -154,7 +152,6 @@ private: ObjLayerT ObjectLayer; CompileLayerT CompileLayer; IRDumpLayerT IRDumpLayer; - LazyEmitLayerT LazyEmitLayer; std::unique_ptr CCMgr; CODLayerT CODLayer;