[OCaml] Add OCaml API for LLVMGetIndices

Summary:
This patch adds a thin wrapper around LLVMGetNumIndices and
LLVMGetIndices to return the indices of ExtractValue or InsertValue
instructions as an OCaml array. It has not seemed to be necessary to
expose LLVMGetNumIndices separately.

Reviewers: whitequark

Reviewed By: whitequark

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342474 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
whitequark
2018-09-18 13:35:39 +00:00
parent 78b19ea9d9
commit 1a70735b28
3 changed files with 19 additions and 0 deletions

View File

@@ -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"

View File

@@ -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]

View File

@@ -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 */