aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bindings/ocaml/executionengine/executionengine_ocaml.c12
-rw-r--r--bindings/ocaml/executionengine/llvm_executionengine.ml2
-rw-r--r--bindings/ocaml/executionengine/llvm_executionengine.mli15
-rw-r--r--include/llvm-c/ExecutionEngine.h1
-rw-r--r--lib/ExecutionEngine/ExecutionEngineBindings.cpp6
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;
}