[OCaml] Introduce an llmdkind abstract type.

Patch by Gabriel Radanne.

While this commit technically breaks API, no code should have supplied
the integer IDs directly, and thus no code should break.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210395 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Peter Zotov
2014-06-07 15:15:10 +00:00
parent 68caf1727f
commit c49250087a
2 changed files with 11 additions and 7 deletions

View File

@ -16,6 +16,7 @@ type lluse
type llbasicblock type llbasicblock
type llbuilder type llbuilder
type llmemorybuffer type llmemorybuffer
type llmdkind
module TypeKind = struct module TypeKind = struct
type t = type t =
@ -299,7 +300,7 @@ type ('a, 'b) llrev_pos =
external create_context : unit -> llcontext = "llvm_create_context" external create_context : unit -> llcontext = "llvm_create_context"
external dispose_context : llcontext -> unit = "llvm_dispose_context" external dispose_context : llcontext -> unit = "llvm_dispose_context"
external global_context : unit -> llcontext = "llvm_global_context" external global_context : unit -> llcontext = "llvm_global_context"
external mdkind_id : llcontext -> string -> int = "llvm_mdkind_id" external mdkind_id : llcontext -> string -> llmdkind = "llvm_mdkind_id"
(*===-- Modules -----------------------------------------------------------===*) (*===-- Modules -----------------------------------------------------------===*)
external create_module : llcontext -> string -> llmodule = "llvm_create_module" external create_module : llcontext -> string -> llmodule = "llvm_create_module"
@ -442,9 +443,9 @@ external constexpr_opcode : llvalue -> Opcode.t = "llvm_constexpr_get_opcode"
(*--... Operations on instructions .........................................--*) (*--... Operations on instructions .........................................--*)
external has_metadata : llvalue -> bool = "llvm_has_metadata" external has_metadata : llvalue -> bool = "llvm_has_metadata"
external metadata : llvalue -> int -> llvalue option = "llvm_metadata" external metadata : llvalue -> llmdkind -> llvalue option = "llvm_metadata"
external set_metadata : llvalue -> int -> llvalue -> unit = "llvm_set_metadata" external set_metadata : llvalue -> llmdkind -> llvalue -> unit = "llvm_set_metadata"
external clear_metadata : llvalue -> int -> unit = "llvm_clear_metadata" external clear_metadata : llvalue -> llmdkind -> unit = "llvm_clear_metadata"
(*--... Operations on metadata .......,.....................................--*) (*--... Operations on metadata .......,.....................................--*)
external mdstring : llcontext -> string -> llvalue = "llvm_mdstring" external mdstring : llcontext -> string -> llvalue = "llvm_mdstring"

View File

@ -48,6 +48,9 @@ type llbuilder
See the [llvm::MemoryBuffer] class. *) See the [llvm::MemoryBuffer] class. *)
type llmemorybuffer type llmemorybuffer
(** The kind id of metadata attached to an instruction. *)
type llmdkind
(** The kind of an [lltype], the result of [classify_type ty]. See the (** The kind of an [lltype], the result of [classify_type ty]. See the
[llvm::Type::TypeID] enumeration. *) [llvm::Type::TypeID] enumeration. *)
module TypeKind : sig module TypeKind : sig
@ -770,15 +773,15 @@ val has_metadata : llvalue -> bool
(** [metadata i kind] optionally returns the metadata associated with the (** [metadata i kind] optionally returns the metadata associated with the
kind [kind] in the instruction [i] See the function kind [kind] in the instruction [i] See the function
[llvm::Instruction::getMetadata]. *) [llvm::Instruction::getMetadata]. *)
val metadata : llvalue -> int -> llvalue option val metadata : llvalue -> llmdkind -> llvalue option
(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the (** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
instruction [i]. See the function [llvm::Instruction::setMetadata]. *) instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
val set_metadata : llvalue -> int -> llvalue -> unit val set_metadata : llvalue -> llmdkind -> llvalue -> unit
(** [clear_metadata i kind] clears the metadata of kind [kind] in the (** [clear_metadata i kind] clears the metadata of kind [kind] in the
instruction [i]. See the function [llvm::Instruction::setMetadata]. *) instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
val clear_metadata : llvalue -> int -> unit val clear_metadata : llvalue -> llmdkind -> unit
(** {7 Operations on metadata} *) (** {7 Operations on metadata} *)