llvm.mli revision 45d6ac2cc13f7881687c2d7f03f9b9892fd85e6e
1bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen(*===-- llvm/llvm.mli - LLVM Ocaml Interface -------------------------------===*
28ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
38ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *                     The LLVM Compiler Infrastructure
48ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
5234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * This file is distributed under the University of Illinois Open Source
6234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * License. See LICENSE.TXT for details.
78ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
88ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *===----------------------------------------------------------------------===*)
98ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** Core API.
113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    This interface provides an ocaml API for the LLVM intermediate
133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    representation, the classes in the VMCore library. *)
143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Abstract types}
178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    These abstract types correlate directly to the LLVM VMCore classes. *)
190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The top-level container for all other LLVM Intermediate Representation (IR)
213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    objects. See the [llvm::Module] class. *)
228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llmodule
230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Each value in the LLVM IR has a type, an instance of [lltype]. See the
253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type] class. *)
263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksentype lltype
270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** When building recursive types using {!refine_type}, [lltype] values may
290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    become invalid; use [lltypehandle] to resolve this problem. See the
303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::AbstractTypeHolder] class. *)
311cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksentype lltypehandle
320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Any value in the LLVM IR. Functions, instructions, global variables,
340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, and much more are all [llvalues]. See the [llvm::Value] class.
353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    This type covers a wide range of subclasses. *)
368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llvalue
370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** A basic block in LLVM IR. See the [llvm::BasicBlock] class. *)
390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksentype llbasicblock
400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Used to generate instructions in the LLVM IR. See the [llvm::LLVMBuilder]
423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    class. *)
4346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentype llbuilder
448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
45da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(** Used to provide a module to JIT or interpreter.
463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ModuleProvider] class. *)
471ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksentype llmoduleprovider
481ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
49da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(** Used to efficiently handle large buffers of read-only binary data.
503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::MemoryBuffer] class. *)
51da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksentype llmemorybuffer
52da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The kind of an [lltype], the result of [classify_type ty]. See the
543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type::TypeID] enumeration. *)
55404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind : sig
56404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
57404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Void
58404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
59404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
68404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
69404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Opaque
70404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
7132eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
72404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linkage of a global value, accessed with {!linkage} and
753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_linkage}. See [llvm::GlobalValue::LinkageTypes]. *)
76404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage : sig
77404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
78404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    External
7914b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
80404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
81404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
82404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
83404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
84404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
85404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
86404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
87404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
88404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linker visibility of a global value, accessed with {!visibility} and
913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_visibility}. See [llvm::GlobalValue::VisibilityTypes]. *)
92404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility : sig
93404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
94404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Default
95404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
96404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
97404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The following calling convention values may be accessed with
1003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!function_call_conv} and {!set_function_call_conv}. Calling
1013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    conventions are open-ended. *)
1021475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv : sig
1033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  val c : int             (** [c] is the C calling convention. *)
1041475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val fast : int          (** [fast] is the calling convention to allow LLVM
1050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                              maximum optimization opportunities. Use only with
1063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              internal linkage. *)
1071475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val cold : int          (** [cold] is the calling convention for
1083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              callee-save. *)
1091475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_stdcall : int   (** [x86_stdcall] is the familiar stdcall calling
1103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1111475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_fastcall : int  (** [x86_fastcall] is the familiar fastcall calling
1123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1131475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
11446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
115e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute : sig
116e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
117e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
118e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
119e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
120e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
121e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
122e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
123e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
124e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
125e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
126e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
127e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
128e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
129e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for an integer comparison ([icmp]) instruction.
1313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ICmpInst::Predicate] enumeration. *)
132404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp : sig
133404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
134404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
135404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
136404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
137404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
138404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
139404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
140404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
141404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
142404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
143404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
144404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
14546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for a floating-point comparison ([fcmp]) instruction.
1473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::FCmpInst::Predicate] enumeration. *)
148404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp : sig
149404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
150404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
151404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
152404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
153404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
154404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
155404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
156404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
157404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
158404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
159404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
160404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
161404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
162404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
163404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
164404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
165404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
166404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
16746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** {6 Iteration} *)
1704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [Before b] and [At_end a] specify positions from the start of the ['b] list
172224fceb41f993fbc954345f053dab4e8caf28329Gordon Henriksen    of [a]. [llpos] is used to specify positions in and for forward iteration
1734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    through the various value lists maintained by the LLVM IR. *)
1744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
1754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
1764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
1774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [After b] and [At_start a] specify positions from the end of the ['b] list
1794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of [a]. [llrev_pos] is used for reverse iteration through the various value
1804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    lists maintained by the LLVM IR. *)
1814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
1824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
1834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
1844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Exceptions} *)
1873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
188da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
189da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
1928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [create_module id] creates a module with the supplied module ID. Modules are
1943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    not garbage collected; it is mandatory to call {!dispose_module} to free
1950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    memory. See the constructor [llvm::Module::Module]. *)
1968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal create_module : string -> llmodule = "llvm_create_module"
1978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
1990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
2000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
2013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
2028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal dispose_module : llmodule -> unit = "llvm_dispose_module"
2038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
204a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
2053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
206a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal target_triple: llmodule -> string
207a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                      = "llvm_target_triple"
208a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
209a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
2103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
211a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_target_triple: string -> llmodule -> unit
212a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                          = "llvm_set_target_triple"
213a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
214a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
215a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
2163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
217a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal data_layout: llmodule -> string
218a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                    = "llvm_data_layout"
219a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
220a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
2213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
222a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_data_layout: string -> llmodule -> unit
223a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                        = "llvm_set_data_layout"
224a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
2250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_type_name name ty m] adds a named type to the module's symbol table.
2260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    Returns [true] if successful. If such a name already exists, then no entry
2270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    is added and [false] is returned. See the [llvm::Module::addTypeName]
2283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method. *)
22946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_type_name : string -> lltype -> llmodule -> bool
23046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_add_type_name"
23146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_type_name name] removes a type name from the module's symbol
2330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    table. *)
23446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_type_name : string -> llmodule -> unit
23546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_delete_type_name"
2368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2373c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
2383c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
2393c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksenexternal dump_module : llmodule -> unit = "llvm_dump_module"
2403c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
2418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
2430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
2453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
246404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal classify_type : lltype -> TypeKind.t = "llvm_classify_type"
2470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
2498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
2508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
2520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The 1-bit integer type. See [llvm::Type::Int1Ty]. *)
2543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksenval i1_type : lltype
2550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The 8-bit integer type. See [llvm::Type::Int8Ty]. *)
2573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksenval i8_type : lltype
2580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The 16-bit integer type. See [llvm::Type::Int16Ty]. *)
2608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval i16_type : lltype
2610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The 32-bit integer type. See [llvm::Type::Int32Ty]. *)
2638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval i32_type : lltype
2640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The 64-bit integer type. See [llvm::Type::Int64Ty]. *)
2668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval i64_type : lltype
2670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [integer_type n] returns an integer type of bitwidth [n].
2693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::IntegerType::get]. *)
270957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal integer_type : int -> lltype = "llvm_integer_type"
2710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [integer_bitwidth ty] returns the number of bits in the integer type [ty].
2733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::IntegerType::getBitWidth]. *)
2748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal integer_bitwidth : lltype -> int = "llvm_integer_bitwidth"
2758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
2783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
2793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The IEEE 32-bit floating point type. See [llvm::Type::FloatTy]. *)
2808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval float_type : lltype
2810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The IEEE 64-bit floating point type. See [llvm::Type::DoubleTy]. *)
2838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval double_type : lltype
2840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The x87 80-bit floating point type. See [llvm::Type::X86_FP80Ty]. *)
2868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval x86fp80_type : lltype
2870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The IEEE 128-bit floating point type. See [llvm::Type::FP128Ty]. *)
2898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval fp128_type : lltype
2900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The PowerPC 128-bit floating point type. See [llvm::Type::PPC_FP128Ty]. *)
2928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval ppc_fp128_type : lltype
2938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
2953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
2960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
2980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
2993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
300957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal function_type : lltype -> lltype array -> lltype = "llvm_function_type"
3010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [va_arg_function_type ret_ty param_tys] is just like
3030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
3040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
3053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
306957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal var_arg_function_type : lltype -> lltype array -> lltype
307957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen                               = "llvm_var_arg_function_type"
3080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
3103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
3118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_var_arg : lltype -> bool = "llvm_is_var_arg"
3120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
3143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
315d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal return_type : lltype -> lltype = "LLVMGetReturnType"
3160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
3183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
3198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal param_types : lltype -> lltype array = "llvm_param_types"
3208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
3230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [struct_type tys] returns the structure type containing in the types in the
3253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    array [tys]. See the method [llvm::StructType::get]. *)
326957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal struct_type : lltype array -> lltype = "llvm_struct_type"
3270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
32886c9d6b33b16d90df9cc651a2590dee3d8918522Erick Tryzelaar(** [packed_struct_type tys] returns the packed structure type containing in the
32986c9d6b33b16d90df9cc651a2590dee3d8918522Erick Tryzelaar    types in the array [tys]. See the method [llvm::StructType::get]. *)
330957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal packed_struct_type : lltype array -> lltype = "llvm_packed_struct_type"
3310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_types sty] returns the constituent types of the struct type [sty].
3333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::StructType::getElementType]. *)
3348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal element_types : lltype -> lltype array = "llvm_element_types"
3350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
3373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
3388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_packed : lltype -> bool = "llvm_is_packed"
3398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
3420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
3443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
345957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal array_type : lltype -> int -> lltype = "llvm_array_type"
3460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
34857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
3493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
35057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal pointer_type : lltype -> lltype = "llvm_pointer_type"
35157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
35257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
35357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
3543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
35557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal qualified_pointer_type : lltype -> int -> lltype
35657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen                                = "llvm_qualified_pointer_type"
3570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
3593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
360957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal vector_type : lltype -> int -> lltype = "llvm_vector_type"
3618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
3633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
364d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal element_type : lltype -> lltype = "LLVMGetElementType"
3650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
3673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal array_length : lltype -> int = "llvm_array_length"
3690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
37057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
3713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
37257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal address_space : lltype -> int = "llvm_address_space"
37357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
3740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
3753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
3768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal vector_size : lltype -> int = "llvm_vector_size"
3778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
3800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [opaque_type ()] creates a new opaque type distinct from any other.
3820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    Opaque types are useful for building recursive types in combination with
383a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    {!refine_type}.
3843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See [llvm::OpaqueType::get]. *)
385957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal opaque_type : unit -> lltype = "llvm_opaque_type"
3860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [void_type] is the type of a function which does not return any value.
3883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See [llvm::Type::VoidTy]. *)
3898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval void_type : lltype
3900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [label_type] is the type of a basic block. See [llvm::Type::LabelTy]. *)
3928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval label_type : lltype
3938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on type handles} *)
3950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [handle_to_type ty] creates a handle to the type [ty]. If [ty] is later
3973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    refined as a result of a call to {!refine_type}, the handle will be updated;
3980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    any bare [lltype] references will become invalid.
3993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the class [llvm::PATypeHolder]. *)
4001cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal handle_to_type : lltype -> lltypehandle = "llvm_handle_to_type"
4010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of_handle tyh] resolves the type handle [tyh].
4033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PATypeHolder::get()]. *)
4041cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal type_of_handle : lltypehandle -> lltype = "llvm_type_of_handle"
4050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [refine_type opaque_ty ty] replaces the abstract type [opaque_ty] with the
4073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    concrete type [ty] in all users. Warning: This may invalidate {!lltype}
4083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values! Use {!lltypehandle} to manipulate potentially abstract types. See
4093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the method [llvm::Type::refineAbstractType]. *)
4101cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal refine_type : lltype -> lltype -> unit = "llvm_refine_type"
4111cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
4128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
4140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
4163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
4178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal type_of : llvalue -> lltype = "llvm_type_of"
4180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
4200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
4210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
4223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
4238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal value_name : llvalue -> string = "llvm_value_name"
4240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
4263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
4278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_value_name : string -> llvalue -> unit = "llvm_set_value_name"
4280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
4303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
43188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenexternal dump_value : llvalue -> unit = "llvm_dump_value"
4328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
4350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
4373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
438344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_constant : llvalue -> bool = "llvm_is_constant"
4390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
4413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
442e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_null : lltype -> llvalue = "LLVMConstNull"
4430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
4453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
446e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes"
4470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
4493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
450e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal undef : lltype -> llvalue = "LLVMGetUndef"
4510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
4533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
4548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_null : llvalue -> bool = "llvm_is_null"
4550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
4573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
458344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_undef : llvalue -> bool = "llvm_is_undef"
4598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
4620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
4643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
465e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_int : lltype -> int -> llvalue = "llvm_const_int"
4660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
4683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
469e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_of_int64 : lltype -> Int64.t -> bool -> llvalue
470e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                        = "llvm_const_of_int64"
4710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
47245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
47345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar * value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
47445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_int_of_string : lltype -> string -> int -> llvalue
47545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                   = "llvm_const_int_of_string"
47645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
4770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
4782b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
479e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_float : lltype -> float -> llvalue = "llvm_const_float"
4808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
48145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
48245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
48345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_float_of_string : lltype -> string -> llvalue
48445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                               = "llvm_const_float_of_string"
48545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
4863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
4880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_string s] returns the constant [i8] array with the values of the
4900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    characters in the string [s]. The array is not null-terminated (but see
4913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!const_stringz}). This value can in turn be used as the initializer for a
4923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    global variable. See the method [llvm::ConstantArray::get]. *)
493e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_string : string -> llvalue = "llvm_const_string"
4940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_stringz s] returns the constant [i8] array with the values of the
4960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    characters in the string [s] and a null terminator. This value can in turn
4970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    be used as the initializer for a global variable.
4983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
499e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_stringz : string -> llvalue = "llvm_const_stringz"
5000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
5020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
5030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
5043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
505e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
5060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_struct elts] returns the structured constant of type
5080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [struct_type (Array.map type_of elts)] and containing the values [elts].
5090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
5103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantStruct::get]. *)
511e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_struct : llvalue array -> llvalue = "llvm_const_struct"
5120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_packed_struct elts] returns the structured constant of type
5143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!packed_struct_type} [(Array.map type_of elts)] and containing the values
5150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [elts]. This value can in turn be used as the initializer for a global
5163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    variable. See the method [llvm::ConstantStruct::get]. *)
517e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_packed_struct : llvalue array -> llvalue
518e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                             = "llvm_const_packed_struct"
5190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
5210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
5223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
523e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_vector : llvalue array -> llvalue = "llvm_const_vector"
5248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
5270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
528ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
529ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
530ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
531ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
532ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sandsexternal align_of : lltype -> llvalue = "LLVMAlignOf"
533ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
5340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
5350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
536ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
5373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
538e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal size_of : lltype -> llvalue = "LLVMSizeOf"
5390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
5413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
5424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_neg : llvalue -> llvalue = "LLVMConstNeg"
5430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
5451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
5461b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fneg : llvalue -> llvalue = "LLVMConstFNeg"
5471b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
5493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
5504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_not : llvalue -> llvalue = "LLVMConstNot"
5510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
5533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
5544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd"
5550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
5571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
5581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
5591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd"
5601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5611b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
5621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
5631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fadd : llvalue -> llvalue -> llvalue = "LLVMConstFAdd"
5641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
5663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
5674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub"
5680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5691b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
5701b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
5711b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fsub : llvalue -> llvalue -> llvalue = "LLVMConstFSub"
5721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
5743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
5754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul"
5760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
5781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
5791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fmul : llvalue -> llvalue -> llvalue = "LLVMConstFMul"
5801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
5820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
5833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
5844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv"
5850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
5870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
5881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
5894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv"
5900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
5921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
5931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar		or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
5941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_exact_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstExactSDiv"
5951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
5960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
5970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
5983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
5994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv"
6000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
6020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
6033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
6044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem"
6050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
6070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
6083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
6094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem"
6100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
6120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
6133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
6144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem"
6150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
6170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
6183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
6194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd"
6200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
6220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
6233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
6244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr"
6250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
6270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
6283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
6294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor"
6300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
6320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
6333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
634404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
6354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_icmp"
6360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
6380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
6393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
640404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
6414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_fcmp"
6420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
6440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
6453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
6464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl"
6470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
6490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
6503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
6514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
6520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
6540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
6553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
6564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
6570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_gep pc indices] returns the constant [getElementPtr] of [p1] with the
6590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
6603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
6614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep"
6620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [p1]
6641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
6651b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
6661b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_in_bounds_gep : llvalue -> llvalue array -> llvalue
6671b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_in_bounds_gep"
6681b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
6700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
6713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
6724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
6730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
6750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
6763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
6774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
6780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
6800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
6813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
6824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"
6830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
6850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
6863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
6874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc"
6880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
6900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
6913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
6924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt"
6930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
6950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
6963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
6974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP"
6980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
7000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
7013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
7024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP"
7030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
7050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
7063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
7074647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI"
7080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
7100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
7113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
7124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI"
7130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
7150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
7163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
7174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt"
7180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
7200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
7213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
7224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr"
7230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
7250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
7263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
7274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast"
7280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
7301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
7311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
7321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_zext_or_bitcast : llvalue -> lltype -> llvalue
7331b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstZExtOrBitCast"
7341b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
7361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
7371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
7381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_sext_or_bitcast : llvalue -> lltype -> llvalue
7391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstSExtOrBitCast"
7401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
7421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
7431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
7441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_trunc_or_bitcast : llvalue -> lltype -> llvalue
7451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                                = "LLVMConstTruncOrBitCast"
7461b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7471b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
7481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
7491b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
7501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_pointercast : llvalue -> lltype -> llvalue
7511b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "LLVMConstPointerCast"
7521b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_intcast c ty] returns a constant zext, bitcast, or trunc for integer
7541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    -> integer casts of constant [c] to type [ty].
7551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getIntCast]. *)
7561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_intcast : llvalue -> lltype -> llvalue
7571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                       = "LLVMConstIntCast"
7581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
7601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar	  fp casts of constant [c] to type [ty].
7611b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
7621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fpcast : llvalue -> lltype -> llvalue
7631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                      = "LLVMConstFPCast"
7641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
7660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
7673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
7684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_select : llvalue -> llvalue -> llvalue -> llvalue
7694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                      = "LLVMConstSelect"
7700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
7720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
7730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
7743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
7754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_extractelement : llvalue -> llvalue -> llvalue
7764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                              = "LLVMConstExtractElement"
7770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
7790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
7800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
7810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
7820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
7833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
7844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
7854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstInsertElement"
7860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
7880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    See the LLVM Language Reference for details on the [sufflevector]
7890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
7903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
7914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
7924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstShuffleVector"
7934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
7951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
7961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
7971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_extractvalue : llvalue -> int array -> llvalue
7981b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_extractvalue"
7991b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8001b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
8011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
8021b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
8031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_insertvalue : llvalue -> llvalue -> int array -> llvalue
8041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "llvm_const_insertvalue"
8051b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
8073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
8080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
809dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
810dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
811dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal global_parent : llvalue -> llmodule = "LLVMGetGlobalParent"
812dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
8130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
8140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
8153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
8168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_declaration : llvalue -> bool = "llvm_is_declaration"
8170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
8193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
820404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal linkage : llvalue -> Linkage.t = "llvm_linkage"
8210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
8233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
824404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
8250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
8273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
8288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal section : llvalue -> string = "llvm_section"
8290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
8313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
8328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_section : string -> llvalue -> unit = "llvm_set_section"
8330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
8353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
836404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal visibility : llvalue -> Visibility.t = "llvm_visibility"
8370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
8393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
840404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_visibility : Visibility.t -> llvalue -> unit
841404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                        = "llvm_set_visibility"
8420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
8443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
8458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal alignment : llvalue -> int = "llvm_alignment"
8460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
8483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
8498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
8508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
8513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
8523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
8530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
8550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a global variable already exists,
8560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing global differs, then a bitcast
8573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
8588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal declare_global : lltype -> string -> llmodule -> llvalue
8598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                        = "llvm_declare_global"
8600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
8620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    initializer [init] in module [m]. If the named global already exists, it is
8630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed.
8643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
8658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal define_global : string -> llvalue -> llmodule -> llvalue
8668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                       = "llvm_define_global"
8670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
8690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
8703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
8716d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_global : string -> llmodule -> llvalue option
8726d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                       = "llvm_lookup_global"
8730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
8753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
8768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal delete_global : llvalue -> unit = "llvm_delete_global"
8770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
8794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
8804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
8814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
8824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_begin : llmodule -> (llmodule, llvalue) llpos
8834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_global_begin"
8844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
8864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
8874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
8884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_succ : llvalue -> (llmodule, llvalue) llpos
8894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_succ"
8904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
8924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
8934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
8944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
8964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
8974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
8984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
9004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
9014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
9024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
9034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_end : llmodule -> (llmodule, llvalue) llrev_pos
9044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_global_end"
9054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
9074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
9084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
9094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_pred : llvalue -> (llmodule, llvalue) llrev_pos
9104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_pred"
9114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
9134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
9144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
9154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
9174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
9184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
9194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
9210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
9223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
9230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal is_global_constant : llvalue -> bool = "llvm_is_global_constant"
9240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
9273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
9280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal set_global_constant : bool -> llvalue -> unit
9290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                             = "llvm_set_global_constant"
9300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
9323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
93346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal global_initializer : llvalue -> llvalue = "LLVMGetInitializer"
9340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
9360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
9373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
9388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer"
9390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
9410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
9423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
9438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal remove_initializer : llvalue -> unit = "llvm_remove_initializer"
9440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
9460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
9473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
9488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_thread_local : llvalue -> bool = "llvm_is_thread_local"
9490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
9510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
9523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
9538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
9548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
9553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
9563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
9570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
9590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
9600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
9613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
96246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal declare_function : string -> lltype -> llmodule -> llvalue
96346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_declare_function"
9640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
9660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
9670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
9683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
96946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_function : string -> lltype -> llmodule -> llvalue
97046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         = "llvm_define_function"
9710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
9730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
9743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
9756d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_function : string -> llmodule -> llvalue option
9766d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                         = "llvm_lookup_function"
9770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
9793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
98046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_function : llvalue -> unit = "llvm_delete_function"
9810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
9834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
9844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
9854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
9864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_begin : llmodule -> (llmodule, llvalue) llpos
9874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                        = "llvm_function_begin"
9884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
9904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
9914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
9924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_succ : llvalue -> (llmodule, llvalue) llpos
9934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_succ"
9944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
9964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
9974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
9984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
10004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
10014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
10024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
10044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
10054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
10064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
10074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_end : llmodule -> (llmodule, llvalue) llrev_pos
10084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_function_end"
10094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
10114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
10124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_pred : llvalue -> (llmodule, llvalue) llrev_pos
10134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_pred"
10144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
10164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
10174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
10184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
10204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
10214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
10224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
10243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
102546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal is_intrinsic : llvalue -> bool = "llvm_is_intrinsic"
10260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
10283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
102946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal function_call_conv : llvalue -> int = "llvm_function_call_conv"
10300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
10320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
10333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
103446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal set_function_call_conv : int -> llvalue -> unit
103546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                = "llvm_set_function_call_conv"
103646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
10375eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
103880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
10395eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
10405eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal gc : llvalue -> string option = "llvm_gc"
104180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
10425eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
10435eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
10445eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal set_gc : string option -> llvalue -> unit = "llvm_set_gc"
104580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1046e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1047e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
1048e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_function_attr : llvalue -> Attribute.t -> unit
1049e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_add_function_attr"
1050e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1051e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1052e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
1053e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_function_attr : llvalue -> Attribute.t -> unit
1054e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                              = "llvm_remove_function_attr"
10553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1056dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1057dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1058dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1059dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1060dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal params : llvalue -> llvalue array = "llvm_params"
1061dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1062dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1063dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1064dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param : llvalue -> int -> llvalue = "llvm_param"
1065dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1066dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1067dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1068dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param_parent : llvalue -> llvalue = "LLVMGetParamParent"
1069dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
10704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
10714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
10724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
10734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
10744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin"
10754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
10774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
10784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
10794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ"
10804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
10824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
10834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
10844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
10864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
10874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
10884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
10904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
10914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
10924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
10934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end"
10944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
10964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
10974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_pred : llvalue -> (llvalue, llvalue) llrev_pos
10984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_param_pred"
10994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
11014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
11024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
11034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
11054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
11064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
11074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1108e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
1109e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_param_attr : llvalue -> Attribute.t -> unit = "llvm_add_param_attr"
1110e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1111e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
1112e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_param_attr : llvalue -> Attribute.t -> unit
1113e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_remove_param_attr"
1114e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1115e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1116e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal set_param_alignment : llvalue -> int -> unit
1117e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                             = "llvm_set_param_alignment"
1118dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
11193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
11200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
11223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
112346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks"
11240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
11263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
112746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock"
11280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
11303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
113146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_block : llbasicblock -> unit = "llvm_delete_block"
11320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [append_block name f] creates a new basic block named [name] at the end of
11340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    function [f].
11353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
113646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal append_block : string -> llvalue -> llbasicblock = "llvm_append_block"
11370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [insert_block name bb] creates a new basic block named [name] before the
11390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    basic block [bb].
11403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
114146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal insert_block : string -> llbasicblock -> llbasicblock
114246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_insert_block"
11430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1144dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1145dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1146dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent"
1147dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
11484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
11494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
11504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
11514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
11524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_begin : llvalue -> (llvalue, llbasicblock) llpos
11534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_block_begin"
11544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
11564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
11574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
11584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
11594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_succ"
11604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
11624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
11634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
11644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
11664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
11674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
11684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
11704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
11714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
11724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
11734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
11744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                   = "llvm_block_end"
11754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_pred gv] returns the function list position preceding [After gv].
11774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
11784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
11794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_pred"
11804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
11824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
11834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
11844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
11864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
11874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
11884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
119046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
11910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
11930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
11943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
119546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_is_block : llvalue -> bool = "llvm_value_is_block"
11960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
119846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
119946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1200cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1201dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1202dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1203dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1204dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1205dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent"
1206dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1207033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1208033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1209033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1210033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1211033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1212033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_begin"
1213033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1214033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1215033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1216033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1217033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_succ"
1218033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1219033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1220033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1221033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1222033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1223033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1224033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1225033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1226033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1227033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1228033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1229033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1230033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1231033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1232033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_end"
1233033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1234033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1235033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1236033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1237033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_pred"
1238033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1239033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1240033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1241033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1242033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1243dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
12453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
12473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
12483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
12493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1250cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal instruction_call_conv: llvalue -> int
1251cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                              = "llvm_instruction_call_conv"
1252cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1253dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1254dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1255dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1256dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
12573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1258cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal set_instruction_call_conv: int -> llvalue -> unit
1259cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                                  = "llvm_set_instruction_call_conv"
1260cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1261e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1262e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1263e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
1264e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1265e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_add_instruction_param_attr"
1266e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1267e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1268e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1269e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
1270e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1271e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_remove_instruction_param_attr"
1272e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
127307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** {Operations on call instructions (only)} *)
127407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
127507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
127607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
127707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
127807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal is_tail_call : llvalue -> bool = "llvm_is_tail_call"
127907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
128007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
128107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
128207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
128307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call"
12843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
12860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
12883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
12892618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
12902618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                      = "llvm_add_incoming"
12910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
12933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
12942618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
12952618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
129646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
12973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
12990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1300dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [builder ()] creates an instruction builder with no position. It is invalid
1301dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    to use this builder until its position is set with {!position_before} or
13023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!position_at_end}. See the constructor for [llvm::LLVMBuilder]. *)
1303033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal builder : unit -> llbuilder = "llvm_builder"
1304033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1305033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1306033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1307033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval builder_at : (llbasicblock, llvalue) llpos -> llbuilder
1308a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
13090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
13103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
1311033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval builder_before : llvalue -> llbuilder
13120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
13143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
1315033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval builder_at_end : llbasicblock -> llbuilder
1316033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1317033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1318033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1319033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1320033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1321033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                          = "llvm_position_builder"
13220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
13243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1325033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
13260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
13283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1329033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
133046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1331dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1332dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1333dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1334dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1335dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal insertion_block : llbuilder -> llbasicblock = "llvm_insertion_block"
1336dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13375c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
13385c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
13395c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
13405c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarexternal insert_into_builder : llvalue -> string -> llbuilder -> unit
13415c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                             = "llvm_insert_into_builder"
13425c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
13433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
13443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
13450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
13470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
13480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
13493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
135046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret_void : llbuilder -> llvalue = "llvm_build_ret_void"
13510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
13530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
13540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
13553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
135646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret : llvalue -> llbuilder -> llvalue = "llvm_build_ret"
13570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1358e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1359e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1360e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1361e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1362e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1363e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_aggregate_ret"
1364e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
13650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
13660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [b %bb]
13670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
13683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
136946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_br : llbasicblock -> llbuilder -> llvalue = "llvm_build_br"
13700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
13720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [b %cond, %tbb, %fbb]
13730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
13743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
137546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
137646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         llvalue = "llvm_build_cond_br"
13770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
137821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
13790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
138021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
138121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
13823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
138346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
138446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_switch"
13850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
138621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
138721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
138821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
138921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksenexternal add_case : llvalue -> llvalue -> llbasicblock -> unit
139021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen                  = "llvm_add_case"
139121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
13920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
13930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
13940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
13953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
139646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_invoke : llvalue -> llvalue array -> llbasicblock ->
139746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
139846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
13990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unwind b] creates an
14010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unwind]
14020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
140446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unwind : llbuilder -> llvalue = "llvm_build_unwind"
14050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
14070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
14080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
141046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unreachable : llbuilder -> llvalue = "llvm_build_unreachable"
141146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
14123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
14133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
14140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
14160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
14170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
141946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
142046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_add"
14210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1422e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_nswadd x y name b] creates a
1423e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1424e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1425e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1426e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1427e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_nsw_add"
1428e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1429e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1430e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1431e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1432e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1433e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1434e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fadd"
1435e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
14360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
14370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
14380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
144046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
144146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_sub"
14420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1443e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1444e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1445e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1446e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1447e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1448e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fsub"
1449e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
14500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
14510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
14520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
145446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
145546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_mul"
14560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1457e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
1458e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
1459e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1460e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
1461e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1462e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fmul"
1463e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
14640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
14650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
14660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
146846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
146946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_udiv"
14700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
14720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
14730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
147546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
147646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sdiv"
14770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1478e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
1479e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
1480e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1481e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
1482e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1483e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                          = "llvm_build_exact_sdiv"
1484e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
14850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
14860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
14870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
148946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
149046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_fdiv"
14910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
14930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
14940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
149646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
149746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_urem"
14980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
15000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
15010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
150346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
150446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_srem"
15050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
15070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
15080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
151046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
151146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_frem"
15120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
15140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
15150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
151746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
151846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_shl"
15190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
15210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
15220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
152446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
152546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_lshr"
15260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
15280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
15290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
153146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
153246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_ashr"
15330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
15350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
15360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_and"
15400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
15420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
15430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
154546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
154646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                  = "llvm_build_or"
15470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
15490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
15500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
155346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_xor"
15540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
15560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
15570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
15593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
156046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_neg : llvalue -> string -> llbuilder -> llvalue
156146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_neg"
15620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
15640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
15650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
15673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
156846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_not : llvalue -> string -> llbuilder -> llvalue
156946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_not"
157046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
15723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
15730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_malloc ty name b] creates a
15750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = malloc %ty]
15760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
157846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_malloc : lltype -> string -> llbuilder -> llvalue
157946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_malloc"
15800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_malloc ty n name b] creates a
15820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = malloc %ty, %n]
15830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMalloc]. *)
158546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_malloc : lltype -> llvalue -> string -> llbuilder ->
158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_malloc"
15870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
15890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
15900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
159246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_alloca : lltype -> string -> llbuilder -> llvalue
159346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_alloca"
15940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
15960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
15970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
159946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
160046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_alloca"
16010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_free v b] creates a
16030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [free %v]
16040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFree]. *)
160646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_free : llvalue -> llbuilder -> llvalue = "llvm_build_free"
16070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
16090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
16100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
161246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_load : llvalue -> string -> llbuilder -> llvalue
161346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_load"
16140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
16160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
16170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
161946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_store : llvalue -> llvalue -> llbuilder -> llvalue
162046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_store"
16210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1622632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
1623e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
16240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
162646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
162746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_gep"
162846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1629e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
1630e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
1631e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1632e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
1633e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
1634e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                               llvalue = "llvm_build_in_bounds_gep"
1635e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1636e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
1637e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
1638e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1639e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
1640e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_struct_gep : llvalue -> int -> string -> llbuilder ->
1641e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            llvalue = "llvm_build_struct_gep"
1642e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1643e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
1644e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
1645e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
1646e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_string : string -> string -> llbuilder -> llvalue
1647e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_global_string"
1648e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1649e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
1650e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
1651e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar	 	builder [b].
1652e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
1653e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_stringptr : string -> string -> llbuilder -> llvalue
1654e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                = "llvm_build_global_stringptr"
1655e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
16580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
16600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
16610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
166346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
166446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_trunc"
16650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
16670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
16680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_zext"
16720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
16740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
16750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
167746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
167846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sext"
16790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
16810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
16820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
168446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
168546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptoui"
16860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
16880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
16890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
169146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
169246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptosi"
16930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
16950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
16960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
169846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
169946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_uitofp"
17000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
17020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
17030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
170546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
170646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_sitofp"
17070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
17090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
17100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
171246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
171346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_fptrunc"
17140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
17160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
17170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
171946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
172046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_fpext"
17210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
17230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
17240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
172646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
172746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_prttoint"
17280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
17300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
17310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
173346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
173446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_inttoptr"
17350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
17370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
17380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
1739e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
174046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
174146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_bitcast"
174246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1743e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
1744e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1745e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1746e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1747e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_zext_or_bitcast"
1748e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1749e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
1750e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1751e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
1752e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1753e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_sext_or_bitcast"
1754e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1755e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
1756e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1757e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1758e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1759e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                  llvalue = "llvm_build_trunc_or_bitcast"
1760e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1761e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
1762e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1763e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
1764e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
1765e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_pointercast"
1766e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1767e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
1768e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1769e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
1770e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1771e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_intcast"
1772e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1773e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
1774e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1775e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
1776e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1777e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_fpcast"
1778e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
17793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
17803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
17810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
17830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
17840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
1786404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
178746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_icmp"
17880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
17900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
17910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
1793404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
179446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_fcmp"
179546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
17963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
17973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
17980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
18000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
18010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
1802a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
18033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
18042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
18052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     llvalue = "llvm_build_phi"
18060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
18080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
18090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
181146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
181246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_call"
18130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
18150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
18160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
181946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llvalue = "llvm_build_select"
18200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
18220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
18230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
182546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
182646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_va_arg"
18270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
18290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
18300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
183246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
183346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                llvalue = "llvm_build_extractelement"
18340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
18360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
18370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
183946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_insertelement : llvalue -> llvalue -> llvalue -> string ->
184046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_insertelement"
18410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
18430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
18440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
184646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
184746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_shufflevector"
18481ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1849e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg idx name b] creates a
1850e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
1851e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1852e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
1853e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
1854e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            = "llvm_build_extractvalue"
1855e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1856e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
1857e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
1858e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1859e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
1860e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
1861e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llvalue = "llvm_build_insertvalue"
1862e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1863e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
1864e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
1865e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1866e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
1867e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_null : llvalue -> string -> llbuilder -> llvalue
1868e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_is_null"
1869e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1870e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
1871e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
1872e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1873e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
1874e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_not_null : llvalue -> string -> llbuilder -> llvalue
1875e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_is_not_null"
1876e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1877e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
1878e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
1879e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar	 	instruction builder [b].
1880e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
1881e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
1882e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_ptrdiff"
18831ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
18843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Module providers} *)
18851ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1886da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule ModuleProvider : sig
1887da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [create_module_provider m] encapsulates [m] in a module provider and takes
18883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      ownership of the module. See the constructor
18893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      [llvm::ExistingModuleProvider::ExistingModuleProvider]. *)
1890da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external create : llmodule -> llmoduleprovider
1891da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen                  = "LLVMCreateModuleProviderForExistingModule"
18923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  
1893da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [dispose_module_provider mp] destroys the module provider [mp] as well as
18943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      the contained module. *)
1895da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmoduleprovider -> unit = "llvm_dispose_module_provider"
1896da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
1897da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
18983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
1900da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1901da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
19023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
19033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
19043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
1905da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
1906da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
1907da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [stdin ()] is the memory buffer containing the contents of standard input.
19083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
1909da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
1910da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
19113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
1912da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
1913da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
1914d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1915d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1916d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
1917d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1918d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
1919d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
1920d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
1921d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
1922d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1923d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
1924d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
1925d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
1926d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
1927d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create : unit -> [ `Module ] t = "llvm_passmanager_create"
1928d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1929d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create_function mp] constructs a new function-by-function
1930d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      pass pipeline over the module provider [mp]. It does not take ownership of
1931d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      [mp]. This type of pipeline is suitable for code generation and JIT
1932d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      compilation tasks.
1933d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
1934d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create_function : llmoduleprovider -> [ `Function ] t
1935d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                           = "LLVMCreateFunctionPassManager"
1936d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1937d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
1938d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
1939d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
1940d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
1941d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_module : llmodule -> [ `Module ] t -> bool
1942d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                      = "llvm_passmanager_run_module"
1943d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1944d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
1945d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
1946d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
1947d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
1948d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize"
1949d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1950d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
1951d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
1952d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
1953d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
1954d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_function : llvalue -> [ `Function ] t -> bool
1955d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                        = "llvm_passmanager_run_function"
1956d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1957d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
1958d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
1959d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
1960d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
1961d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize"
1962d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
1963d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
1964d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module provider.
1965d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
1966d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external dispose : [< any ] t -> unit = "llvm_passmanager_dispose"
1967d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
1968