diff options
| author | Lang Hames <lhames@gmail.com> | 2015-11-03 16:10:18 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2015-11-03 16:10:18 +0000 |
| commit | a4a227f7e881de24ab150d6277d59b256b55d99a (patch) | |
| tree | 912c05ce58292facd2e6713c95b78045d8fda0bb /llvm/tools/lli/OrcLazyJIT.h | |
| parent | 862432c90e25f0901b77aff92cc6e48acd4b212b (diff) | |
| download | bcm5719-llvm-a4a227f7e881de24ab150d6277d59b256b55d99a.tar.gz bcm5719-llvm-a4a227f7e881de24ab150d6277d59b256b55d99a.zip | |
[Orc] Directly emit machine code for the x86 resolver block and trampolines.
Bypassing LLVM for this has a number of benefits:
1) Laziness support becomes asm-syntax agnostic (previously lazy jitting didn't
work on Windows as the resolver block was in Darwin asm).
2) For cross-process JITs, it allows resolver blocks and trampolines to be
emitted directly in the target process, reducing cross process traffic.
3) It should be marginally faster.
llvm-svn: 251933
Diffstat (limited to 'llvm/tools/lli/OrcLazyJIT.h')
| -rw-r--r-- | llvm/tools/lli/OrcLazyJIT.h | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/llvm/tools/lli/OrcLazyJIT.h b/llvm/tools/lli/OrcLazyJIT.h index 389380e8dd4..ec86a72efaa 100644 --- a/llvm/tools/lli/OrcLazyJIT.h +++ b/llvm/tools/lli/OrcLazyJIT.h @@ -23,7 +23,6 @@ #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h" #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" #include "llvm/ExecutionEngine/RTDyldMemoryManager.h" -#include "llvm/IR/LLVMContext.h" namespace llvm { @@ -41,21 +40,16 @@ public: IndirectStubsManagerBuilder; typedef CODLayerT::ModuleSetHandleT ModuleHandleT; - typedef std::function< - std::unique_ptr<CompileCallbackMgr>(IRDumpLayerT&, - RuntimeDyld::MemoryManager&, - LLVMContext&)> - CallbackManagerBuilder; - - OrcLazyJIT(std::unique_ptr<TargetMachine> TM, LLVMContext &Context, - CallbackManagerBuilder &BuildCallbackMgr, + OrcLazyJIT(std::unique_ptr<TargetMachine> TM, + std::unique_ptr<CompileCallbackMgr> CCMgr, IndirectStubsManagerBuilder IndirectStubsMgrBuilder, bool InlineStubs) - : TM(std::move(TM)), DL(this->TM->createDataLayout()), ObjectLayer(), + : TM(std::move(TM)), DL(this->TM->createDataLayout()), + CCMgr(std::move(CCMgr)), + ObjectLayer(), CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)), IRDumpLayer(CompileLayer, createDebugDumper()), - CCMgr(BuildCallbackMgr(IRDumpLayer, CCMgrMemMgr, Context)), - CODLayer(IRDumpLayer, extractSingleFunction, *CCMgr, + CODLayer(IRDumpLayer, extractSingleFunction, *this->CCMgr, std::move(IndirectStubsMgrBuilder), InlineStubs), CXXRuntimeOverrides( [this](const std::string &S) { return mangle(S); }) {} @@ -68,8 +62,7 @@ public: DtorRunner.runViaLayer(CODLayer); } - static CallbackManagerBuilder createCallbackMgrBuilder(Triple T); - + static std::unique_ptr<CompileCallbackMgr> createCompileCallbackMgr(Triple T); static IndirectStubsManagerBuilder createIndirectStubsMgrBuilder(Triple T); ModuleHandleT addModule(std::unique_ptr<Module> M) { @@ -155,10 +148,10 @@ private: DataLayout DL; SectionMemoryManager CCMgrMemMgr; + std::unique_ptr<CompileCallbackMgr> CCMgr; ObjLayerT ObjectLayer; CompileLayerT CompileLayer; IRDumpLayerT IRDumpLayer; - std::unique_ptr<CompileCallbackMgr> CCMgr; CODLayerT CODLayer; orc::LocalCXXRuntimeOverrides CXXRuntimeOverrides; |

