diff options
-rw-r--r-- | bindings/ocaml/executionengine/executionengine_ocaml.c | 12 | ||||
-rw-r--r-- | bindings/ocaml/executionengine/llvm_executionengine.ml | 2 | ||||
-rw-r--r-- | bindings/ocaml/executionengine/llvm_executionengine.mli | 15 | ||||
-rw-r--r-- | include/llvm-c/ExecutionEngine.h | 1 | ||||
-rw-r--r-- | lib/ExecutionEngine/ExecutionEngineBindings.cpp | 6 |
5 files changed, 29 insertions, 7 deletions
diff --git a/bindings/ocaml/executionengine/executionengine_ocaml.c b/bindings/ocaml/executionengine/executionengine_ocaml.c index 4af771123c..fc3848a1eb 100644 --- a/bindings/ocaml/executionengine/executionengine_ocaml.c +++ b/bindings/ocaml/executionengine/executionengine_ocaml.c @@ -181,7 +181,17 @@ CAMLprim LLVMExecutionEngineRef llvm_ee_create_jit(LLVMModuleProviderRef MP) { LLVMExecutionEngineRef JIT; char *Error; - if (LLVMCreateJITCompiler(&JIT, MP, &Error)) + if (LLVMCreateJITCompiler(&JIT, MP, 0, &Error)) + llvm_raise(llvm_ee_error_exn, Error); + return JIT; +} + +/* llmoduleprovider -> ExecutionEngine.t */ +CAMLprim LLVMExecutionEngineRef +llvm_ee_create_fast_jit(LLVMModuleProviderRef MP) { + LLVMExecutionEngineRef JIT; + char *Error; + if (LLVMCreateJITCompiler(&JIT, MP, 1, &Error)) llvm_raise(llvm_ee_error_exn, Error); return JIT; } diff --git a/bindings/ocaml/executionengine/llvm_executionengine.ml b/bindings/ocaml/executionengine/llvm_executionengine.ml index 4b9132df05..cf9acc7cb6 100644 --- a/bindings/ocaml/executionengine/llvm_executionengine.ml +++ b/bindings/ocaml/executionengine/llvm_executionengine.ml @@ -62,6 +62,8 @@ module ExecutionEngine = struct = "llvm_ee_create_interpreter" external create_jit: Llvm.llmoduleprovider -> t = "llvm_ee_create_jit" + external create_fast_jit: Llvm.llmoduleprovider -> t + = "llvm_ee_create_fast_jit" external dispose: t -> unit = "llvm_ee_dispose" external add_module_provider: Llvm.llmoduleprovider -> t -> unit diff --git a/bindings/ocaml/executionengine/llvm_executionengine.mli b/bindings/ocaml/executionengine/llvm_executionengine.mli index 9794f358ff..17da1dffe5 100644 --- a/bindings/ocaml/executionengine/llvm_executionengine.mli +++ b/bindings/ocaml/executionengine/llvm_executionengine.mli @@ -100,12 +100,21 @@ module ExecutionEngine: sig val create_interpreter: Llvm.llmoduleprovider -> t (** [create_jit mp] creates a new JIT (just-in-time compiler), taking - ownership of the module provider [mp] if successful. Raises [Error msg] if - an error occurrs. The execution engine is not garbage collected and must - be destroyed with [dispose ee]. + ownership of the module provider [mp] if successful. This function creates + a JIT which favors code quality over compilation speed. Raises [Error msg] + if an error occurrs. The execution engine is not garbage collected and + must be destroyed with [dispose ee]. See the function [llvm::ExecutionEngine::create]. *) val create_jit: Llvm.llmoduleprovider -> t + (** [create_fast_jit mp] creates a new JIT (just-in-time compiler) which + favors compilation speed over code quality. It takes ownership of the + module provider [mp] if successful. Raises [Error msg] if an error + occurrs. The execution engine is not garbage collected and must be + destroyed with [dispose ee]. + See the function [llvm::ExecutionEngine::create]. *) + val create_fast_jit: Llvm.llmoduleprovider -> t + (** [dispose ee] releases the memory used by the execution engine and must be invoked to avoid memory leaks. *) val dispose: t -> unit diff --git a/include/llvm-c/ExecutionEngine.h b/include/llvm-c/ExecutionEngine.h index 8664f1fe9a..d138d072c6 100644 --- a/include/llvm-c/ExecutionEngine.h +++ b/include/llvm-c/ExecutionEngine.h @@ -62,6 +62,7 @@ int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, LLVMModuleProviderRef MP, + int Fast, char **OutError); void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); diff --git a/lib/ExecutionEngine/ExecutionEngineBindings.cpp b/lib/ExecutionEngine/ExecutionEngineBindings.cpp index 5ceeb9097d..7c55db0af2 100644 --- a/lib/ExecutionEngine/ExecutionEngineBindings.cpp +++ b/lib/ExecutionEngine/ExecutionEngineBindings.cpp @@ -114,11 +114,11 @@ int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, LLVMModuleProviderRef MP, - char **OutError, - bool Fast = false) { + int Fast, + char **OutError) { std::string Error; if (ExecutionEngine *JIT = ExecutionEngine::createJIT(unwrap(MP), &Error, 0, - Fast)) { + Fast != 0)) { *OutJIT = wrap(JIT); return 0; } |