From: Lang Hames Date: Wed, 25 Mar 2015 12:11:48 +0000 (+0000) Subject: [Orc][lli] Add a very simple Orc-based lazy JIT to lli. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=47fd5639bc5a65daf1b73505e6556f0f2a8bf777;p=llvm [Orc][lli] Add a very simple Orc-based lazy JIT to lli. This ensures that we're building and testing the CompileOnDemand layer, at least in a basic way. Currently x86-64 only, and with limited to no library calls enabled (depending on host platform). Patches welcome. ;) To enable access to the lazy JIT, this patch replaces the '-use-orcmcjit' lli option with a new option: '-jit-kind={ mcjit | orc-mcjit | orc-lazy }'. All regression tests are updated to use the new option, and one trivial test of the new lazy JIT is added. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233182 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h b/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h index 3dd1a37e1ed..77b0c48d0a7 100644 --- a/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h +++ b/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h @@ -193,8 +193,8 @@ public: /// below this one. JITSymbol findSymbolIn(ModuleSetHandleT H, const std::string &Name, bool ExportedSymbolsOnly) { - BaseLayerModuleSetHandleListT &BaseLayerHandles = H->second; - for (auto &BH : BaseLayerHandles) { + + for (auto &BH : H->BaseLayerModuleSetHandles) { if (auto Symbol = BaseLayer.findSymbolIn(BH, Name, ExportedSymbolsOnly)) return Symbol; } diff --git a/test/ExecutionEngine/OrcJIT/multi-module-a.ll b/test/ExecutionEngine/OrcJIT/multi-module-a.ll deleted file mode 100644 index 587a1e893ed..00000000000 --- a/test/ExecutionEngine/OrcJIT/multi-module-a.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/multi-module-b.ll -extra-module=%p/Inputs/multi-module-c.ll %s > /dev/null - -declare i32 @FB() - -define i32 @main() { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} - diff --git a/test/ExecutionEngine/OrcJIT/multi-module-sm-pic-a.ll b/test/ExecutionEngine/OrcJIT/multi-module-sm-pic-a.ll deleted file mode 100644 index b5ee3d13b96..00000000000 --- a/test/ExecutionEngine/OrcJIT/multi-module-sm-pic-a.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/multi-module-b.ll -extra-module=%p/Inputs/multi-module-c.ll -relocation-model=pic -code-model=small %s > /dev/null -; XFAIL: mips, i686, i386 - -declare i32 @FB() - -define i32 @main() { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} - diff --git a/test/ExecutionEngine/OrcJIT/remote/cross-module-a.ll b/test/ExecutionEngine/OrcJIT/remote/cross-module-a.ll deleted file mode 100644 index cc48fd4426c..00000000000 --- a/test/ExecutionEngine/OrcJIT/remote/cross-module-a.ll +++ /dev/null @@ -1,12 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/cross-module-b.ll -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target%exeext %s > /dev/null - -declare i32 @FB() - -define i32 @FA() nounwind { - ret i32 0 -} - -define i32 @main() nounwind { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} diff --git a/test/ExecutionEngine/OrcJIT/remote/cross-module-sm-pic-a.ll b/test/ExecutionEngine/OrcJIT/remote/cross-module-sm-pic-a.ll deleted file mode 100644 index d6209d7523a..00000000000 --- a/test/ExecutionEngine/OrcJIT/remote/cross-module-sm-pic-a.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/cross-module-b.ll -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target%exeext -relocation-model=pic -code-model=small %s > /dev/null -; XFAIL: mips, i686, i386, arm - -declare i32 @FB() - -define i32 @FA() { - ret i32 0 -} - -define i32 @main() { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} - diff --git a/test/ExecutionEngine/OrcJIT/remote/multi-module-a.ll b/test/ExecutionEngine/OrcJIT/remote/multi-module-a.ll deleted file mode 100644 index 9ae0e060dd0..00000000000 --- a/test/ExecutionEngine/OrcJIT/remote/multi-module-a.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/multi-module-b.ll -extra-module=%p/Inputs/multi-module-c.ll -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target%exeext %s > /dev/null - -declare i32 @FB() - -define i32 @main() nounwind { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} - diff --git a/test/ExecutionEngine/OrcJIT/remote/multi-module-sm-pic-a.ll b/test/ExecutionEngine/OrcJIT/remote/multi-module-sm-pic-a.ll deleted file mode 100644 index a1d4b81eb1a..00000000000 --- a/test/ExecutionEngine/OrcJIT/remote/multi-module-sm-pic-a.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: %lli -use-orcmcjit -extra-module=%p/Inputs/multi-module-b.ll -extra-module=%p/Inputs/multi-module-c.ll -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target%exeext -relocation-model=pic -code-model=small %s > /dev/null -; XFAIL: mips, i686, i386, arm - -declare i32 @FB() - -define i32 @main() { - %r = call i32 @FB( ) ; [#uses=1] - ret i32 %r -} - diff --git a/test/ExecutionEngine/OrcJIT/simplesttest.ll b/test/ExecutionEngine/OrcJIT/simplesttest.ll deleted file mode 100644 index c2f24f6450a..00000000000 --- a/test/ExecutionEngine/OrcJIT/simplesttest.ll +++ /dev/null @@ -1,6 +0,0 @@ -; RUN: %lli -use-orcmcjit %s > /dev/null - -define i32 @main() { - ret i32 0 -} - diff --git a/test/ExecutionEngine/OrcLazy/lit.local.cfg b/test/ExecutionEngine/OrcLazy/lit.local.cfg new file mode 100644 index 00000000000..bf63c4f73ed --- /dev/null +++ b/test/ExecutionEngine/OrcLazy/lit.local.cfg @@ -0,0 +1,2 @@ +if config.root.host_arch not in ['x86_64']: + config.unsupported = True diff --git a/test/ExecutionEngine/OrcLazy/trivial_retval_1.ll b/test/ExecutionEngine/OrcLazy/trivial_retval_1.ll new file mode 100644 index 00000000000..b1234f9a44d --- /dev/null +++ b/test/ExecutionEngine/OrcLazy/trivial_retval_1.ll @@ -0,0 +1,25 @@ +; RUN: lli -jit-kind=orc-lazy %s; [ $? -eq 30 ] +define i32 @baz() { +entry: + ret i32 2 +} + +define i32 @bar() { +entry: + %call = call i32 @baz() + %mul = mul nsw i32 3, %call + ret i32 %mul +} + +define i32 @foo() { +entry: + %call = call i32 @bar() + %mul = mul nsw i32 5, %call + ret i32 %mul +} + +define i32 @main(i32 %argc, i8** %argv) { +entry: + %call = call i32 @foo() + ret i32 %call +} diff --git a/test/ExecutionEngine/OrcJIT/2002-12-16-ArgTest.ll b/test/ExecutionEngine/OrcMCJIT/2002-12-16-ArgTest.ll similarity index 96% rename from test/ExecutionEngine/OrcJIT/2002-12-16-ArgTest.ll rename to test/ExecutionEngine/OrcMCJIT/2002-12-16-ArgTest.ll index 027085519b4..e8eb6939850 100644 --- a/test/ExecutionEngine/OrcJIT/2002-12-16-ArgTest.ll +++ b/test/ExecutionEngine/OrcMCJIT/2002-12-16-ArgTest.ll @@ -1,4 +1,4 @@ -; RUN: %lli -use-orcmcjit %s > /dev/null +; RUN: %lli -jit-kind=orc-mcjit %s > /dev/null @.LC0 = internal global [10 x i8] c"argc: %d\0A\00" ; <[10 x i8]*> [#uses=1] diff --git a/test/ExecutionEngine/OrcJIT/2003-01-04-ArgumentBug.ll b/test/ExecutionEngine/OrcMCJIT/2003-01-04-ArgumentBug.ll similarity index 86% rename from test/ExecutionEngine/OrcJIT/2003-01-04-ArgumentBug.ll rename to test/ExecutionEngine/OrcMCJIT/2003-01-04-ArgumentBug.ll index 67425a9a3a3..2061329f252 100644 --- a/test/ExecutionEngine/OrcJIT/2003-01-04-ArgumentBug.ll +++ b/test/ExecutionEngine/OrcMCJIT/2003-01-04-ArgumentBug.ll @@ -1,4 +1,4 @@ -; RUN: %lli -use-orcmcjit %s > /dev/null +; RUN: %lli -jit-kind=orc-mcjit %s > /dev/null define i32 @foo(i32 %X, i32 %Y, double %A) { %cond212 = fcmp une double %A, 1.000000e+00 ; [#uses=1] diff --git a/test/ExecutionEngine/OrcJIT/2003-01-04-LoopTest.ll b/test/ExecutionEngine/OrcMCJIT/2003-01-04-LoopTest.ll similarity index 91% rename from test/ExecutionEngine/OrcJIT/2003-01-04-LoopTest.ll rename to test/ExecutionEngine/OrcMCJIT/2003-01-04-LoopTest.ll index cf805ea4162..a298172e678 100644 --- a/test/ExecutionEngine/OrcJIT/2003-01-04-LoopTest.ll +++ b/test/ExecutionEngine/OrcMCJIT/2003-01-04-LoopTest.ll @@ -1,4 +1,4 @@ -; RUN: %lli -use-orcmcjit %s > /dev/null +; RUN: %lli -jit-kind=orc-mcjit %s > /dev/null define i32 @main() { call i32 @mylog( i32 4 ) ; :1 [#uses=0] diff --git a/test/ExecutionEngine/OrcJIT/2003-01-04-PhiTest.ll b/test/ExecutionEngine/OrcMCJIT/2003-01-04-PhiTest.ll similarity index 81% rename from test/ExecutionEngine/OrcJIT/2003-01-04-PhiTest.ll rename to test/ExecutionEngine/OrcMCJIT/2003-01-04-PhiTest.ll index b8b851966c0..a24e188438f 100644 --- a/test/ExecutionEngine/OrcJIT/2003-01-04-PhiTest.ll +++ b/test/ExecutionEngine/OrcMCJIT/2003-01-04-PhiTest.ll @@ -1,4 +1,4 @@ -; RUN: %lli -use-orcmcjit %s > /dev/null +; RUN: %lli -jit-kind=orc-mcjit %s > /dev/null define i32 @main() { ;