[llvm] 181ede0 - [llvm][ocaml] Replace deprecated C functions in OCaml bindings

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 31 02:25:22 PDT 2022


Author: Alan Hu
Date: 2022-10-31T10:23:35+01:00
New Revision: 181ede0ebd724ff38a605fd11a5a601ed0360a16

URL: https://github.com/llvm/llvm-project/commit/181ede0ebd724ff38a605fd11a5a601ed0360a16
DIFF: https://github.com/llvm/llvm-project/commit/181ede0ebd724ff38a605fd11a5a601ed0360a16.diff

LOG: [llvm][ocaml] Replace deprecated C functions in OCaml bindings

Follow-up to D135524, to replace two more deprecated C functions
in the OCaml bindings. const_in_bounds_gep now accepts the source
element type as argument, and const_element has been changed into
aggregate_element, which works on a wider range of constants and
returns an option.

Differential Revision: https://reviews.llvm.org/D136914

Added: 
    

Modified: 
    llvm/bindings/ocaml/llvm/llvm.ml
    llvm/bindings/ocaml/llvm/llvm.mli
    llvm/bindings/ocaml/llvm/llvm_ocaml.c
    llvm/test/Bindings/OCaml/core.ml

Removed: 
    


################################################################################
diff  --git a/llvm/bindings/ocaml/llvm/llvm.ml b/llvm/bindings/ocaml/llvm/llvm.ml
index 5e4413345df85..10d44a6cf998f 100644
--- a/llvm/bindings/ocaml/llvm/llvm.ml
+++ b/llvm/bindings/ocaml/llvm/llvm.ml
@@ -629,7 +629,8 @@ external const_packed_struct : llcontext -> llvalue array -> llvalue
                              = "llvm_const_packed_struct"
 external const_vector : llvalue array -> llvalue = "llvm_const_vector"
 external string_of_const : llvalue -> string option = "llvm_string_of_const"
-external const_element : llvalue -> int -> llvalue = "llvm_const_element"
+external aggregate_element : llvalue -> int -> llvalue option
+                           = "llvm_aggregate_element"
 
 (*--... Constant expressions ...............................................--*)
 external align_of : lltype -> llvalue = "LLVMAlignOf"
@@ -659,8 +660,8 @@ external const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
 external const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
 external const_gep : lltype -> llvalue -> llvalue array -> llvalue
                     = "llvm_const_gep"
-external const_in_bounds_gep : llvalue -> llvalue array -> llvalue
-                            = "llvm_const_in_bounds_gep"
+external const_in_bounds_gep : lltype -> llvalue -> llvalue array -> llvalue
+                             = "llvm_const_in_bounds_gep"
 external const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
 external const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
 external const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"

diff  --git a/llvm/bindings/ocaml/llvm/llvm.mli b/llvm/bindings/ocaml/llvm/llvm.mli
index 26332a764e7dc..38bf555d0230a 100644
--- a/llvm/bindings/ocaml/llvm/llvm.mli
+++ b/llvm/bindings/ocaml/llvm/llvm.mli
@@ -1044,9 +1044,11 @@ val const_vector : llvalue array -> llvalue
     or [None] if this is not a string constant. *)
 val string_of_const : llvalue -> string option
 
-(** [const_element c] returns a constant for a specified index's element.
-    See the method ConstantDataSequential::getElementAsConstant. *)
-val const_element : llvalue -> int -> llvalue
+(** [aggregate_element c idx] returns [Some elt] where [elt] is the element of
+    constant aggregate [c] at the specified index [idx], or [None] if [idx] is
+    out of range or it's not possible to determine the element.
+    See the method [llvm::Constant::getAggregateElement]. *)
+val aggregate_element : llvalue -> int -> llvalue option
 
 
 (** {7 Constant expressions} *)
@@ -1169,10 +1171,10 @@ val const_ashr : llvalue -> llvalue -> llvalue
     See the method [llvm::ConstantExpr::getGetElementPtr]. *)
 val const_gep : lltype -> llvalue -> llvalue array -> llvalue
 
-(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [pc]
-    with the constant integers indices from the array [indices].
+(** [const_in_bounds_gep ty pc indices] returns the constant [getElementPtr] of
+    [pc] with the constant integers indices from the array [indices].
     See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
-val const_in_bounds_gep : llvalue -> llvalue array -> llvalue
+val const_in_bounds_gep : lltype -> llvalue -> llvalue array -> llvalue
 
 (** [const_trunc c ty] returns the constant truncation of integer constant [c]
     to the smaller integer type [ty].

diff  --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
index d087233a3ab15..f193fe7b565fe 100644
--- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c
+++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
@@ -968,9 +968,9 @@ value llvm_string_of_const(LLVMValueRef Const) {
   return cstr_to_string_option(CStr, Len);
 }
 
-/* llvalue -> int -> llvalue */
-LLVMValueRef llvm_const_element(LLVMValueRef Const, value N) {
-  return LLVMGetElementAsConstant(Const, Int_val(N));
+/* llvalue -> int -> llvalue option */
+value llvm_aggregate_element(LLVMValueRef Const, value N) {
+  return ptr_to_option(LLVMGetAggregateElement(Const, Int_val(N)));
 }
 
 /*--... Constant expressions ...............................................--*/
@@ -995,9 +995,10 @@ LLVMValueRef llvm_const_gep(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
 }
 
 /* llvalue -> llvalue array -> llvalue */
-LLVMValueRef llvm_const_in_bounds_gep(LLVMValueRef ConstantVal, value Indices) {
-  return LLVMConstInBoundsGEP(ConstantVal, (LLVMValueRef *)Op_val(Indices),
-                              Wosize_val(Indices));
+LLVMValueRef llvm_const_in_bounds_gep(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
+                                      value Indices) {
+  return LLVMConstInBoundsGEP2(Ty, ConstantVal, (LLVMValueRef *)Op_val(Indices),
+                               Wosize_val(Indices));
 }
 
 /* llvalue -> lltype -> is_signed:bool -> llvalue */

diff  --git a/llvm/test/Bindings/OCaml/core.ml b/llvm/test/Bindings/OCaml/core.ml
index 69422435a0fec..f8ed68585d8a8 100644
--- a/llvm/test/Bindings/OCaml/core.ml
+++ b/llvm/test/Bindings/OCaml/core.ml
@@ -185,8 +185,9 @@ let test_constants () =
   let c = const_array i32_type [| three; four |] in
   ignore (define_global "const_array" c m);
   insist ((array_type i32_type 2) = (type_of c));
-  insist (three = (const_element c 0));
-  insist (four = (const_element c 1));
+  insist (Some three = (aggregate_element c 0));
+  insist (Some four = (aggregate_element c 1));
+  insist (None = (aggregate_element c 2));
 
   (* CHECK: const_vector{{.*}}<i16 1, i16 2{{.*}}>
    *)


        


More information about the llvm-commits mailing list