summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/bindings/ocaml/llvm/llvm.ml1
-rw-r--r--llvm/bindings/ocaml/llvm/llvm.mli5
-rw-r--r--llvm/bindings/ocaml/llvm/llvm_ocaml.c13
3 files changed, 19 insertions, 0 deletions
diff --git a/llvm/bindings/ocaml/llvm/llvm.ml b/llvm/bindings/ocaml/llvm/llvm.ml
index 2d2f1ca6aed..5612fae69ff 100644
--- a/llvm/bindings/ocaml/llvm/llvm.ml
+++ b/llvm/bindings/ocaml/llvm/llvm.ml
@@ -538,6 +538,7 @@ external operand : llvalue -> int -> llvalue = "llvm_operand"
external operand_use : llvalue -> int -> lluse = "llvm_operand_use"
external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
external num_operands : llvalue -> int = "llvm_num_operands"
+external indices : llvalue -> int array = "llvm_indices"
(*--... Operations on constants of (mostly) any type .......................--*)
external is_constant : llvalue -> bool = "llvm_is_constant"
diff --git a/llvm/bindings/ocaml/llvm/llvm.mli b/llvm/bindings/ocaml/llvm/llvm.mli
index caaac36ed18..97b6a695fa2 100644
--- a/llvm/bindings/ocaml/llvm/llvm.mli
+++ b/llvm/bindings/ocaml/llvm/llvm.mli
@@ -814,6 +814,11 @@ val set_operand : llvalue -> int -> llvalue -> unit
val num_operands : llvalue -> int
+(** [indices i] returns the indices for the ExtractValue or InsertValue
+ instruction [i].
+ See the [llvm::getIndices] methods. *)
+val indices : llvalue -> int array
+
(** {7 Operations on constants of (mostly) any type} *)
(** [is_constant v] returns [true] if the value [v] is a constant, [false]
diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
index 477da9a0090..c637941d81d 100644
--- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c
+++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c
@@ -732,6 +732,19 @@ CAMLprim value llvm_num_operands(LLVMValueRef V) {
return Val_int(LLVMGetNumOperands(V));
}
+/* llvalue -> int array */
+CAMLprim value llvm_indices(LLVMValueRef Instr) {
+ CAMLparam0();
+ CAMLlocal1(indices);
+ unsigned n = LLVMGetNumIndices(Instr);
+ const unsigned *Indices = LLVMGetIndices(Instr);
+ indices = caml_alloc(n, 0);
+ for (unsigned i = 0; i < n; i++) {
+ Op_val(indices)[i] = Val_int(Indices[i]);
+ }
+ CAMLreturn(indices);
+}
+
/*--... Operations on constants of (mostly) any type .......................--*/
/* llvalue -> bool */
OpenPOWER on IntegriCloud