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
llvm-svn: 342474
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"
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]
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 */