[llvm] r194380 - [OCaml] Make Llvm_target.DataLayout.t automatically managed

Peter Zotov whitequark at whitequark.org
Mon Nov 11 06:47:12 PST 2013


Author: whitequark
Date: Mon Nov 11 08:47:11 2013
New Revision: 194380

URL: http://llvm.org/viewvc/llvm-project?rev=194380&view=rev
Log:
[OCaml] Make Llvm_target.DataLayout.t automatically managed

This breaks the API by removing Llvm_target.DataLayout.dispose.

Modified:
    llvm/trunk/bindings/ocaml/executionengine/executionengine_ocaml.c
    llvm/trunk/bindings/ocaml/executionengine/llvm_executionengine.ml
    llvm/trunk/bindings/ocaml/target/llvm_target.ml
    llvm/trunk/bindings/ocaml/target/llvm_target.mli
    llvm/trunk/bindings/ocaml/target/target_ocaml.c
    llvm/trunk/test/Bindings/Ocaml/ipo_opts.ml
    llvm/trunk/test/Bindings/Ocaml/scalar_opts.ml
    llvm/trunk/test/Bindings/Ocaml/target.ml
    llvm/trunk/test/Bindings/Ocaml/vectorize_opts.ml

Modified: llvm/trunk/bindings/ocaml/executionengine/executionengine_ocaml.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/executionengine/executionengine_ocaml.c?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/bindings/ocaml/executionengine/executionengine_ocaml.c (original)
+++ llvm/trunk/bindings/ocaml/executionengine/executionengine_ocaml.c Mon Nov 11 08:47:11 2013
@@ -324,3 +324,10 @@ CAMLprim value llvm_ee_free_machine_code
   return Val_unit;
 }
 
+extern value llvm_alloc_target_data(LLVMTargetDataRef TargetData);
+
+/* ExecutionEngine.t -> Llvm_target.TargetData.t */
+CAMLprim value llvm_ee_get_target_data(LLVMExecutionEngineRef EE) {
+  LLVMTargetDataRef TD = LLVMGetExecutionEngineTargetData(EE);
+  return llvm_alloc_target_data(TD);
+}

Modified: llvm/trunk/bindings/ocaml/executionengine/llvm_executionengine.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/executionengine/llvm_executionengine.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/bindings/ocaml/executionengine/llvm_executionengine.ml (original)
+++ llvm/trunk/bindings/ocaml/executionengine/llvm_executionengine.ml Mon Nov 11 08:47:11 2013
@@ -84,11 +84,10 @@ module ExecutionEngine = struct
     = "llvm_ee_free_machine_code"
 
   external target_data: t -> Llvm_target.DataLayout.t
