diff options
| -rw-r--r-- | llvm/bindings/ocaml/llvm/llvm.ml | 1 | ||||
| -rw-r--r-- | llvm/bindings/ocaml/llvm/llvm.mli | 5 | ||||
| -rw-r--r-- | llvm/bindings/ocaml/llvm/llvm_ocaml.c | 13 |
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 */ |

