OSDN Git Service

[OCaml] Add functions for accessing metadata nodes.
authorPeter Zotov <whitequark@whitequark.org>
Wed, 22 Jun 2016 03:30:24 +0000 (03:30 +0000)
committerPeter Zotov <whitequark@whitequark.org>
Wed, 22 Jun 2016 03:30:24 +0000 (03:30 +0000)
Patch by Xinyu Zhuang.

Differential Revision: http://reviews.llvm.org/D19309

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273370 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/ocaml/llvm/llvm.ml
bindings/ocaml/llvm/llvm.mli
bindings/ocaml/llvm/llvm_ocaml.c
test/Bindings/OCaml/core.ml

index 5e149d4..513fe0c 100644 (file)
@@ -483,6 +483,8 @@ external mdstring : llcontext -> string -> llvalue = "llvm_mdstring"
 external mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode"
 external mdnull : llcontext -> llvalue = "llvm_mdnull"
 external get_mdstring : llvalue -> string option = "llvm_get_mdstring"
+external get_mdnode_operands : llvalue -> llvalue array
+                            = "llvm_get_mdnode_operands"
 external get_named_metadata : llmodule -> string -> llvalue array
                             = "llvm_get_namedmd"
 external add_named_metadata_operand : llmodule -> string -> llvalue -> unit
index 8c06861..0f97300 100644 (file)
@@ -852,6 +852,10 @@ val mdnull : llcontext -> llvalue
     See the method [llvm::MDString::getString] *)
 val get_mdstring : llvalue -> string option
 
+(** [get_mdnode_operands v] returns the operands in the MDNode. *)
+(*     See the method [llvm::MDNode::getOperand] *)
+val get_mdnode_operands : llvalue -> llvalue array
+
 (** [get_named_metadata m name] returns all the MDNodes belonging to the named
     metadata (if any).
     See the method [llvm::NamedMDNode::getOperand]. *)
index 665842d..f968db8 100644 (file)
@@ -734,6 +734,17 @@ CAMLprim value llvm_get_mdstring(LLVMValueRef V) {
   CAMLreturn(Val_int(0));
 }
 
+CAMLprim value llvm_get_mdnode_operands(LLVMValueRef V) {
+  CAMLparam0();
+  CAMLlocal1(Operands);
+  unsigned int n;
+
+  n = LLVMGetMDNodeNumOperands(V);
+  Operands = alloc(n, 0);
+  LLVMGetMDNodeOperands(V, (LLVMValueRef *)  Operands);
+  CAMLreturn(Operands);
+}
+
 /* llmodule -> string -> llvalue array */
 CAMLprim value llvm_get_namedmd(LLVMModuleRef M, value Name)
 {
index 78feae1..ee8281f 100644 (file)
@@ -1122,6 +1122,7 @@ let test_builder () =
 
     insist ((has_metadata i) = true);
     insist ((metadata i kind) = Some md);
+    insist ((get_mdnode_operands md) = [| m1; m2 |]);
 
     clear_metadata i kind;