-    = "LLVMGetExecutionEngineTargetData"
+    = "llvm_ee_get_target_data"
   
   (* The following are not bound. Patches are welcome.
   
-  get_target_data: t -> lltargetdata
   add_global_mapping: llvalue -> llgenericvalue -> t -> unit
   clear_all_global_mappings: t -> unit
   update_global_mapping: llvalue -> llgenericvalue -> t -> unit

Modified: llvm/trunk/bindings/ocaml/target/llvm_target.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/target/llvm_target.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/bindings/ocaml/target/llvm_target.ml (original)
+++ llvm/trunk/bindings/ocaml/target/llvm_target.ml Mon Nov 11 08:47:11 2013
@@ -20,12 +20,11 @@ module DataLayout = struct
   external add : t -> [<Llvm.PassManager.any] Llvm.PassManager.t -> unit
                = "llvm_targetdata_add"
   external as_string : t -> string = "llvm_targetdata_as_string"
-  external dispose : t -> unit = "llvm_targetdata_dispose"
 end
 
 external byte_order : DataLayout.t -> Endian.t = "llvm_byte_order"
 external pointer_size : DataLayout.t -> int = "llvm_pointer_size"
-external intptr_type : DataLayout.t -> Llvm.lltype = "LLVMIntPtrType"
+external intptr_type : DataLayout.t -> Llvm.lltype = "llvm_intptr_type"
 external size_in_bits : DataLayout.t -> Llvm.lltype -> Int64.t
                       = "llvm_size_in_bits"
 external store_size : DataLayout.t -> Llvm.lltype -> Int64.t = "llvm_store_size"

Modified: llvm/trunk/bindings/ocaml/target/llvm_target.mli
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/target/llvm_target.mli?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/bindings/ocaml/target/llvm_target.mli (original)
+++ llvm/trunk/bindings/ocaml/target/llvm_target.mli Mon Nov 11 08:47:11 2013
@@ -34,10 +34,6 @@ module DataLayout : sig
   (** [as_string td] is the string representation of the target data [td].
       See the constructor llvm::DataLayout::DataLayout. *)
   external as_string : t -> string = "llvm_targetdata_as_string"
-
-  (** Deallocates a DataLayout.
-      See the destructor llvm::DataLayout::~DataLayout. *)
-  external dispose : t -> unit = "llvm_targetdata_dispose"
 end
 
 (** Returns the byte order of a target, either LLVMBigEndian or
@@ -51,7 +47,7 @@ external pointer_size : DataLayout.t ->
 
 (** Returns the integer type that is the same size as a pointer on a target.
     See the method llvm::DataLayout::getIntPtrType. *)
-external intptr_type : DataLayout.t -> Llvm.lltype = "LLVMIntPtrType"
+external intptr_type : DataLayout.t -> Llvm.lltype = "llvm_intptr_type"
 
 (** Computes the size of a type in bits for a target.
     See the method llvm::DataLayout::getTypeSizeInBits. *)

Modified: llvm/trunk/bindings/ocaml/target/target_ocaml.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/target/target_ocaml.c?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/bindings/ocaml/target/target_ocaml.c (original)
+++ llvm/trunk/bindings/ocaml/target/target_ocaml.c Mon Nov 11 08:47:11 2013
@@ -17,86 +17,110 @@
 
 #include "llvm-c/Target.h"
 #include "caml/alloc.h"
+#include "caml/custom.h"
+
+#define TargetData_val(v)  (*(LLVMTargetDataRef *)(Data_custom_val(v)))
+
+static void llvm_finalize_target_data(value TargetData) {
+  LLVMDisposeTargetData(TargetData_val(TargetData));
+}
+
+static struct custom_operations llvm_target_data_ops = {
+  (char *) "LLVMTargetData",
+  llvm_finalize_target_data,
+  custom_compare_default,
+  custom_hash_default,
+  custom_serialize_default,
+  custom_deserialize_default
+#ifdef custom_compare_ext_default
+  , custom_compare_ext_default
+#endif
+};
+
+value llvm_alloc_target_data(LLVMTargetDataRef TargetData) {
+  value V = alloc_custom(&llvm_target_data_ops, sizeof(LLVMTargetDataRef), 0, 1);
+  TargetData_val(V) = TargetData;
+  return V;
+}
 
 /* string -> DataLayout.t */
-CAMLprim LLVMTargetDataRef llvm_targetdata_create(value StringRep) {
-  return LLVMCreateTargetData(String_val(StringRep));
+CAMLprim value llvm_targetdata_create(value StringRep) {
+  return llvm_alloc_target_data(LLVMCreateTargetData(String_val(StringRep)));
 }
 
 /* DataLayout.t -> [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */
-CAMLprim value llvm_targetdata_add(LLVMTargetDataRef TD, LLVMPassManagerRef PM){
-  LLVMAddTargetData(TD, PM);
+CAMLprim value llvm_targetdata_add(value TD, LLVMPassManagerRef PM){
+  LLVMAddTargetData(TargetData_val(TD), PM);
   return Val_unit;
 }
 
 /* DataLayout.t -> string */
-CAMLprim value llvm_targetdata_as_string(LLVMTargetDataRef TD) {
-  char *StringRep = LLVMCopyStringRepOfTargetData(TD);
+CAMLprim value llvm_targetdata_as_string(value TD) {
+  char *StringRep = LLVMCopyStringRepOfTargetData(TargetData_val(TD));
   value Copy = copy_string(StringRep);
   LLVMDisposeMessage(StringRep);
   return Copy;
 }
 
-/* DataLayout.t -> unit */
-CAMLprim value llvm_targetdata_dispose(LLVMTargetDataRef TD) {
-  LLVMDisposeTargetData(TD);
-  return Val_unit;
-}
-
 /* DataLayout.t -> Endian.t */
-CAMLprim value llvm_byte_order(LLVMTargetDataRef TD) {
-  return Val_int(LLVMByteOrder(TD));
+CAMLprim value llvm_byte_order(value TD) {
+  return Val_int(LLVMByteOrder(TargetData_val(TD)));
 }
 
 /* DataLayout.t -> int */
-CAMLprim value llvm_pointer_size(LLVMTargetDataRef TD) {
-  return Val_int(LLVMPointerSize(TD));
+CAMLprim value llvm_pointer_size(value TD) {
+  return Val_int(LLVMPointerSize(TargetData_val(TD)));
+}
+
+/* DataLayout.t -> int -> Llvm.lltype */
+CAMLprim LLVMTypeRef llvm_intptr_type(value TD) {
+  return LLVMIntPtrType(TargetData_val(TD));;
 }
 
 /* DataLayout.t -> Llvm.lltype -> Int64.t */
-CAMLprim value llvm_size_in_bits(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return caml_copy_int64(LLVMSizeOfTypeInBits(TD, Ty));
+CAMLprim value llvm_size_in_bits(value TD, LLVMTypeRef Ty) {
+  return caml_copy_int64(LLVMSizeOfTypeInBits(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.lltype -> Int64.t */
-CAMLprim value llvm_store_size(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return caml_copy_int64(LLVMStoreSizeOfType(TD, Ty));
+CAMLprim value llvm_store_size(value TD, LLVMTypeRef Ty) {
+  return caml_copy_int64(LLVMStoreSizeOfType(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.lltype -> Int64.t */
-CAMLprim value llvm_abi_size(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return caml_copy_int64(LLVMABISizeOfType(TD, Ty));
+CAMLprim value llvm_abi_size(value TD, LLVMTypeRef Ty) {
+  return caml_copy_int64(LLVMABISizeOfType(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.lltype -> int */
-CAMLprim value llvm_abi_align(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return Val_int(LLVMABIAlignmentOfType(TD, Ty));
+CAMLprim value llvm_abi_align(value TD, LLVMTypeRef Ty) {
+  return Val_int(LLVMABIAlignmentOfType(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.lltype -> int */
-CAMLprim value llvm_stack_align(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return Val_int(LLVMCallFrameAlignmentOfType(TD, Ty));
+CAMLprim value llvm_stack_align(value TD, LLVMTypeRef Ty) {
+  return Val_int(LLVMCallFrameAlignmentOfType(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.lltype -> int */
-CAMLprim value llvm_preferred_align(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
-  return Val_int(LLVMPreferredAlignmentOfType(TD, Ty));
+CAMLprim value llvm_preferred_align(value TD, LLVMTypeRef Ty) {
+  return Val_int(LLVMPreferredAlignmentOfType(TargetData_val(TD), Ty));
 }
 
 /* DataLayout.t -> Llvm.llvalue -> int */
-CAMLprim value llvm_preferred_align_of_global(LLVMTargetDataRef TD,
+CAMLprim value llvm_preferred_align_of_global(value TD,
                                               LLVMValueRef GlobalVar) {
-  return Val_int(LLVMPreferredAlignmentOfGlobal(TD, GlobalVar));
+  return Val_int(LLVMPreferredAlignmentOfGlobal(TargetData_val(TD), GlobalVar));
 }
 
 /* DataLayout.t -> Llvm.lltype -> Int64.t -> int */
-CAMLprim value llvm_element_at_offset(LLVMTargetDataRef TD, LLVMTypeRef Ty,
+CAMLprim value llvm_element_at_offset(value TD, LLVMTypeRef Ty,
                                       value Offset) {
-  return Val_int(LLVMElementAtOffset(TD, Ty, Int64_val(Offset)));
+  return Val_int(LLVMElementAtOffset(TargetData_val(TD), Ty, Int64_val(Offset)));
 }
 
 /* DataLayout.t -> Llvm.lltype -> int -> Int64.t */
-CAMLprim value llvm_offset_of_element(LLVMTargetDataRef TD, LLVMTypeRef Ty,
+CAMLprim value llvm_offset_of_element(value TD, LLVMTypeRef Ty,
                                       value Index) {
-  return caml_copy_int64(LLVMOffsetOfElement(TD, Ty, Int_val(Index)));
+  return caml_copy_int64(LLVMOffsetOfElement(TargetData_val(TD), Ty, Int_val(Index)));
 }

Modified: llvm/trunk/test/Bindings/Ocaml/ipo_opts.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/ipo_opts.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/test/Bindings/Ocaml/ipo_opts.ml (original)
+++ llvm/trunk/test/Bindings/Ocaml/ipo_opts.ml Mon Nov 11 08:47:11 2013
@@ -65,9 +65,7 @@ let test_transforms () =
            ++ add_strip_dead_prototypes
            ++ add_strip_symbols
            ++ PassManager.run_module m
-           ++ PassManager.dispose);
-
-  DataLayout.dispose td
+           ++ PassManager.dispose)
 
 
 (*===-- Driver ------------------------------------------------------------===*)

Modified: llvm/trunk/test/Bindings/Ocaml/scalar_opts.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/scalar_opts.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/test/Bindings/Ocaml/scalar_opts.ml (original)
+++ llvm/trunk/test/Bindings/Ocaml/scalar_opts.ml Mon Nov 11 08:47:11 2013
@@ -80,9 +80,7 @@ let test_transforms () =
            ++ PassManager.initialize
            ++ PassManager.run_function fn
            ++ PassManager.finalize
-           ++ PassManager.dispose);
-  
-  DataLayout.dispose td
+           ++ PassManager.dispose)
 
 
 (*===-- Driver ------------------------------------------------------------===*)

Modified: llvm/trunk/test/Bindings/Ocaml/target.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/target.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/test/Bindings/Ocaml/target.ml (original)
+++ llvm/trunk/test/Bindings/Ocaml/target.ml Mon Nov 11 08:47:11 2013
@@ -54,8 +54,7 @@ let test_target_data () =
   assert_equal (preferred_align td sty) 8;
   assert_equal (preferred_align_of_global td (declare_global sty "g" m)) 8;
   assert_equal (element_at_offset td sty (Int64.of_int 1)) 0;
-  assert_equal (offset_of_element td sty 1) (Int64.of_int 4);
-  DataLayout.dispose td
+  assert_equal (offset_of_element td sty 1) (Int64.of_int 4)
 
 
 (*===-- Driver ------------------------------------------------------------===*)

Modified: llvm/trunk/test/Bindings/Ocaml/vectorize_opts.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/vectorize_opts.ml?rev=194380&r1=194379&r2=194380&view=diff
==============================================================================
--- llvm/trunk/test/Bindings/Ocaml/vectorize_opts.ml (original)
+++ llvm/trunk/test/Bindings/Ocaml/vectorize_opts.ml Mon Nov 11 08:47:11 2013
@@ -49,9 +49,7 @@ let test_transforms () =
            ++ add_loop_vectorize
            ++ add_slp_vectorize
            ++ PassManager.run_module m
-           ++ PassManager.dispose);
-
-  DataLayout.dispose td
+           ++ PassManager.dispose)
 
 
 (*===-- Driver ------------------------------------------------------------===*)





More information about the llvm-commits mailing list