+val is_undef : llvalue -> bool
+
+(** [constexpr_opcode v] returns an [Opcode.t] corresponding to constexpr
+ value [v], or [Opcode.Invalid] if [v] is not a constexpr. *)
+val constexpr_opcode : llvalue -> Opcode.t
+
+
+(** {7 Operations on instructions} *)
+
+(** [has_metadata i] returns whether or not the instruction [i] has any
+ metadata attached to it. See the function
+ [llvm::Instruction::hasMetadata]. *)
+val has_metadata : llvalue -> bool
+
+(** [metadata i kind] optionally returns the metadata associated with the
+ kind [kind] in the instruction [i] See the function
+ [llvm::Instruction::getMetadata]. *)
+val metadata : llvalue -> int -> llvalue option
+
+(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
+ instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
+val set_metadata : llvalue -> int -> llvalue -> unit
+
+(** [clear_metadata i kind] clears the metadata of kind [kind] in the
+ instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
+val clear_metadata : llvalue -> int -> unit
+
+
+(** {7 Operations on metadata} *)
+
+(** [mdstring c s] returns the MDString of the string [s] in the context [c].
+ See the method [llvm::MDNode::get]. *)
+val mdstring : llcontext -> string -> llvalue
+
+(** [mdnode c elts] returns the MDNode containing the values [elts] in the
+ context [c].
+ See the method [llvm::MDNode::get]. *)
+val mdnode : llcontext -> llvalue array -> llvalue
+
+(** [get_mdstring v] returns the MDString.
+ See the method [llvm::MDString::getString] *)
+val get_mdstring : llvalue -> string option
+
+(** [get_named_metadata m name] returns all the MDNodes belonging to the named
+ metadata (if any).
+ See the method [llvm::NamedMDNode::getOperand]. *)
+val get_named_metadata : llmodule -> string -> llvalue array
+
+(** [add_named_metadata_operand m name v] adds [v] as the last operand of
+ metadata named [name] in module [m]. If the metadata does not exist,
+ it is created.
+ See the methods [llvm::Module::getNamedMetadata()] and
+ [llvm::MDNode::addOperand()]. *)
+val add_named_metadata_operand : llmodule -> string -> llvalue -> unit