Remove module providers from ocaml.
[oota-llvm.git] / bindings / ocaml / executionengine / executionengine_ocaml.c
index 4af771123c0c096229f7045bd3441928c421871e..bc2b08196b6d1f12a9b57248ce065720df2f418d 100644 (file)
@@ -16,6 +16,7 @@
 \*===----------------------------------------------------------------------===*/
 
 #include "llvm-c/ExecutionEngine.h"
+#include "llvm-c/Target.h"
 #include "caml/alloc.h"
 #include "caml/custom.h"
 #include "caml/fail.h"
 #include <string.h>
 #include <assert.h>
 
+/* Force the LLVM interpreter and JIT to be linked in. */
+void llvm_initialize(void) {
+  LLVMLinkInInterpreter();
+  LLVMLinkInJIT();
+}
+
+/* unit -> bool */
+CAMLprim value llvm_initialize_native_target(value Unit) {
+  return Val_bool(LLVMInitializeNativeTarget());
+}
 
 /* Can't use the recommended caml_named_value mechanism for backwards
    compatibility reasons. This is largely equivalent. */
@@ -157,31 +168,41 @@ CAMLprim value llvm_genericvalue_as_nativeint(value GenVal) {
 
 /*--... Operations on execution engines ....................................--*/
 
-/* llmoduleprovider -> ExecutionEngine.t */
-CAMLprim LLVMExecutionEngineRef llvm_ee_create(LLVMModuleProviderRef MP) {
+/* llmodule -> ExecutionEngine.t */
+CAMLprim LLVMExecutionEngineRef llvm_ee_create(LLVMModuleRef M) {
   LLVMExecutionEngineRef Interp;
   char *Error;
-  if (LLVMCreateExecutionEngine(&Interp, MP, &Error))
+  if (LLVMCreateExecutionEngineForModule(&Interp, M, &Error))
     llvm_raise(llvm_ee_error_exn, Error);
   return Interp;
 }
 
-/* llmoduleprovider -> ExecutionEngine.t */
+/* llmodule -> ExecutionEngine.t */
 CAMLprim LLVMExecutionEngineRef
-llvm_ee_create_interpreter(LLVMModuleProviderRef MP) {
+llvm_ee_create_interpreter(LLVMModuleRef M) {
   LLVMExecutionEngineRef Interp;
   char *Error;
-  if (LLVMCreateInterpreter(&Interp, MP, &Error))
+  if (LLVMCreateInterpreterForModule(&Interp, M, &Error))
     llvm_raise(llvm_ee_error_exn, Error);
   return Interp;
 }
 
-/* llmoduleprovider -> ExecutionEngine.t */
+/* llmodule -> ExecutionEngine.t */
+CAMLprim LLVMExecutionEngineRef
+llvm_ee_create_jit(LLVMModuleRef M) {
+  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_jit(LLVMModuleProviderRef MP) {
+llvm_ee_create_fast_jit(LLVMModuleRef M) {
   LLVMExecutionEngineRef JIT;
   char *Error;
-  if (LLVMCreateJITCompiler(&JIT, MP, &Error))
+  if (LLVMCreateJITCompiler(&JIT, M, 0, &Error))
     llvm_raise(llvm_ee_error_exn, Error);
   return JIT;
 }
@@ -192,19 +213,18 @@ CAMLprim value llvm_ee_dispose(LLVMExecutionEngineRef EE) {
   return Val_unit;
 }
 
-/* llmoduleprovider -> ExecutionEngine.t -> unit */
-CAMLprim value llvm_ee_add_mp(LLVMModuleProviderRef MP,
-                              LLVMExecutionEngineRef EE) {
-  LLVMAddModuleProvider(EE, MP);
+/* llmodule -> ExecutionEngine.t -> unit */
+CAMLprim value llvm_ee_add_mp(LLVMModuleRef M, LLVMExecutionEngineRef EE) {
+  LLVMAddModule(EE, M);
   return Val_unit;
 }
 
-/* llmoduleprovider -> ExecutionEngine.t -> llmodule */
-CAMLprim LLVMModuleRef llvm_ee_remove_mp(LLVMModuleProviderRef MP,
+/* llmodule -> ExecutionEngine.t -> llmodule */
+CAMLprim LLVMModuleRef llvm_ee_remove_mp(LLVMModuleRef M,
                                          LLVMExecutionEngineRef EE) {
   LLVMModuleRef RemovedModule;
   char *Error;
-  if (LLVMRemoveModuleProvider(EE, MP, &RemovedModule, &Error))
+  if (LLVMRemoveModule(EE, M, &RemovedModule, &Error))
     llvm_raise(llvm_ee_error_exn, Error);
   return RemovedModule;
 }