/* int -> lltype */
CAMLprim LLVMTypeRef llvm_make_integer_type(value Width) {
- return LLVMCreateIntType(Int_val(Width));
+ return LLVMIntType(Int_val(Width));
}
/* lltype -> int */
/* 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 */
/*--... 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 */
/*--... 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 */
/* unit -> lltype */
CAMLprim LLVMTypeRef llvm_make_opaque_type(value Unit) {
- return LLVMCreateOpaqueType();
+ return LLVMOpaqueType();
}
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 */
/*--... 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) ...--*/