X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=bindings%2Focaml%2Fllvm%2Fllvm_ocaml.c;h=0005bee9b758dad76c393b24e5d4c2739bad58a1;hb=81a788176ecf158432af2b208b0a85321e5ec74a;hp=f53ad3c6d34b63a4e3a3c0fc50228eee303a8701;hpb=06737056944683c6b02c405d710de9fd9b0f0e69;p=oota-llvm.git diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index f53ad3c6d34..0005bee9b75 100644 --- a/bindings/ocaml/llvm/llvm_ocaml.c +++ b/bindings/ocaml/llvm/llvm_ocaml.c @@ -74,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 */ @@ -114,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 */ @@ -139,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 */ @@ -160,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 */ @@ -197,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(); } @@ -219,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 */ @@ -238,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) ...--*/