diff --git a/bindings/ocaml/executionengine/executionengine_ocaml.c b/bindings/ocaml/executionengine/executionengine_ocaml.c index bc2b08196b6..d12a9f7acde 100644 --- a/bindings/ocaml/executionengine/executionengine_ocaml.c +++ b/bindings/ocaml/executionengine/executionengine_ocaml.c @@ -187,22 +187,12 @@ llvm_ee_create_interpreter(LLVMModuleRef M) { return Interp; } -/* llmodule -> ExecutionEngine.t */ +/* llmodule -> int -> ExecutionEngine.t */ CAMLprim LLVMExecutionEngineRef -llvm_ee_create_jit(LLVMModuleRef M) { +llvm_ee_create_jit(LLVMModuleRef M, value OptLevel) { LLVMExecutionEngineRef JIT; char *Error; - if (LLVMCreateJITCompilerForModule(&JIT, M, 3, &Error)) - llvm_raise(llvm_ee_error_exn, Error); - return JIT; -} - -/* llmodule -> ExecutionEngine.t */ -CAMLprim LLVMExecutionEngineRef -llvm_ee_create_fast_jit(LLVMModuleRef M) { - LLVMExecutionEngineRef JIT; - char *Error; - if (LLVMCreateJITCompiler(&JIT, M, 0, &Error)) + if (LLVMCreateJITCompilerForModule(&JIT, M, Int_val(OptLevel), &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 921d424ad51..95faa58cc54 100644 --- a/bindings/ocaml/executionengine/llvm_executionengine.ml +++ b/bindings/ocaml/executionengine/llvm_executionengine.ml @@ -60,10 +60,8 @@ module ExecutionEngine = struct = "llvm_ee_create" external create_interpreter: Llvm.llmodule -> t = "llvm_ee_create_interpreter" - external create_jit: Llvm.llmodule -> t + external create_jit: Llvm.llmodule -> int -> t = "llvm_ee_create_jit" - external create_fast_jit: Llvm.llmodule -> t - = "llvm_ee_create_fast_jit" external dispose: t -> unit = "llvm_ee_dispose" external add_module: Llvm.llmodule -> t -> unit diff --git a/bindings/ocaml/executionengine/llvm_executionengine.mli b/bindings/ocaml/executionengine/llvm_executionengine.mli index ec469fcf047..ac6665b2bc8 100644 --- a/bindings/ocaml/executionengine/llvm_executionengine.mli +++ b/bindings/ocaml/executionengine/llvm_executionengine.mli @@ -99,22 +99,13 @@ module ExecutionEngine: sig See the function [llvm::EngineBuilder::create]. *) val create_interpreter: Llvm.llmodule -> t - (** [create_jit m] creates a new JIT (just-in-time compiler), taking - ownership of the module [m] 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]. + (** [create_jit m optlevel] creates a new JIT (just-in-time compiler), taking + ownership of the module [m] if successful with the desired optimization + level [optlevel]. 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::EngineBuilder::create]. *) - val create_jit: Llvm.llmodule -> t - - (** [create_fast_jit m] creates a new JIT (just-in-time compiler) which - favors compilation speed over code quality. It takes ownership of the - module [m] 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::EngineBuilder::create]. *) - val create_fast_jit: Llvm.llmodule -> t - + val create_jit : Llvm.llmodule -> int -> t + (** [dispose ee] releases the memory used by the execution engine and must be invoked to avoid memory leaks. *) val dispose: t -> unit