Adopting a uniform naming convention for type constructors in bindings.
[oota-llvm.git] / bindings / ocaml / llvm / llvm_ocaml.c
index ffa872da6be9f2ca995abe5317325a716ad1833d..0005bee9b758dad76c393b24e5d4c2739bad58a1 100644 (file)
@@ -21,8 +21,6 @@
 #include "caml/mlvalues.h"
 #include "caml/memory.h"
 #include "llvm/Config/config.h" 
-#include <stdio.h>
-#include <string.h>
 
 
 /*===-- Modules -----------------------------------------------------------===*/
@@ -76,7 +74,7 @@ CAMLprim LLVMTypeRef llvm_i64_type(value Unit) { return LLVMInt64Type(); }
 
 /* int -> lltype */
 CAMLprim LLVMTypeRef llvm_make_integer_type(value Width) {
-  return LLVMCreateIntType(Int_val(Width));
+  return LLVMIntType(Int_val(Width));
 }
 
 /* lltype -> int */
@@ -116,9 +114,9 @@ CAMLprim LLVMTypeRef llvm_ppc_fp128_type(value Unit) {
 /* lltype -> lltype array -> bool -> lltype */
 CAMLprim LLVMTypeRef llvm_make_function_type(LLVMTypeRef RetTy, value ParamTys,
                                              value IsVarArg) {
-  return LLVMCreateFunctionType(RetTy, (LLVMTypeRef *) ParamTys,
-                                Wosize_val(ParamTys),
-                                Bool_val(IsVarArg));
+  return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys,
+                          Wosize_val(ParamTys),
+                          Bool_val(IsVarArg));
 }
 
 /* lltype -> bool */
