(** The kind of an [lltype], the result of [classify_type ty]. See the
[llvm::Type::TypeID] enumeration. **)
-type type_kind =
- Void_type
-| Float_type
-| Double_type
-| X86fp80_type
-| Fp128_type
-| Ppc_fp128_type
-| Label_type
-| Integer_type
-| Function_type
-| Struct_type
-| Array_type
-| Pointer_type
-| Opaque_type
-| Vector_type
+module TypeKind : sig
+ type t =
+ Void
+ | Float
+ | Double
+ | X86fp80
+ | Fp128
+ | Ppc_fp128
+ | Label
+ | Integer
+ | Function
+ | Struct
+ | Array
+ | Pointer
+ | Opaque
+ | Vector
+end
(** The linkage of a global value, accessed with [linkage gv] and
[set_linkage l gv]. See [llvm::GlobalValue::LinkageTypes]. **)
-type linkage =
- External_linkage
-| Link_once_linkage
-| Weak_linkage
-| Appending_linkage
-| Internal_linkage
-| Dllimport_linkage
-| Dllexport_linkage
-| External_weak_linkage
-| Ghost_linkage
+module Linkage : sig
+ type t =
+ External
+ | Link_once
+ | Weak
+ | Appending
+ | Internal
+ | Dllimport
+ | Dllexport
+ | External_weak
+ | Ghost
+end
(** The linker visibility of a global value, accessed with [visibility gv] and
[set_visibility v gv]. See [llvm::GlobalValue::VisibilityTypes]. **)
-type visibility =
- Default_visibility
-| Hidden_visibility
-| Protected_visibility
+module Visibility : sig
+ type t =
+ Default
+ | Hidden
+ | Protected
+end
(* The following calling convention values may be accessed with
[function_call_conv f] and [set_function_call_conv conv f]. Calling
conventions are open-ended. *)
-val ccc : int (** [ccc] is the C calling convention. **)
-val fastcc : int (** [fastcc] is the calling convention to allow LLVM
+module CallConv : sig
+ val c : int (** [c] is the C calling convention. **)
+ val fast : int (** [fast] is the calling convention to allow LLVM
maximum optimization opportunities. Use only with
internal linkage. **)
-val coldcc : int (** [coldcc] is the calling convention for
+ val cold : int (** [cold] is the calling convention for
callee-save. **)
-val x86_stdcallcc : int (** [x86_stdcallcc] is the familiar stdcall calling
+ val x86_stdcall : int (** [x86_stdcall] is the familiar stdcall calling
convention from C. **)
-val x86_fastcallcc : int (** [x86_fastcallcc] is the familiar fastcall calling
+ val x86_fastcall : int (** [x86_fastcall] is the familiar fastcall calling
convention from C. **)
+end
(** The predicate for an integer comparison ([icmp]) instruction.
See the [llvm::ICmpInst::Predicate] enumeration. **)
-type int_predicate =
- Icmp_eq
-| Icmp_ne
-| Icmp_ugt
-| Icmp_uge
-| Icmp_ult
-| Icmp_ule
-| Icmp_sgt
-| Icmp_sge
-| Icmp_slt
-| Icmp_sle
+module Icmp : sig
+ type t =
+ | Eq
+ | Ne
+ | Ugt
+ | Uge
+ | Ult
+ | Ule
+ | Sgt
+ | Sge
+ | Slt
+ | Sle
+end
(** The predicate for a floating-point comparison ([fcmp]) instruction.
See the [llvm::FCmpInst::Predicate] enumeration. **)
-type real_predicate =
- Fcmp_false
-| Fcmp_oeq
-| Fcmp_ogt
-| Fcmp_oge
-| Fcmp_olt
-| Fcmp_ole
-| Fcmp_one
-| Fcmp_ord
-| Fcmp_uno
-| Fcmp_ueq
-| Fcmp_ugt
-| Fcmp_uge
-| Fcmp_ult
-| Fcmp_ule
-| Fcmp_une
-| Fcmp_true
+module Fcmp : sig
+ type t =
+ | False
+ | Oeq
+ | Ogt
+ | Oge
+ | Olt
+ | Ole
+ | One
+ | Ord
+ | Uno
+ | Ueq
+ | Ugt
+ | Uge
+ | Ult
+ | Ule
+ | Une
+ | True
+end
exception IoError of string
[llvm::Module::~Module]. **)
external dispose_module : llmodule -> unit = "llvm_dispose_module"
+(** [target_triple m] is the target specifier for the module [m], something like
+ [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. **)
+external target_triple: llmodule -> string
+ = "llvm_target_triple"
+
+(** [target_triple triple m] changes the target specifier for the module [m] to
+ the string [triple]. See the method [llvm::Module::setTargetTriple]. **)
+external set_target_triple: string -> llmodule -> unit
+ = "llvm_set_target_triple"
+
+(** [data_layout m] is the data layout specifier for the module [m], something
+ like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
+ method [llvm::Module::getDataLayout]. **)
+external data_layout: llmodule -> string
+ = "llvm_data_layout"
+
+(** [set_data_layout s m] changes the data layout specifier for the module [m]
+ to the string [s]. See the method [llvm::Module::setDataLayout]. **)
+external set_data_layout: string -> llmodule -> unit
+ = "llvm_set_data_layout"
+
(** [define_type_name name ty m] adds a named type to the module's symbol table.
Returns [true] if successful. If such a name already exists, then no entry
is added and [false] is returned. See the [llvm::Module::addTypeName]
(** [classify_type ty] returns the [type_kind] corresponding to the type [ty].
See the method [llvm::Type::getTypeID]. **)
-external classify_type : lltype -> type_kind = "llvm_classify_type"
+external classify_type : lltype -> TypeKind.t = "llvm_classify_type"
(** [string_of_lltype ty] returns a string describing the type [ty]. **)
val string_of_lltype : lltype -> string
(** [const_icmp pred c1 c2] returns the constant comparison of two integer
constants, [c1 pred c2].
See the method [llvm::ConstantExpr::getICmp]. **)
-external const_icmp : int_predicate -> llvalue -> llvalue -> llvalue
+external const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
= "llvm_const_icmp"
(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
point constants, [c1 pred c2].
See the method [llvm::ConstantExpr::getFCmp]. **)
-external const_fcmp : real_predicate -> llvalue -> llvalue -> llvalue
+external const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
= "llvm_const_fcmp"
(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
(** [linkage g] returns the linkage of the global value [g].
See the method [llvm::GlobalValue::getLinkage]. **)
-external linkage : llvalue -> linkage = "llvm_linkage"
+external linkage : llvalue -> Linkage.t = "llvm_linkage"
(** [set_linkage l g] sets the linkage of the global value [g] to [l].
See the method [llvm::GlobalValue::setLinkage]. **)
-external set_linkage : linkage -> llvalue -> unit = "llvm_set_linkage"
+external set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
(** [section g] returns the linker section of the global value [g].
See the method [llvm::GlobalValue::getSection]. **)
(** [visibility g] returns the linker visibility of the global value [g].
See the method [llvm::GlobalValue::getVisibility]. **)
-external visibility : llvalue -> visibility = "llvm_visibility"
+external visibility : llvalue -> Visibility.t = "llvm_visibility"
(** [set_visibility v g] sets the linker visibility of the global value [g] to
[v]. See the method [llvm::GlobalValue::setVisibility]. **)
-external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility"
+external set_visibility : Visibility.t -> llvalue -> unit
+ = "llvm_set_visibility"
(** [alignment g] returns the required alignment of the global value [g].
See the method [llvm::GlobalValue::getAlignment]. **)
(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. **)
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
+(*--... Operations on call sites ...........................................--*)
+
+(** [inst_call_conv ci] is the calling convention for the call or invoke
+ instruction [ci], which may be one of the values from the module [CallConv].
+ See the method [CallSite:: **)
+external instruction_call_conv: llvalue -> int
+ = "llvm_instruction_call_conv"
+
+(** [set_inst_call_conv cc ci] sets the calling convention for the call or
+ invoke instruction [ci] to the integer [cc], which can be one of the values
+ from the module [CallConv]. See the method [CallSite::]. **)
+external set_instruction_call_conv: int -> llvalue -> unit
+ = "llvm_set_instruction_call_conv"
+
(*--... Operations on phi nodes ............................................--*)
(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
(*===-- Instruction builders ----------------------------------------------===*)
+(** [builder] creates an instruction builder with no position. It is invalid to
+ use this builder until its position is set with [position_before] or
+ [position_at_end]. See the constructor for [llvm::LLVMBuilder]. **)
+external builder: unit-> llbuilder
+ = "llvm_builder"
+
(** [builder_before ins] creates an instruction builder positioned before the
instruction [isn]. See the constructor for [llvm::LLVMBuilder]. **)
external builder_before : llvalue -> llbuilder = "llvm_builder_before"
[%name = icmp %pred %x, %y]
instruction at the position specified by the instruction builder [b].
See the method [llvm::LLVMBuilder::CreateICmp]. **)
-external build_icmp : int_predicate -> llvalue -> llvalue -> string ->
+external build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
llbuilder -> llvalue = "llvm_build_icmp"
(** [build_fcmp pred x y name b] creates a
[%name = fcmp %pred %x, %y]
instruction at the position specified by the instruction builder [b].
See the method [llvm::LLVMBuilder::CreateFCmp]. **)
-external build_fcmp : real_predicate -> llvalue -> llvalue -> string ->
+external build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
llbuilder -> llvalue = "llvm_build_fcmp"
(*--... Miscellaneous instructions .........................................--*)