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.cpp | |
| 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.cpp')
| -rw-r--r-- | llvm/tools/lli/OrcLazyJIT.cpp | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/llvm/tools/lli/OrcLazyJIT.cpp b/llvm/tools/lli/OrcLazyJIT.cpp index aec6e1a7297..7d79c48559e 100644 --- a/llvm/tools/lli/OrcLazyJIT.cpp +++ b/llvm/tools/lli/OrcLazyJIT.cpp @@ -46,19 +46,14 @@ namespace { cl::init(true), cl::Hidden); } -OrcLazyJIT::CallbackManagerBuilder -OrcLazyJIT::createCallbackMgrBuilder(Triple T) { +std::unique_ptr<OrcLazyJIT::CompileCallbackMgr> +OrcLazyJIT::createCompileCallbackMgr(Triple T) { switch (T.getArch()) { default: return nullptr; case Triple::x86_64: { - typedef orc::JITCompileCallbackManager<IRDumpLayerT, - orc::OrcX86_64> CCMgrT; - return [](IRDumpLayerT &IRDumpLayer, RuntimeDyld::MemoryManager &MemMgr, - LLVMContext &Context) { - return llvm::make_unique<CCMgrT>(IRDumpLayer, MemMgr, Context, 0, - 64); - }; + typedef orc::JITCompileCallbackManager<orc::OrcX86_64> CCMgrT; + return llvm::make_unique<CCMgrT>(0); } } } @@ -146,13 +141,12 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) { EngineBuilder EB; EB.setOptLevel(getOptLevel()); auto TM = std::unique_ptr<TargetMachine>(EB.selectTarget()); - auto &Context = getGlobalContext(); - auto CallbackMgrBuilder = - OrcLazyJIT::createCallbackMgrBuilder(Triple(TM->getTargetTriple())); + auto CompileCallbackMgr = + OrcLazyJIT::createCompileCallbackMgr(Triple(TM->getTargetTriple())); // If we couldn't build the factory function then there must not be a callback // manager for this target. Bail out. - if (!CallbackMgrBuilder) { + if (!CompileCallbackMgr) { errs() << "No callback manager available for target '" << TM->getTargetTriple().str() << "'.\n"; return 1; @@ -169,7 +163,7 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) { } // Everything looks good. Build the JIT. - OrcLazyJIT J(std::move(TM), Context, CallbackMgrBuilder, + OrcLazyJIT J(std::move(TM), std::move(CompileCallbackMgr), std::move(IndirectStubsMgrBuilder), OrcInlineStubs); |