@@ -141,10 +139,10 @@ CAMLprim value llvm_param_types(LLVMTypeRef FunTy) {
 /*--... Operations on struct types .........................................--*/
 
 /* lltype array -> bool -> lltype */
-CAMLprim value llvm_make_struct_type(value ElementTypes, value Packed) {
-  return (value) LLVMCreateStructType((LLVMTypeRef *) ElementTypes,
-                                      Wosize_val(ElementTypes),
-                                      Bool_val(Packed));
+CAMLprim LLVMTypeRef llvm_make_struct_type(value ElementTypes, value Packed) {
+  return LLVMStructType((LLVMTypeRef *) ElementTypes,
+                        Wosize_val(ElementTypes),
+                        Bool_val(Packed));
 }
 
 /* lltype -> lltype array */
@@ -162,18 +160,18 @@ CAMLprim value llvm_is_packed(LLVMTypeRef StructTy) {
 /*--... Operations on array, pointer, and vector types .....................--*/
 
 /* lltype -> int -> lltype */
-CAMLprim value llvm_make_array_type(LLVMTypeRef ElementTy, value Count) {
-  return (value) LLVMCreateArrayType(ElementTy, Int_val(Count));
+CAMLprim LLVMTypeRef llvm_make_array_type(LLVMTypeRef ElementTy, value Count) {
+  return LLVMArrayType(ElementTy, Int_val(Count));
 }
 
 /* lltype -> lltype */
 CAMLprim LLVMTypeRef llvm_make_pointer_type(LLVMTypeRef ElementTy) {
-  return LLVMCreatePointerType(ElementTy);
+  return LLVMPointerType(ElementTy);
 }
 
 /* lltype -> int -> lltype */
 CAMLprim LLVMTypeRef llvm_make_vector_type(LLVMTypeRef ElementTy, value Count) {
-  return LLVMCreateVectorType(ElementTy, Int_val(Count));
+  return LLVMVectorType(ElementTy, Int_val(Count));
 }
 
 /* lltype -> lltype */
@@ -199,7 +197,7 @@ CAMLprim LLVMTypeRef llvm_label_type(value Unit) { return LLVMLabelType(); }
 
 /* unit -> lltype */
 CAMLprim LLVMTypeRef llvm_make_opaque_type(value Unit) {
-  return LLVMCreateOpaqueType();
+  return LLVMOpaqueType();
 }
 
 
@@ -221,6 +219,12 @@ CAMLprim value llvm_set_value_name(value Name, LLVMValueRef Val) {
   return Val_unit;
 }
 
+/* llvalue -> unit */
+CAMLprim value llvm_dump_value(LLVMValueRef Val) {
+  LLVMDumpValue(Val);
+  return Val_unit;
+}
+
 /*--... Operations on constants of (mostly) any type .......................--*/
 
 /* llvalue -> bool */
@@ -240,56 +244,79 @@ CAMLprim value llvm_is_undef(LLVMValueRef Val) {
 
 /*--... Operations on scalar constants .....................................--*/
 
-/* lltype -> int -> bool -> llvalue */
-CAMLprim LLVMValueRef llvm_make_int_constant(LLVMTypeRef IntTy, value N,
-                                             value SExt) {
-  /* GCC warns if we use the ternary operator. */
-  unsigned long long N2;
-  if (Bool_val(SExt))
-    N2 = (value) Int_val(N);
-  else
-    N2 = (mlsize_t) Int_val(N);
-  
-  return LLVMGetIntConstant(IntTy, N2, Bool_val(SExt));
+/* lltype -> int -> llvalue */
+CAMLprim LLVMValueRef llvm_const_int(LLVMTypeRef IntTy, value N) {
+  return LLVMConstInt(IntTy, (long long) Int_val(N), 1);
 }
 
 /* lltype -> Int64.t -> bool -> llvalue */
-CAMLprim LLVMValueRef llvm_make_int64_constant(LLVMTypeRef IntTy, value N,
-                                               value SExt) {
-  return LLVMGetIntConstant(IntTy, Int64_val(N), Bool_val(SExt));
+CAMLprim LLVMValueRef llvm_const_of_int64(LLVMTypeRef IntTy, value N,
+                                          value SExt) {
+  return LLVMConstInt(IntTy, Int64_val(N), Bool_val(SExt));
 }
 
 /* lltype -> float -> llvalue */
-CAMLprim LLVMValueRef llvm_make_real_constant(LLVMTypeRef RealTy, value N) {
-  return LLVMGetRealConstant(RealTy, Double_val(N));
+CAMLprim LLVMValueRef llvm_const_float(LLVMTypeRef RealTy, value N) {
+  return LLVMConstReal(RealTy, Double_val(N));
 }
 
 /*--... Operations on composite constants ..................................--*/
 
-/* string -> bool -> llvalue */
-CAMLprim LLVMValueRef llvm_make_string_constant(value Str, value NullTerminate) {
-  return LLVMGetStringConstant(String_val(Str), string_length(Str),
-                               Bool_val(NullTerminate) == 0);
+/* string -> llvalue */
+CAMLprim LLVMValueRef llvm_const_string(value Str, value NullTerminate) {
+  return LLVMConstString(String_val(Str), string_length(Str), 1);
+}
+
+/* string -> llvalue */
+CAMLprim LLVMValueRef llvm_const_stringz(value Str, value NullTerminate) {
+  return LLVMConstString(String_val(Str), string_length(Str), 0);
 }
 
 /* lltype -> llvalue array -> llvalue */
-CAMLprim LLVMValueRef llvm_make_array_constant(LLVMTypeRef ElementTy,
+CAMLprim LLVMValueRef llvm_const_array(LLVMTypeRef ElementTy,
                                                value ElementVals) {
-  return LLVMGetArrayConstant(ElementTy, (LLVMValueRef*) Op_val(ElementVals),
-                              Wosize_val(ElementVals));
+  return LLVMConstArray(ElementTy, (LLVMValueRef*) Op_val(ElementVals),
+                        Wosize_val(ElementVals));
 }
 
-/* llvalue array -> bool -> llvalue */
-CAMLprim LLVMValueRef llvm_make_struct_constant(value ElementVals,
-                                                value Packed) {
-  return LLVMGetStructConstant((LLVMValueRef *) Op_val(ElementVals),
-                               Wosize_val(ElementVals), Bool_val(Packed));
+/* llvalue array -> llvalue */
+CAMLprim LLVMValueRef llvm_const_struct(value ElementVals) {
+  return LLVMConstStruct((LLVMValueRef *) Op_val(ElementVals),
+                         Wosize_val(ElementVals), 0);
 }
 
 /* llvalue array -> llvalue */
-CAMLprim value llvm_make_vector_constant(value ElementVals) {
-  return (value) LLVMGetVectorConstant((LLVMValueRef*) Op_val(ElementVals),
-                                       Wosize_val(ElementVals));
+CAMLprim LLVMValueRef llvm_const_packed_struct(value ElementVals) {
+  return LLVMConstStruct((LLVMValueRef *) Op_val(ElementVals),
+                         Wosize_val(ElementVals), 1);
+}
+
+/* llvalue array -> llvalue */
+CAMLprim LLVMValueRef llvm_const_vector(value ElementVals) {
+  return LLVMConstVector((LLVMValueRef*) Op_val(ElementVals),
+                         Wosize_val(ElementVals));
+}
+
+/*--... Constant expressions ...............................................--*/
+
+/* int_predicate -> llvalue -> llvalue -> llvalue */
+CAMLprim LLVMValueRef llvm_const_icmp(value Pred,
+                                      LLVMValueRef LHSConstant,
+                                      LLVMValueRef RHSConstant) {
+  return LLVMConstICmp(Int_val(Pred) + LLVMIntEQ, LHSConstant, RHSConstant);
+}
+
+/* real_predicate -> llvalue -> llvalue -> llvalue */
+CAMLprim LLVMValueRef llvm_const_fcmp(value Pred,
+                                      LLVMValueRef LHSConstant,
+                                      LLVMValueRef RHSConstant) {
+  return LLVMConstFCmp(Int_val(Pred), LHSConstant, RHSConstant);
+}
+
+/* llvalue -> llvalue array -> llvalue */
+CAMLprim LLVMValueRef llvm_const_gep(LLVMValueRef ConstantVal, value Indices) {
+  return LLVMConstGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices),
+                      Wosize_val(Indices));
 }
 
 /*--... Operations on global variables, functions, and aliases (globals) ...--*/
@@ -477,7 +504,6 @@ CAMLprim value llvm_value_is_block(LLVMValueRef Val) {
 #define Builder_val(v)  (*(LLVMBuilderRef *)(Data_custom_val(v)))
 
 void llvm_finalize_builder(value B) {
-  fprintf(stderr, "disposing builder = 0x%08x\n", (int) Builder_val(B));
   LLVMDisposeBuilder(Builder_val(B));
 }
 
@@ -505,7 +531,6 @@ CAMLprim value llvm_builder_at_end(LLVMBasicBlockRef BB) {
   value V;
   LLVMBuilderRef B = LLVMCreateBuilder();
   LLVMPositionBuilderAtEnd(B, BB);
-  fprintf(stderr, "returning builder = 0x%08x\n", (int) B);
   V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1);
   Builder_val(V) = B;
   return V;