[OCaml] Add functions for accessing metadata nodes.

Patch by Xinyu Zhuang.

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

llvm-svn: 273370
This commit is contained in:
Peter Zotov 2016-06-22 03:30:24 +00:00
parent 7a6ec86fcc
commit ee462ca194
4 changed files with 18 additions and 0 deletions

View File

@ -483,6 +483,8 @@ external mdstring : llcontext -> string -> llvalue = "llvm_mdstring"
external mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode" external mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode"
external mdnull : llcontext -> llvalue = "llvm_mdnull" external mdnull : llcontext -> llvalue = "llvm_mdnull"
external get_mdstring : llvalue -> string option = "llvm_get_mdstring" 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 external get_named_metadata : llmodule -> string -> llvalue array
= "llvm_get_namedmd" = "llvm_get_namedmd"
external add_named_metadata_operand : llmodule -> string -> llvalue -> unit external add_named_metadata_operand : llmodule -> string -> llvalue -> unit

View File

@ -852,6 +852,10 @@ val mdnull : llcontext -> llvalue
See the method [llvm::MDString::getString] *) See the method [llvm::MDString::getString] *)
val get_mdstring : llvalue -> string option 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 (** [get_named_metadata m name] returns all the MDNodes belonging to the named
metadata (if any). metadata (if any).
See the method [llvm::NamedMDNode::getOperand]. *) See the method [llvm::NamedMDNode::getOperand]. *)

View File

@ -734,6 +734,17 @@ CAMLprim value llvm_get_mdstring(LLVMValueRef V) {
CAMLreturn(Val_int(0)); 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 */ /* llmodule -> string -> llvalue array */
CAMLprim value llvm_get_namedmd(LLVMModuleRef M, value Name) CAMLprim value llvm_get_namedmd(LLVMModuleRef M, value Name)
{ {

View File

@ -1122,6 +1122,7 @@ let test_builder () =
insist ((has_metadata i) = true); insist ((has_metadata i) = true);
insist ((metadata i kind) = Some md); insist ((metadata i kind) = Some md);
insist ((get_mdnode_operands md) = [| m1; m2 |]);
clear_metadata i kind; clear_metadata i kind;