[Orc] Directly emit machine code for the x86 resolver block and trampolines.
authorLang Hames <lhames@gmail.com>
Tue, 3 Nov 2015 16:10:18 +0000 (16:10 +0000)
committerLang Hames <lhames@gmail.com>
Tue, 3 Nov 2015 16:10:18 +0000 (16:10 +0000)
commit73cd3516cc7c197e7b35e82e286ebb0510ebd6a0
tree9a2568fe96e0fe6ae057bc4f1a588a4dc92c3a3e
parent20f7585a5c52c5ecbff7baff0959f4ed4cbd711b
[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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251933 91177308-0d34-0410-b5e6-96231b3b80d8
12 files changed:
include/llvm-c/OrcBindings.h
include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
include/llvm/ExecutionEngine/Orc/OrcTargetSupport.h
lib/ExecutionEngine/Orc/OrcCBindings.cpp
lib/ExecutionEngine/Orc/OrcCBindingsStack.cpp
lib/ExecutionEngine/Orc/OrcCBindingsStack.h
lib/ExecutionEngine/Orc/OrcTargetSupport.cpp
tools/lli/OrcLazyJIT.cpp
tools/lli/OrcLazyJIT.h
unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp
unittests/ExecutionEngine/Orc/OrcCAPITest.cpp