mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
[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:
@@ -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"
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user