llvm.mli revision c59286bff1cca8c4fa15f390c9002db94117614e
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
205371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** The top-level container for all LLVM global data. See the
215371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext] class. *)
225371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaartype llcontext
235371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The top-level container for all other LLVM Intermediate Representation (IR)
253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    objects. See the [llvm::Module] class. *)
268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llmodule
270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Each value in the LLVM IR has a type, an instance of [lltype]. See the
293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type] class. *)
303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksentype lltype
310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** When building recursive types using {!refine_type}, [lltype] values may
330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    become invalid; use [lltypehandle] to resolve this problem. See the
343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::AbstractTypeHolder] class. *)
351cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksentype lltypehandle
360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Any value in the LLVM IR. Functions, instructions, global variables,
380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, and much more are all [llvalues]. See the [llvm::Value] class.
393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    This type covers a wide range of subclasses. *)
408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llvalue
410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** A basic block in LLVM IR. See the [llvm::BasicBlock] class. *)
430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksentype llbasicblock
440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Used to generate instructions in the LLVM IR. See the [llvm::LLVMBuilder]
463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    class. *)
4746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentype llbuilder
488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
49da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(** Used to provide a module to JIT or interpreter.
503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ModuleProvider] class. *)
511ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksentype llmoduleprovider
521ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
53da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(** Used to efficiently handle large buffers of read-only binary data.
543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::MemoryBuffer] class. *)
55da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksentype llmemorybuffer
56da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The kind of an [lltype], the result of [classify_type ty]. See the
583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type::TypeID] enumeration. *)
59404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind : sig
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Void
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
68404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
69404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
70404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
71404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
72404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
73404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Opaque
74404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
7532eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
761940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar  | Union
77404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linkage of a global value, accessed with {!linkage} and
803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_linkage}. See [llvm::GlobalValue::LinkageTypes]. *)
81404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage : sig
82404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
83404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    External
8414b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
85404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
864aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
87404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
884aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
89404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
90404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
914aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
92404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
93404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
94404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
95404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
964aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
974aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
98404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linker visibility of a global value, accessed with {!visibility} and
1013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_visibility}. See [llvm::GlobalValue::VisibilityTypes]. *)
102404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility : sig
103404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
104404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Default
105404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
106404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
107404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
1088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The following calling convention values may be accessed with
1103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!function_call_conv} and {!set_function_call_conv}. Calling
1113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    conventions are open-ended. *)
1121475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv : sig
1133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  val c : int             (** [c] is the C calling convention. *)
1141475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val fast : int          (** [fast] is the calling convention to allow LLVM
1150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                              maximum optimization opportunities. Use only with
1163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              internal linkage. *)
1171475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val cold : int          (** [cold] is the calling convention for
1183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              callee-save. *)
1191475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_stdcall : int   (** [x86_stdcall] is the familiar stdcall calling
1203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1211475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_fastcall : int  (** [x86_fastcall] is the familiar fastcall calling
1223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1231475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
12446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
125e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute : sig
126e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
127e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
128e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
129e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
130e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
131e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
132e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
133e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
134e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
135e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
136e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
137e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
138f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
139f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
140f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
141f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
142f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
143f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
144f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
145f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
146f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
147570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
148e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
149e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for an integer comparison ([icmp]) instruction.
1513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ICmpInst::Predicate] enumeration. *)
152404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp : sig
153404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
154404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
155404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
156404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
157404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
158404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
159404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
160404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
161404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
162404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
163404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
164404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
16546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for a floating-point comparison ([fcmp]) instruction.
1673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::FCmpInst::Predicate] enumeration. *)
168404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp : sig
169404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
170404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
171404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
172404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
173404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
174404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
175404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
176404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
177404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
178404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
179404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
180404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
181404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
182404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
183404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
184404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
185404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
186404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
18746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** {6 Iteration} *)
1904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [Before b] and [At_end a] specify positions from the start of the ['b] list
192224fceb41f993fbc954345f053dab4e8caf28329Gordon Henriksen    of [a]. [llpos] is used to specify positions in and for forward iteration
1934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    through the various value lists maintained by the LLVM IR. *)
1944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
1954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
1964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
1974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [After b] and [At_start a] specify positions from the end of the ['b] list
1994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of [a]. [llrev_pos] is used for reverse iteration through the various value
2004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    lists maintained by the LLVM IR. *)
2014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
2024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
2034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
2044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Exceptions} *)
2073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
208da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
209da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** {6 Contexts} *)
2125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_context ()] creates a context for storing the "global" state in
2145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    LLVM. See the constructor [llvm::LLVMContext]. *)
2155371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_context : unit -> llcontext = "llvm_create_context"
2165371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2175371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [destroy_context ()] destroys a context. See the destructor
2185371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext::~LLVMContext]. *)
219dd7da4f368c7e1139ef78f36ef173a8b8f8f1c61Chris Lattnerexternal dispose_context : llcontext -> unit = "llvm_dispose_context"
2205371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2215371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** See the function [llvm::getGlobalContext]. *)
2225371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal global_context : unit -> llcontext = "llvm_global_context"
2235371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
22446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdkind_id context name] returns the MDKind ID that corresponds to the
22546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    name [name] in the context [context].  See the function
22646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::LLVMContext::getMDKindID]. *)
22746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdkind_id : llcontext -> string -> int = "llvm_mdkind_id"
22846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
2295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
2318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2325371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_module context id] creates a module with the supplied module ID in
2335371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context].  Modules are not garbage collected; it is mandatory
2345371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    to call {!dispose_module} to free memory. See the constructor
2355371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::Module::Module]. *)
2365371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_module : llcontext -> string -> llmodule = "llvm_create_module"
2378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
2390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
2400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
2413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
2428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal dispose_module : llmodule -> unit = "llvm_dispose_module"
2438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
244a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
2453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
246a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal target_triple: llmodule -> string
247a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                      = "llvm_target_triple"
248a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
249a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
2503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
251a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_target_triple: string -> llmodule -> unit
252a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                          = "llvm_set_target_triple"
253a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
254a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
255a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
2563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
257a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal data_layout: llmodule -> string
258a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                    = "llvm_data_layout"
259a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
260a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
2613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
262a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_data_layout: string -> llmodule -> unit
263a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                        = "llvm_set_data_layout"
264a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
2650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_type_name name ty m] adds a named type to the module's symbol table.
2660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    Returns [true] if successful. If such a name already exists, then no entry
2670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    is added and [false] is returned. See the [llvm::Module::addTypeName]
2683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method. *)
26946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_type_name : string -> lltype -> llmodule -> bool
27046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_add_type_name"
27146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_type_name name] removes a type name from the module's symbol
2730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    table. *)
27446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_type_name : string -> llmodule -> unit
27546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_delete_type_name"
2768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2773c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
2783c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
2793c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksenexternal dump_module : llmodule -> unit = "llvm_dump_module"
2803c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
2818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
2830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
2853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
286404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal classify_type : lltype -> TypeKind.t = "llvm_classify_type"
2870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [type_context ty] returns the {!llcontext} corresponding to the type [ty].
2895371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    See the method [llvm::Type::getContext]. *)
2905371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal type_context : lltype -> llcontext = "llvm_type_context"
2915371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
2938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
2948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
2960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
297b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i1_type c] returns an integer type of bitwidth 1 in the context [c]. See
298b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int1Ty]. *)
299b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i1_type : llcontext -> lltype = "llvm_i1_type"
3000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
301b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i8_type c] returns an integer type of bitwidth 8 in the context [c]. See
302b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int8Ty]. *)
303b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i8_type : llcontext -> lltype = "llvm_i8_type"
3040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
305b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i16_type c] returns an integer type of bitwidth 16 in the context [c]. See
306b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int16Ty]. *)
307b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i16_type : llcontext -> lltype = "llvm_i16_type"
3080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
309b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i32_type c] returns an integer type of bitwidth 32 in the context [c]. See
310b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int32Ty]. *)
311b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i32_type : llcontext -> lltype = "llvm_i32_type"
3120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
313b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i64_type c] returns an integer type of bitwidth 64 in the context [c]. See
314b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int64Ty]. *)
315b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i64_type : llcontext -> lltype = "llvm_i64_type"
3160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
317b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_type c n] returns an integer type of bitwidth [n] in the context
318b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See the method [llvm::IntegerType::get]. *)
319b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal integer_type : llcontext -> int -> lltype = "llvm_integer_type"
3200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
321b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_bitwidth c ty] returns the number of bits in the integer type [ty]
322b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    in the context [c].  See the method [llvm::IntegerType::getBitWidth]. *)
3238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal integer_bitwidth : lltype -> int = "llvm_integer_bitwidth"
3248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
3273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
328b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [float_type c] returns the IEEE 32-bit floating point type in the context
329b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FloatTy]. *)
330b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal float_type : llcontext -> lltype = "llvm_float_type"
3310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
332b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [double_type c] returns the IEEE 64-bit floating point type in the context
333b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::DoubleTy]. *)
334b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal double_type : llcontext -> lltype = "llvm_double_type"
3350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
336b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [x86fp80_type c] returns the x87 80-bit floating point type in the context
337b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::X86_FP80Ty]. *)
338b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal x86fp80_type : llcontext -> lltype = "llvm_x86fp80_type"
3390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
340b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [fp128_type c] returns the IEEE 128-bit floating point type in the context
341b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FP128Ty]. *)
342b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal fp128_type : llcontext -> lltype = "llvm_fp128_type"
3430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
344b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [ppc_fp128_type c] returns the PowerPC 128-bit floating point type in the
345b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. See [llvm::Type::PPC_FP128Ty]. *)
346b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type"
3478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
3500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
3520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
3533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
354957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal function_type : lltype -> lltype array -> lltype = "llvm_function_type"
3550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [va_arg_function_type ret_ty param_tys] is just like
3570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
3580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
3593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
360957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal var_arg_function_type : lltype -> lltype array -> lltype
361957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen                               = "llvm_var_arg_function_type"
3620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
3643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
3658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_var_arg : lltype -> bool = "llvm_is_var_arg"
3660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
3683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
369d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal return_type : lltype -> lltype = "LLVMGetReturnType"
3700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
3723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
3738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal param_types : lltype -> lltype array = "llvm_param_types"
3748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
3770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [struct_type context tys] returns the structure type in the context
3795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [context] containing in the types in the array [tys]. See the method
3805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
3815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal struct_type : llcontext -> lltype array -> lltype
3825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                     = "llvm_struct_type"
3830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [packed_struct_type context ys] returns the packed structure type in the
3855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    context [context] containing in the types in the array [tys]. See the method
3865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
3875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal packed_struct_type : llcontext -> lltype array -> lltype
3885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                            = "llvm_packed_struct_type"
3890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3901940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [struct_element_types sty] returns the constituent types of the struct type
3911940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [sty]. See the method [llvm::StructType::getElementType]. *)
3921940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal struct_element_types : lltype -> lltype array
3931940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                              = "llvm_struct_element_types"
3940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
3963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
3978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_packed : lltype -> bool = "llvm_is_packed"
3988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4001940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** {7 Operations on union types} *)
4011940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4021940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [union_type context tys] returns the union type in the context [context]
4031940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    containing the types in the array [tys]. See the method
4041940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [llvm::UnionType::get] *)
4051940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal union_type : llcontext -> lltype array -> lltype = "llvm_union_type"
4061940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4071940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [union_element_types uty] returns the constituent types of the union type
4081940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [uty]. See the method [llvm::UnionType::getElementType]. *)
4091940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal union_element_types : lltype -> lltype array
4101940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                             = "llvm_union_element_types"
4111940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4121940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
4140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
4163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
417957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal array_type : lltype -> int -> lltype = "llvm_array_type"
4180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
42057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
4213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
42257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal pointer_type : lltype -> lltype = "llvm_pointer_type"
42357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
42457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
42557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
4263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
42757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal qualified_pointer_type : lltype -> int -> lltype
42857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen                                = "llvm_qualified_pointer_type"
4290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
4313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
432957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal vector_type : lltype -> int -> lltype = "llvm_vector_type"
4338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
4353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
436d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal element_type : lltype -> lltype = "LLVMGetElementType"
4370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
4393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
4408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal array_length : lltype -> int = "llvm_array_length"
4410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
44257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
4433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
44457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal address_space : lltype -> int = "llvm_address_space"
44557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
4460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
4473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
4488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal vector_size : lltype -> int = "llvm_vector_size"
4498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
4520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
453b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [opaque_type c] creates a new opaque type distinct from any other in the
454b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. Opaque types are useful for building recursive types in
455b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    combination with {!refine_type}. See [llvm::OpaqueType::get]. *)
456b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal opaque_type : llcontext -> lltype = "llvm_opaque_type"
4570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
458b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [void_type c] creates a type of a function which does not return any
459b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value in the context [c]. See [llvm::Type::VoidTy]. *)
460b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal void_type : llcontext -> lltype = "llvm_void_type"
4610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
462b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [label_type c] creates a type of a basic block in the context [c]. See
463b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::LabelTy]. *)
464b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal label_type : llcontext -> lltype = "llvm_label_type"
4658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on type handles} *)
4670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [handle_to_type ty] creates a handle to the type [ty]. If [ty] is later
4693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    refined as a result of a call to {!refine_type}, the handle will be updated;
4700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    any bare [lltype] references will become invalid.
4713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the class [llvm::PATypeHolder]. *)
4721cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal handle_to_type : lltype -> lltypehandle = "llvm_handle_to_type"
4730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of_handle tyh] resolves the type handle [tyh].
4753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PATypeHolder::get()]. *)
4761cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal type_of_handle : lltypehandle -> lltype = "llvm_type_of_handle"
4770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [refine_type opaque_ty ty] replaces the abstract type [opaque_ty] with the
4793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    concrete type [ty] in all users. Warning: This may invalidate {!lltype}
4803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values! Use {!lltypehandle} to manipulate potentially abstract types. See
4813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the method [llvm::Type::refineAbstractType]. *)
4821cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal refine_type : lltype -> lltype -> unit = "llvm_refine_type"
4831cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
4848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
4860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
4883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
4898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal type_of : llvalue -> lltype = "llvm_type_of"
4900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
4920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
4930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
4943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
4958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal value_name : llvalue -> string = "llvm_value_name"
4960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
4983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
4998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_value_name : string -> llvalue -> unit = "llvm_set_value_name"
5000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
5023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
50388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenexternal dump_value : llvalue -> unit = "llvm_dump_value"
5048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
5070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
5093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
510344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_constant : llvalue -> bool = "llvm_is_constant"
5110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
5133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
514e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_null : lltype -> llvalue = "LLVMConstNull"
5150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
5173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
518e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes"
5190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
5213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
522e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal undef : lltype -> llvalue = "LLVMGetUndef"
5230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
5253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
5268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_null : llvalue -> bool = "llvm_is_null"
5270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
5293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
530344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_undef : llvalue -> bool = "llvm_is_undef"
5318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
53346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on instructions} *)
53446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
53546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [has_metadata i] returns whether or not the instruction [i] has any
53646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    metadata attached to it. See the function
53746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::hasMetadata]. *)
53846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal has_metadata : llvalue -> bool = "llvm_has_metadata"
53946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
54046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [metadata i kind] optionally returns the metadata associated with the
54146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    kind [kind] in the instruction [i] See the function
54246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::getMetadata]. *)
54346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal metadata : llvalue -> int -> llvalue option = "llvm_metadata"
54446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
54546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
54646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
54746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_metadata : llvalue -> int -> llvalue -> unit = "llvm_set_metadata"
54846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
54946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_metadata i kind] clears the metadata of kind [kind] in the
55046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
55146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal clear_metadata : llvalue -> int -> unit = "llvm_clear_metadata"
55246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on metadata} *)
55546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdstring c s] returns the MDString of the string [s] in the context [c].
55746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
55846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdstring : llcontext -> string -> llvalue = "llvm_mdstring"
55946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
56046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdnode c elts] returns the MDNode containing the values [elts] in the
56146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    context [c].
56246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
56346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode"
56446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
56546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
5663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
5670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
5693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
570e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_int : lltype -> int -> llvalue = "llvm_const_int"
5710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
5733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
574e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_of_int64 : lltype -> Int64.t -> bool -> llvalue
575e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                        = "llvm_const_of_int64"
5760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
57745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
57845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar * value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
57945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_int_of_string : lltype -> string -> int -> llvalue
58045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                   = "llvm_const_int_of_string"
58145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
5820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
5832b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
584e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_float : lltype -> float -> llvalue = "llvm_const_float"
5858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
58645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
58745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
58845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_float_of_string : lltype -> string -> llvalue
58945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                               = "llvm_const_float_of_string"
59045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
5913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
5930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
594b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_string c s] returns the constant [i8] array with the values of the
595b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] in the context [c]. The array is not 
596b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    null-terminated (but see {!const_stringz}). This value can in turn be used
597b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    as the initializer for a global variable. See the method
598b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::ConstantArray::get]. *)
599b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_string : llcontext -> string -> llvalue = "llvm_const_string"
6000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
601b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_stringz c s] returns the constant [i8] array with the values of the
602b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] and a null terminator in the context [c]. This
603b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value can in turn be used as the initializer for a global variable.
6043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
605b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_stringz : llcontext -> string -> llvalue = "llvm_const_stringz"
6060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
6080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
6090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
6103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
611e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
6120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_struct context elts] returns the structured constant of type
6145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [struct_type (Array.map type_of elts)] and containing the values [elts]
6155371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    in the context [context]. This value can in turn be used as the initializer
6165371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for a global variable. See the method [llvm::ConstantStruct::get]. *)
6175371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_struct : llcontext -> llvalue array -> llvalue
6185371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                      = "llvm_const_struct"
6195371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
6205371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_packed_struct context elts] returns the structured constant of
6215371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    type {!packed_struct_type} [(Array.map type_of elts)] and containing the
6225371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    values [elts] in the context [context]. This value can in turn be used as
6235371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the initializer for a global variable. See the method
6245371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::ConstantStruct::get]. *)
6255371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_packed_struct : llcontext -> llvalue array -> llvalue
626e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                             = "llvm_const_packed_struct"
6270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
6290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
6303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
631e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_vector : llvalue array -> llvalue = "llvm_const_vector"
6328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6331940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [const_union ty v] returns the union constant of type [union_type tys] and
6341940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    containing the value [v]. See the method [llvm::ConstantUnion::get]. *)
6351940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal const_union : lltype -> llvalue -> llvalue = "LLVMConstUnion"
6361940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
6373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
6383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
6390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
640ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
641ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
642ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
643ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
644ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sandsexternal align_of : lltype -> llvalue = "LLVMAlignOf"
645ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
6460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
6470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
648ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
6493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
650e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal size_of : lltype -> llvalue = "LLVMSizeOf"
6510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
6533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
6544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_neg : llvalue -> llvalue = "LLVMConstNeg"
6550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
65619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_neg c] returns the arithmetic negation of the constant [c] with
65719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the negation overflows.
65819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWNeg]. *)
65919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_neg : llvalue -> llvalue = "LLVMConstNSWNeg"
66019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
66119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_neg c] returns the arithmetic negation of the constant [c] with
66219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the negation overflows.
66319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNUWNeg]. *)
66419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_neg : llvalue -> llvalue = "LLVMConstNUWNeg"
66519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6661b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
6671b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
6681b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fneg : llvalue -> llvalue = "LLVMConstFNeg"
6691b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
6713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
6724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_not : llvalue -> llvalue = "LLVMConstNot"
6730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
6753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
6764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd"
6770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
6791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
6801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
6811b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd"
6821b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
68319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_add c1 c2] returns the constant sum of two constants with no
68419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    unsigned wrapping. The result is undefined if the sum overflows.
68519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
68619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_add : llvalue -> llvalue -> llvalue = "LLVMConstNUWAdd"
68719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
6891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
6901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fadd : llvalue -> llvalue -> llvalue = "LLVMConstFAdd"
6911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
6933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
6944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub"
6950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
69619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_sub c1 c2] returns the constant difference of two constants with
69719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
69819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
69919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNSWSub"
70019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
70119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_sub c1 c2] returns the constant difference of two constants with
70219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
70319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
70419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNUWSub"
70519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
7061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
7071b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
7081b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fsub : llvalue -> llvalue -> llvalue = "LLVMConstFSub"
7091b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
7113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
7124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul"
7130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
71419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_mul c1 c2] returns the constant product of two constants with
71519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
71619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
71719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNSWMul"
71819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
71919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_mul c1 c2] returns the constant product of two constants with
72019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
72119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
72219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNUWMul"
72319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
7241b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
7251b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
7261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fmul : llvalue -> llvalue -> llvalue = "LLVMConstFMul"
7271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
7290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
7303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
7314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv"
7320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
7340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
7351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
7364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv"
7370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
7391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
7405371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
7411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_exact_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstExactSDiv"
7421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
7440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
7453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
7464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv"
7470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
7490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
7503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
7514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem"
7520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
7540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
7553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
7564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem"
7570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
7590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
7603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
7614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem"
7620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
7640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
7664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd"
7670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
7690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
7714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr"
7720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
7740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
7764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor"
7770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
7790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
7803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
781404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
7824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_icmp"
7830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
7850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
7863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
787404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
7884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_fcmp"
7890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
7910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
7923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
7934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl"
7940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
7960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
7973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
7984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
7990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
8010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
8023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
8034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
8040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_gep pc indices] returns the constant [getElementPtr] of [p1] with the
8060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
8073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
8084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep"
8090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [p1]
8111b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
8121b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
8131b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_in_bounds_gep : llvalue -> llvalue array -> llvalue
8141b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_in_bounds_gep"
8151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
8170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
8183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
8194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
8200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
8233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
8244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
8250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
8270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
8283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
8294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"
8300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
8320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
8333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
8344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc"
8350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
8370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
8383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
8394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt"
8400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
8420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
8433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
8444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP"
8450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
8470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
8483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
8494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP"
8500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
8520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
8533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
8544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI"
8550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
8570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
8583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
8594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI"
8600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
8620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
8633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
8644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt"
8650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
8670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
8683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
8694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr"
8700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
8720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
8733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
8744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast"
8750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
8771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
8791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_zext_or_bitcast : llvalue -> lltype -> llvalue
8801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstZExtOrBitCast"
8811b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8821b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
8831b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8841b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
8851b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_sext_or_bitcast : llvalue -> lltype -> llvalue
8861b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstSExtOrBitCast"
8871b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
8891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
8911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_trunc_or_bitcast : llvalue -> lltype -> llvalue
8921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                                = "LLVMConstTruncOrBitCast"
8931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
8951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
8961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
8971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_pointercast : llvalue -> lltype -> llvalue
8981b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "LLVMConstPointerCast"
8991b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9001b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_intcast c ty] returns a constant zext, bitcast, or trunc for integer
9011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    -> integer casts of constant [c] to type [ty].
9021b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getIntCast]. *)
9031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_intcast : llvalue -> lltype -> llvalue
9041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                       = "LLVMConstIntCast"
9051b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
9075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    fp casts of constant [c] to type [ty].
9081b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
9091b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fpcast : llvalue -> lltype -> llvalue
9101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                      = "LLVMConstFPCast"
9111b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
9130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
9143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
9154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_select : llvalue -> llvalue -> llvalue -> llvalue
9164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                      = "LLVMConstSelect"
9170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
9190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
9200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
9213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
9224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_extractelement : llvalue -> llvalue -> llvalue
9234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                              = "LLVMConstExtractElement"
9240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
9270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
9280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
9290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
9303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
9314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
9324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstInsertElement"
9330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
9350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    See the LLVM Language Reference for details on the [sufflevector]
9360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
9373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
9384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
9394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstShuffleVector"
9404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
9421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
9431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
9441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_extractvalue : llvalue -> int array -> llvalue
9451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_extractvalue"
9461b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9471b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
9481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
9491b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
9501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_insertvalue : llvalue -> llvalue -> int array -> llvalue
9511b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "llvm_const_insertvalue"
9521b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
953c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [block_address f bb] returns the address of the basic block [bb] in the
954c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    function [f]. See the method [llvm::BasicBlock::get]. *)
955c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress"
956c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
9573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
9583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
9590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
960dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
961dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
962dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal global_parent : llvalue -> llmodule = "LLVMGetGlobalParent"
963dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
9640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
9650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
9663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
9678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_declaration : llvalue -> bool = "llvm_is_declaration"
9680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
9703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
971404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal linkage : llvalue -> Linkage.t = "llvm_linkage"
9720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
9743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
975404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
9760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
9783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
9798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal section : llvalue -> string = "llvm_section"
9800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
9823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
9838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_section : string -> llvalue -> unit = "llvm_set_section"
9840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
9863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
987404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal visibility : llvalue -> Visibility.t = "llvm_visibility"
9880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
9903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
991404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_visibility : Visibility.t -> llvalue -> unit
992404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                        = "llvm_set_visibility"
9930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
9953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
9968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal alignment : llvalue -> int = "llvm_alignment"
9970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
9993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
10008ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
10018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
10023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
10033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
10040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
10060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a global variable already exists,
10070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing global differs, then a bitcast
10083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
10098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal declare_global : lltype -> string -> llmodule -> llvalue
10108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                        = "llvm_declare_global"
10110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
10130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    initializer [init] in module [m]. If the named global already exists, it is
10140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed.
10153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
10168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal define_global : string -> llvalue -> llmodule -> llvalue
10178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                       = "llvm_define_global"
10180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
10200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
10213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
10226d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_global : string -> llmodule -> llvalue option
10236d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                       = "llvm_lookup_global"
10240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
10263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
10278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal delete_global : llvalue -> unit = "llvm_delete_global"
10280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
10304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
10314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
10324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
10334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_begin : llmodule -> (llmodule, llvalue) llpos
10344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_global_begin"
10354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
10374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
10384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
10394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_succ : llvalue -> (llmodule, llvalue) llpos
10404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_succ"
10414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
10434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
10444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
10454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
10474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
10484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
10494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
10514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
10524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
10534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
10544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_end : llmodule -> (llmodule, llvalue) llrev_pos
10554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_global_end"
10564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
10584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
10594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
10604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_pred : llvalue -> (llmodule, llvalue) llrev_pos
10614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_pred"
10624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
10644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
10654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
10664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
10684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
10694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
10704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
10720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
10733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
10740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal is_global_constant : llvalue -> bool = "llvm_is_global_constant"
10750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
10770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
10783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
10790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal set_global_constant : bool -> llvalue -> unit
10800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                             = "llvm_set_global_constant"
10810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
10833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
108446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal global_initializer : llvalue -> llvalue = "LLVMGetInitializer"
10850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
10870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
10883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
10898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer"
10900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
10920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
10933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
10948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal remove_initializer : llvalue -> unit = "llvm_remove_initializer"
10950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
10970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
10983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
10998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_thread_local : llvalue -> bool = "llvm_is_thread_local"
11000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
11020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
11033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
11048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
11058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
11063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
11073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
11080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
11100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
11110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
11123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
111346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal declare_function : string -> lltype -> llmodule -> llvalue
111446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_declare_function"
11150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
11170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
11180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
11193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
112046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_function : string -> lltype -> llmodule -> llvalue
112146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         = "llvm_define_function"
11220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
11240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
11253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
11266d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_function : string -> llmodule -> llvalue option
11276d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                         = "llvm_lookup_function"
11280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
11303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
113146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_function : llvalue -> unit = "llvm_delete_function"
11320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
11344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
11354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
11364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
11374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_begin : llmodule -> (llmodule, llvalue) llpos
11384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                        = "llvm_function_begin"
11394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
11414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
11424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
11434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_succ : llvalue -> (llmodule, llvalue) llpos
11444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_succ"
11454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
11474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
11484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
11494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
11514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
11524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
11534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
11554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
11564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
11574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
11584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_end : llmodule -> (llmodule, llvalue) llrev_pos
11594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_function_end"
11604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
11624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
11634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_pred : llvalue -> (llmodule, llvalue) llrev_pos
11644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_pred"
11654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
11674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
11684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
11694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
11714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
11724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
11734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
11753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
117646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal is_intrinsic : llvalue -> bool = "llvm_is_intrinsic"
11770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
11793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
118046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal function_call_conv : llvalue -> int = "llvm_function_call_conv"
11810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
11830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
11843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
118546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal set_function_call_conv : int -> llvalue -> unit
118646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                = "llvm_set_function_call_conv"
118746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
11885eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
118980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
11905eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
11915eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal gc : llvalue -> string option = "llvm_gc"
119280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
11935eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
11945eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
11955eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal set_gc : string option -> llvalue -> unit = "llvm_set_gc"
119680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1197e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1198e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
1199e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_function_attr : llvalue -> Attribute.t -> unit
1200e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_add_function_attr"
1201e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1202e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1203e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
1204e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_function_attr : llvalue -> Attribute.t -> unit
1205e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                              = "llvm_remove_function_attr"
12063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1207dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1208dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1209dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1210dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1211dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal params : llvalue -> llvalue array = "llvm_params"
1212dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1213dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1214dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1215dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param : llvalue -> int -> llvalue = "llvm_param"
1216dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1217dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1218dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1219dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param_parent : llvalue -> llvalue = "LLVMGetParamParent"
1220dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
12224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
12234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
12244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
12254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin"
12264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
12284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
12294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
12304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ"
12314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
12334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
12344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
12354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
12374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
12384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
12394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
12414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
12424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
12434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
12444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end"
12454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
12474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
12484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_pred : llvalue -> (llvalue, llvalue) llrev_pos
12494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_param_pred"
12504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
12524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
12534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
12544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
12564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
12574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
12584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1259e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
1260e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_param_attr : llvalue -> Attribute.t -> unit = "llvm_add_param_attr"
1261e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1262e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
1263e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_param_attr : llvalue -> Attribute.t -> unit
1264e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_remove_param_attr"
1265e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1266e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1267e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal set_param_alignment : llvalue -> int -> unit
1268e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                             = "llvm_set_param_alignment"
1269dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
12710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
12733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
127446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks"
12750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
12773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
127846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock"
12790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
12813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
128246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_block : llbasicblock -> unit = "llvm_delete_block"
12830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1284b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [append_block c name f] creates a new basic block named [name] at the end of
1285b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    function [f] in the context [c].
12863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1287b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal append_block : llcontext -> string -> llvalue -> llbasicblock
1288b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar                      = "llvm_append_block"
12890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1290b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [insert_block c name bb] creates a new basic block named [name] before the
1291b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    basic block [bb] in the context [c].
12923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1293b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal insert_block : llcontext -> string -> llbasicblock -> llbasicblock
129446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_insert_block"
12950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1296dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1297dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1298dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent"
1299dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
13014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
13024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
13034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
13044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_begin : llvalue -> (llvalue, llbasicblock) llpos
13054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_block_begin"
13064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
13084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
13094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
13104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
13114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_succ"
13124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
13144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
13154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
13164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
13184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
13194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
13204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
13224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
13234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
13244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
13254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
13264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                   = "llvm_block_end"
13274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_pred gv] returns the function list position preceding [After gv].
13294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
13304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
13314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_pred"
13324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
13344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
13354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
13364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
13384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
13394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
13404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
13430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
13450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
13463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
134746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_is_block : llvalue -> bool = "llvm_value_is_block"
13480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
135046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
135146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1352cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1353dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1354dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1355dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1356dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1357dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent"
1358dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1359033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1360033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1361033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1362033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1363033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1364033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_begin"
1365033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1366033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1367033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1368033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1369033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_succ"
1370033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1371033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1372033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1373033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1374033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1375033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1376033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1377033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1378033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1379033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1380033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1381033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1382033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1383033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1384033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_end"
1385033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1386033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1387033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1388033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1389033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_pred"
1390033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1391033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1392033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1393033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1394033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1395dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
13973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
13983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
13993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
14003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
14013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1402cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal instruction_call_conv: llvalue -> int
1403cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                              = "llvm_instruction_call_conv"
1404cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1405dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1406dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1407dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1408dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
14093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1410cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal set_instruction_call_conv: int -> llvalue -> unit
1411cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                                  = "llvm_set_instruction_call_conv"
1412cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1413e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1414e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1415e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
1416e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1417e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_add_instruction_param_attr"
1418e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1419e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1420e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1421e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
1422e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1423e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_remove_instruction_param_attr"
1424e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
142507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** {Operations on call instructions (only)} *)
142607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
142707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
142807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
142907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
143007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal is_tail_call : llvalue -> bool = "llvm_is_tail_call"
143107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
143207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
143307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
143407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
143507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call"
14363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
14373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
14380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
14403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
14412618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
14422618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                      = "llvm_add_incoming"
14430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
14453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
14462618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
14472618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
144846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
14493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
14503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
14510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14525371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [builder context] creates an instruction builder with no position in
14535371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context]. It is invalid to use this builder until its position
14545371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    is set with {!position_before} or {!position_at_end}. See the constructor
14555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for [llvm::LLVMBuilder]. *)
14565371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal builder : llcontext -> llbuilder = "llvm_builder"
1457033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1458033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1459033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
14605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at : llcontext -> (llbasicblock, llvalue) llpos -> llbuilder
1461a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
14620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
14633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
14645371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_before : llcontext -> llvalue -> llbuilder
14650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
14673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
14685371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at_end : llcontext -> llbasicblock -> llbuilder
1469033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1470033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1471033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1472033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1473033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1474033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                          = "llvm_position_builder"
14750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
14773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1478033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
14790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
14813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1482033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
148346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1484dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1485dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1486dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1487dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1488dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal insertion_block : llbuilder -> llbasicblock = "llvm_insertion_block"
1489dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14905c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
14915c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
14925c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
14935c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarexternal insert_into_builder : llvalue -> string -> llbuilder -> unit
14945c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                             = "llvm_insert_into_builder"
14955c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
149646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Metadata} *)
149746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
149846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_current_debug_location b md] sets the current debug location [md] in
149946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    the builder [b].
150046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetDebugLocation]. *)
150146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_current_debug_location : llbuilder -> llvalue -> unit
150246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                    = "llvm_set_current_debug_location"
150346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
150446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_current_debug_location b] clears the current debug location in the
150546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    builder [b]. *)
150646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal clear_current_debug_location : llbuilder -> unit
150746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                      = "llvm_clear_current_debug_location"
150846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
150946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [current_debug_location b] returns the current debug location, or None
151046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    if none is currently set.
151146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::GetDebugLocation]. *)
151246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal current_debug_location : llbuilder -> llvalue option
151346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                = "llvm_current_debug_location"
151446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
151546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_inst_debug_location b i] sets the current debug location of the builder
151646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [b] to the instruction [i].
151746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetInstDebugLocation]. *)
151846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_inst_debug_location : llbuilder -> llvalue -> unit
151946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                 = "llvm_set_inst_debug_location"
15203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
15213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
15220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
15240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
15250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
152746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret_void : llbuilder -> llvalue = "llvm_build_ret_void"
15280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
15300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
15310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
153346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret : llvalue -> llbuilder -> llvalue = "llvm_build_ret"
15340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1535e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1536e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1537e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1538e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1539e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1540e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_aggregate_ret"
1541e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
15420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
15431430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %bb]
15440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
154646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_br : llbasicblock -> llbuilder -> llvalue = "llvm_build_br"
15470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
15491430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %cond, %tbb, %fbb]
15500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
155346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         llvalue = "llvm_build_cond_br"
15540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
155521491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
15560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
155721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
155821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
15593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
156046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
156146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_switch"
15620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
156321491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
156421491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
156521491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
156621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksenexternal add_case : llvalue -> llvalue -> llbasicblock -> unit
156721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen                  = "llvm_add_case"
156821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
1569c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [build_indirect_br addr count b] creates a
1570c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    [indirectbr %addr]
1571c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    instruction at the position specified by the instruction builder [b] with
1572c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    space reserved for [count] destinations.
1573c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIndirectBr]. *)
1574c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal build_indirect_br : llvalue -> int -> llbuilder -> llvalue
1575c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                           = "llvm_build_indirect_br"
1576c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
1577c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [add_destination br bb] adds the basic block [bb] as a possible branch
1578c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    location for the indirectbr instruction [br].
1579c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::IndirectBrInst::addDestination]. **)
1580c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal add_destination : llvalue -> llbasicblock -> unit
1581c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                         = "llvm_add_destination"
1582c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
15830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
15840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
15850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_invoke : llvalue -> llvalue array -> llbasicblock ->
158846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
158946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
15900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unwind b] creates an
15920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unwind]
15930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
159546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unwind : llbuilder -> llvalue = "llvm_build_unwind"
15960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
15980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
15990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
160146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unreachable : llbuilder -> llvalue = "llvm_build_unreachable"
160246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
16033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
16050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
16070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
16080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
161046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
161146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_add"
16120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16131430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar(** [build_nsw_add x y name b] creates a
1614e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1615e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1616e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1617e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1618e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_nsw_add"
1619e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
162019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_add x y name b] creates a
162119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw add %x, %y]
162219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
162319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWAdd]. *)
162419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
162519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                      = "llvm_build_nuw_add"
162619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1627e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1628e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1629e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1630e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1631e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1632e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fadd"
1633e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
16350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
16360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
163946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_sub"
16400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
164119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_sub x y name b] creates a
164219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub %x, %y]
164319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
164419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWSub]. *)
164519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
164619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_sub"
164719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
164819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_sub x y name b] creates a
164919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub %x, %y]
165019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
165119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWSub]. *)
165219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
165319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_sub"
165419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1655e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1656e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1657e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1658e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1659e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1660e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fsub"
1661e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
16630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
16640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
166646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
166746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_mul"
16680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
166919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_mul x y name b] creates a
167019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw mul %x, %y]
167119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
167219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWMul]. *)
167319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
167419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_mul"
167519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
167619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_mul x y name b] creates a
167719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw mul %x, %y]
167819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
167919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWMul]. *)
168019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
168119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_mul"
168219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1683e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
1684e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
1685e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1686e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
1687e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1688e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fmul"
1689e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
16910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
16920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
169446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
169546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_udiv"
16960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
16980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
16990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
170146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
170246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sdiv"
17030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1704e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
1705e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
1706e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1707e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
1708e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1709e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                          = "llvm_build_exact_sdiv"
1710e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
17110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
17120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
17130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
171546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
171646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_fdiv"
17170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
17190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
17200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
172246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
172346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_urem"
17240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
17260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
17270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
172946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
173046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_srem"
17310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
17330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
17340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
173646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
173746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_frem"
17380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
17400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
17410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
174346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
174446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_shl"
17450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
17470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
17480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
175046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
175146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_lshr"
17520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
17540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
17550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
175746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
175846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_ashr"
17590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
17610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
17620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
176446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
176546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_and"
17660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
17680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
17690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
177146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
177246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                  = "llvm_build_or"
17730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
17750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
17760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_xor"
17800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
17820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
17830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
17853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
178646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_neg : llvalue -> string -> llbuilder -> llvalue
178746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_neg"
17880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
178919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_neg x name b] creates a
179019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub 0, %x]
179119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
179219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
179319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
179419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
179519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_neg"
179619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
179719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_neg x name b] creates a
179819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub 0, %x]
179919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
180019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
180119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
180219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
180319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_neg"
180419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
180519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_fneg x name b] creates a
180619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = fsub 0, %x]
180719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
180819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
180919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFNeg]. *)
181019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_fneg : llvalue -> string -> llbuilder -> llvalue
181119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                    = "llvm_build_fneg"
181219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
18130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
18140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
18150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
18173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_not : llvalue -> string -> llbuilder -> llvalue
181946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_not"
182046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
18213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
18230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
18250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
18260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
182846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_alloca : lltype -> string -> llbuilder -> llvalue
182946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_alloca"
18300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
18320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
18330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
183546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
183646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_alloca"
18370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
18390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
18400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
184246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_load : llvalue -> string -> llbuilder -> llvalue
184346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_load"
18440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
18460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
18470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
184946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_store : llvalue -> llvalue -> llbuilder -> llvalue
185046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_store"
18510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1852632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
1853e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
18540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
185646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
185746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_gep"
185846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1859e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
1860e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
1861e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1862e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
1863e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
1864e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                               llvalue = "llvm_build_in_bounds_gep"
1865e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1866e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
1867e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
1868e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1869e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
1870e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_struct_gep : llvalue -> int -> string -> llbuilder ->
1871e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            llvalue = "llvm_build_struct_gep"
1872e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1873e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
1874e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
1875e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
1876e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_string : string -> string -> llbuilder -> llvalue
1877e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_global_string"
1878e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1879e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
1880e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
18815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    builder [b].
1882e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
1883e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_stringptr : string -> string -> llbuilder -> llvalue
1884e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                = "llvm_build_global_stringptr"
1885e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
18880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
18900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
18910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
189346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
189446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_trunc"
18950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
18970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
18980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
190046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
190146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_zext"
19020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
19040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
19050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
190746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
190846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sext"
19090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
19110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
19120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
191446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
191546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptoui"
19160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
19180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
19190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
192146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
192246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptosi"
19230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
19250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
19260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
192846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
192946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_uitofp"
19300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
19320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
19330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
193546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
193646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_sitofp"
19370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
19390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
19400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
194246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
194346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_fptrunc"
19440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
19460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
19470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
194946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
195046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_fpext"
19510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
19530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
19540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
195646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
195746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_prttoint"
19580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
19600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
19610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
196346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
196446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_inttoptr"
19650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
19670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
19680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
1969e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
197046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
197146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_bitcast"
197246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1973e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
1974e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1975e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1976e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1977e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_zext_or_bitcast"
1978e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1979e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
1980e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1981e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
1982e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1983e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_sext_or_bitcast"
1984e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1985e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
1986e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1987e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1988e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1989e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                  llvalue = "llvm_build_trunc_or_bitcast"
1990e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1991e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
1992e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1993e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
1994e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
1995e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_pointercast"
1996e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1997e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
1998e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1999e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
2000e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2001e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_intcast"
2002e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2003e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
2004e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2005e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
2006e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2007e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_fpcast"
2008e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
20093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
20103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
20110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
20130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
20140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
2016404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
201746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_icmp"
20180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
20200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
20210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
2023404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
202446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_fcmp"
202546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
20263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
20273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
20280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
20300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
20310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2032a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
20333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
20342618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
20352618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     llvalue = "llvm_build_phi"
20360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
20380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
20390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
204146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
204246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_call"
20430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
20450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
20460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
204846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
204946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llvalue = "llvm_build_select"
20500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
20520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
20530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
205546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
205646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_va_arg"
20570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
20590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
20600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
206246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
206346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                llvalue = "llvm_build_extractelement"
20640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
20660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
20670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
206946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_insertelement : llvalue -> llvalue -> llvalue -> string ->
207046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_insertelement"
20710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
20730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
20740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
207646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
207746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_shufflevector"
20781ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2079e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg idx name b] creates a
2080e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
2081e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2082e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
2083e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
2084e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            = "llvm_build_extractvalue"
2085e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2086e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
2087e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
2088e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2089e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
2090e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
2091e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llvalue = "llvm_build_insertvalue"
2092e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2093e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
2094e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
2095e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2096e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
2097e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_null : llvalue -> string -> llbuilder -> llvalue
2098e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_is_null"
2099e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2100e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
2101e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
2102e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2103e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
2104e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_not_null : llvalue -> string -> llbuilder -> llvalue
2105e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_is_not_null"
2106e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2107e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
2108e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
21095371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    instruction builder [b].
2110e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
2111e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
2112e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_ptrdiff"
21131ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
21143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Module providers} *)
21151ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2116da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule ModuleProvider : sig
2117da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [create_module_provider m] encapsulates [m] in a module provider and takes
21183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      ownership of the module. See the constructor
21193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      [llvm::ExistingModuleProvider::ExistingModuleProvider]. *)
2120da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external create : llmodule -> llmoduleprovider
2121da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen                  = "LLVMCreateModuleProviderForExistingModule"
21223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  
2123da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [dispose_module_provider mp] destroys the module provider [mp] as well as
21243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      the contained module. *)
2125da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmoduleprovider -> unit = "llvm_dispose_module_provider"
2126da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2127da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
21283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
21293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
2130da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2131da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
21323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
21333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
21343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
2135da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
2136da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
2137da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [stdin ()] is the memory buffer containing the contents of standard input.
21383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
2139da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
2140da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
21413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
2142da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
2143da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2144d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2145d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2146d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
2147d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2148d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
2149d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
2150d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
2151d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
2152d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2153d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
2154d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
2155d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
2156d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
2157d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create : unit -> [ `Module ] t = "llvm_passmanager_create"
2158d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2159d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create_function mp] constructs a new function-by-function
2160d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      pass pipeline over the module provider [mp]. It does not take ownership of
2161d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      [mp]. This type of pipeline is suitable for code generation and JIT
2162d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      compilation tasks.
2163d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
2164d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create_function : llmoduleprovider -> [ `Function ] t
2165d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                           = "LLVMCreateFunctionPassManager"
2166d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2167d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
2168d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
2169d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
2170d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
2171d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_module : llmodule -> [ `Module ] t -> bool
2172d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                      = "llvm_passmanager_run_module"
2173d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2174d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
2175d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
2176d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
2177d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
2178d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize"
2179d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2180d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
2181d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
2182d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
2183d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
2184d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_function : llvalue -> [ `Function ] t -> bool
2185d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                        = "llvm_passmanager_run_function"
2186d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2187d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
2188d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
2189d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
2190d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
2191d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize"
2192d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2193d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
2194d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module provider.
2195d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
2196d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external dispose : [< any ] t -> unit = "llvm_passmanager_dispose"
2197d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
2198