llvm.mli revision 19f047f5f6c44d1cd5681f9314b3ff5e7bae122d
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
2245371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
2268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2275371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_module context id] creates a module with the supplied module ID in
2285371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context].  Modules are not garbage collected; it is mandatory
2295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    to call {!dispose_module} to free memory. See the constructor
2305371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::Module::Module]. *)
2315371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_module : llcontext -> string -> llmodule = "llvm_create_module"
2328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
2340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
2350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
2363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
2378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal dispose_module : llmodule -> unit = "llvm_dispose_module"
2388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
239a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
2403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
241a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal target_triple: llmodule -> string
242a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                      = "llvm_target_triple"
243a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
244a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
2453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
246a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_target_triple: string -> llmodule -> unit
247a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                          = "llvm_set_target_triple"
248a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
249a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
250a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
2513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
252a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal data_layout: llmodule -> string
253a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                    = "llvm_data_layout"
254a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
255a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
2563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
257a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_data_layout: string -> llmodule -> unit
258a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                        = "llvm_set_data_layout"
259a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
2600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_type_name name ty m] adds a named type to the module's symbol table.
2610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    Returns [true] if successful. If such a name already exists, then no entry
2620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    is added and [false] is returned. See the [llvm::Module::addTypeName]
2633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method. *)
26446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_type_name : string -> lltype -> llmodule -> bool
26546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_add_type_name"
26646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_type_name name] removes a type name from the module's symbol
2680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    table. *)
26946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_type_name : string -> llmodule -> unit
27046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_delete_type_name"
2718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2723c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
2733c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
2743c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksenexternal dump_module : llmodule -> unit = "llvm_dump_module"
2753c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
2768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
2780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
2803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
281404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal classify_type : lltype -> TypeKind.t = "llvm_classify_type"
2820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [type_context ty] returns the {!llcontext} corresponding to the type [ty].
2845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    See the method [llvm::Type::getContext]. *)
2855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal type_context : lltype -> llcontext = "llvm_type_context"
2865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
2873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
2888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
2898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
2910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
292b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i1_type c] returns an integer type of bitwidth 1 in the context [c]. See
293b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int1Ty]. *)
294b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i1_type : llcontext -> lltype = "llvm_i1_type"
2950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
296b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i8_type c] returns an integer type of bitwidth 8 in the context [c]. See
297b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int8Ty]. *)
298b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i8_type : llcontext -> lltype = "llvm_i8_type"
2990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
300b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i16_type c] returns an integer type of bitwidth 16 in the context [c]. See
301b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int16Ty]. *)
302b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i16_type : llcontext -> lltype = "llvm_i16_type"
3030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
304b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i32_type c] returns an integer type of bitwidth 32 in the context [c]. See
305b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int32Ty]. *)
306b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i32_type : llcontext -> lltype = "llvm_i32_type"
3070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
308b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i64_type c] returns an integer type of bitwidth 64 in the context [c]. See
309b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int64Ty]. *)
310b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i64_type : llcontext -> lltype = "llvm_i64_type"
3110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
312b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_type c n] returns an integer type of bitwidth [n] in the context
313b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See the method [llvm::IntegerType::get]. *)
314b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal integer_type : llcontext -> int -> lltype = "llvm_integer_type"
3150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
316b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_bitwidth c ty] returns the number of bits in the integer type [ty]
317b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    in the context [c].  See the method [llvm::IntegerType::getBitWidth]. *)
3188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal integer_bitwidth : lltype -> int = "llvm_integer_bitwidth"
3198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
3223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
323b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [float_type c] returns the IEEE 32-bit floating point type in the context
324b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FloatTy]. *)
325b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal float_type : llcontext -> lltype = "llvm_float_type"
3260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
327b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [double_type c] returns the IEEE 64-bit floating point type in the context
328b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::DoubleTy]. *)
329b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal double_type : llcontext -> lltype = "llvm_double_type"
3300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
331b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [x86fp80_type c] returns the x87 80-bit floating point type in the context
332b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::X86_FP80Ty]. *)
333b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal x86fp80_type : llcontext -> lltype = "llvm_x86fp80_type"
3340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
335b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [fp128_type c] returns the IEEE 128-bit floating point type in the context
336b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FP128Ty]. *)
337b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal fp128_type : llcontext -> lltype = "llvm_fp128_type"
3380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
339b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [ppc_fp128_type c] returns the PowerPC 128-bit floating point type in the
340b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. See [llvm::Type::PPC_FP128Ty]. *)
341b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type"
3428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
3450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
3470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
3483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
349957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal function_type : lltype -> lltype array -> lltype = "llvm_function_type"
3500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [va_arg_function_type ret_ty param_tys] is just like
3520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
3530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
3543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
355957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal var_arg_function_type : lltype -> lltype array -> lltype
356957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen                               = "llvm_var_arg_function_type"
3570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
3593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
3608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_var_arg : lltype -> bool = "llvm_is_var_arg"
3610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
3633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
364d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal return_type : lltype -> lltype = "LLVMGetReturnType"
3650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
3673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal param_types : lltype -> lltype array = "llvm_param_types"
3698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
3720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [struct_type context tys] returns the structure type in the context
3745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [context] containing in the types in the array [tys]. See the method
3755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
3765371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal struct_type : llcontext -> lltype array -> lltype
3775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                     = "llvm_struct_type"
3780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [packed_struct_type context ys] returns the packed structure type in the
3805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    context [context] containing in the types in the array [tys]. See the method
3815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
3825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal packed_struct_type : llcontext -> lltype array -> lltype
3835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                            = "llvm_packed_struct_type"
3840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3851940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [struct_element_types sty] returns the constituent types of the struct type
3861940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [sty]. See the method [llvm::StructType::getElementType]. *)
3871940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal struct_element_types : lltype -> lltype array
3881940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                              = "llvm_struct_element_types"
3890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
3913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
3928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_packed : lltype -> bool = "llvm_is_packed"
3938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
3951940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** {7 Operations on union types} *)
3961940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
3971940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [union_type context tys] returns the union type in the context [context]
3981940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    containing the types in the array [tys]. See the method
3991940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [llvm::UnionType::get] *)
4001940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal union_type : llcontext -> lltype array -> lltype = "llvm_union_type"
4011940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4021940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [union_element_types uty] returns the constituent types of the union type
4031940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [uty]. See the method [llvm::UnionType::getElementType]. *)
4041940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal union_element_types : lltype -> lltype array
4051940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                             = "llvm_union_element_types"
4061940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4071940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
4083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
4090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
4113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
412957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal array_type : lltype -> int -> lltype = "llvm_array_type"
4130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
41557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
4163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
41757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal pointer_type : lltype -> lltype = "llvm_pointer_type"
41857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
41957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
42057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
4213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
42257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal qualified_pointer_type : lltype -> int -> lltype
42357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen                                = "llvm_qualified_pointer_type"
4240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
4263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
427957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal vector_type : lltype -> int -> lltype = "llvm_vector_type"
4288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
4303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
431d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal element_type : lltype -> lltype = "LLVMGetElementType"
4320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
4343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
4358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal array_length : lltype -> int = "llvm_array_length"
4360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
43757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
4383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
43957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal address_space : lltype -> int = "llvm_address_space"
44057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
4410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
4423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
4438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal vector_size : lltype -> int = "llvm_vector_size"
4448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
4470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
448b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [opaque_type c] creates a new opaque type distinct from any other in the
449b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. Opaque types are useful for building recursive types in
450b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    combination with {!refine_type}. See [llvm::OpaqueType::get]. *)
451b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal opaque_type : llcontext -> lltype = "llvm_opaque_type"
4520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
453b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [void_type c] creates a type of a function which does not return any
454b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value in the context [c]. See [llvm::Type::VoidTy]. *)
455b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal void_type : llcontext -> lltype = "llvm_void_type"
4560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
457b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [label_type c] creates a type of a basic block in the context [c]. See
458b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::LabelTy]. *)
459b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal label_type : llcontext -> lltype = "llvm_label_type"
4608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on type handles} *)
4620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [handle_to_type ty] creates a handle to the type [ty]. If [ty] is later
4643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    refined as a result of a call to {!refine_type}, the handle will be updated;
4650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    any bare [lltype] references will become invalid.
4663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the class [llvm::PATypeHolder]. *)
4671cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal handle_to_type : lltype -> lltypehandle = "llvm_handle_to_type"
4680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of_handle tyh] resolves the type handle [tyh].
4703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PATypeHolder::get()]. *)
4711cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal type_of_handle : lltypehandle -> lltype = "llvm_type_of_handle"
4720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [refine_type opaque_ty ty] replaces the abstract type [opaque_ty] with the
4743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    concrete type [ty] in all users. Warning: This may invalidate {!lltype}
4753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values! Use {!lltypehandle} to manipulate potentially abstract types. See
4763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the method [llvm::Type::refineAbstractType]. *)
4771cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenexternal refine_type : lltype -> lltype -> unit = "llvm_refine_type"
4781cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
4798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
4810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
4833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
4848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal type_of : llvalue -> lltype = "llvm_type_of"
4850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
4870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
4880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
4893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
4908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal value_name : llvalue -> string = "llvm_value_name"
4910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
4933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
4948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_value_name : string -> llvalue -> unit = "llvm_set_value_name"
4950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
4973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
49888cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenexternal dump_value : llvalue -> unit = "llvm_dump_value"
4998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
5020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
5043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
505344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_constant : llvalue -> bool = "llvm_is_constant"
5060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
5083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
509e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_null : lltype -> llvalue = "LLVMConstNull"
5100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
5123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
513e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes"
5140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
5163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
517e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal undef : lltype -> llvalue = "LLVMGetUndef"
5180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
5203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
5218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_null : llvalue -> bool = "llvm_is_null"
5220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
5243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
525344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_undef : llvalue -> bool = "llvm_is_undef"
5268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
5290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
5313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
532e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_int : lltype -> int -> llvalue = "llvm_const_int"
5330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
5353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
536e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_of_int64 : lltype -> Int64.t -> bool -> llvalue
537e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                        = "llvm_const_of_int64"
5380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
53945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
54045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar * value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
54145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_int_of_string : lltype -> string -> int -> llvalue
54245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                   = "llvm_const_int_of_string"
54345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
5440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
5452b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
546e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_float : lltype -> float -> llvalue = "llvm_const_float"
5478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
54845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
54945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
55045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_float_of_string : lltype -> string -> llvalue
55145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                               = "llvm_const_float_of_string"
55245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
5533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
5550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
556b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_string c s] returns the constant [i8] array with the values of the
557b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] in the context [c]. The array is not 
558b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    null-terminated (but see {!const_stringz}). This value can in turn be used
559b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    as the initializer for a global variable. See the method
560b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::ConstantArray::get]. *)
561b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_string : llcontext -> string -> llvalue = "llvm_const_string"
5620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
563b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_stringz c s] returns the constant [i8] array with the values of the
564b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] and a null terminator in the context [c]. This
565b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value can in turn be used as the initializer for a global variable.
5663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
567b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_stringz : llcontext -> string -> llvalue = "llvm_const_stringz"
5680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
5700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
5710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
5723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
573e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
5740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_struct context elts] returns the structured constant of type
5765371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [struct_type (Array.map type_of elts)] and containing the values [elts]
5775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    in the context [context]. This value can in turn be used as the initializer
5785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for a global variable. See the method [llvm::ConstantStruct::get]. *)
5795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_struct : llcontext -> llvalue array -> llvalue
5805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                      = "llvm_const_struct"
5815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
5825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_packed_struct context elts] returns the structured constant of
5835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    type {!packed_struct_type} [(Array.map type_of elts)] and containing the
5845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    values [elts] in the context [context]. This value can in turn be used as
5855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the initializer for a global variable. See the method
5865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::ConstantStruct::get]. *)
5875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_packed_struct : llcontext -> llvalue array -> llvalue
588e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                             = "llvm_const_packed_struct"
5890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
5910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
5923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
593e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_vector : llvalue array -> llvalue = "llvm_const_vector"
5948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5951940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [const_union ty v] returns the union constant of type [union_type tys] and
5961940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    containing the value [v]. See the method [llvm::ConstantUnion::get]. *)
5971940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal const_union : lltype -> llvalue -> llvalue = "LLVMConstUnion"
5981940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar
5993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
6003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
6010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
602ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
603ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
604ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
605ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
606ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sandsexternal align_of : lltype -> llvalue = "LLVMAlignOf"
607ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
6080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
6090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
610ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
6113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
612e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal size_of : lltype -> llvalue = "LLVMSizeOf"
6130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
6153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
6164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_neg : llvalue -> llvalue = "LLVMConstNeg"
6170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
61819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_neg c] returns the arithmetic negation of the constant [c] with
61919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the negation overflows.
62019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWNeg]. *)
62119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_neg : llvalue -> llvalue = "LLVMConstNSWNeg"
62219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
62319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_neg c] returns the arithmetic negation of the constant [c] with
62419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the negation overflows.
62519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNUWNeg]. *)
62619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_neg : llvalue -> llvalue = "LLVMConstNUWNeg"
62719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
6291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
6301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fneg : llvalue -> llvalue = "LLVMConstFNeg"
6311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
6333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
6344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_not : llvalue -> llvalue = "LLVMConstNot"
6350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
6373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
6384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd"
6390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
6411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
6421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
6431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd"
6441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
64519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_add c1 c2] returns the constant sum of two constants with no
64619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    unsigned wrapping. The result is undefined if the sum overflows.
64719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
64819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_add : llvalue -> llvalue -> llvalue = "LLVMConstNUWAdd"
64919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
6511b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
6521b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fadd : llvalue -> llvalue -> llvalue = "LLVMConstFAdd"
6531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
6553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
6564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub"
6570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
65819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_sub c1 c2] returns the constant difference of two constants with
65919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
66019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
66119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNSWSub"
66219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
66319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_sub c1 c2] returns the constant difference of two constants with
66419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
66519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
66619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNUWSub"
66719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6681b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
6691b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
6701b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fsub : llvalue -> llvalue -> llvalue = "LLVMConstFSub"
6711b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
6733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
6744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul"
6750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
67619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_mul c1 c2] returns the constant product of two constants with
67719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
67819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
67919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNSWMul"
68019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
68119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_mul c1 c2] returns the constant product of two constants with
68219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
68319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
68419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNUWMul"
68519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
6861b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
6871b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
6881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fmul : llvalue -> llvalue -> llvalue = "LLVMConstFMul"
6891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
6900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
6910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
6923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
6934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv"
6940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
6960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
6971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
6984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv"
6990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7001b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
7011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
7025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
7031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_exact_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstExactSDiv"
7041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
7060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
7073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
7084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv"
7090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
7110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
7123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
7134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem"
7140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
7160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
7173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
7184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem"
7190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
7210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
7223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
7234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem"
7240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
7260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
7284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd"
7290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
7310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
7334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr"
7340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
7360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
7373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
7384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor"
7390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
7410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
7423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
743404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
7444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_icmp"
7450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
7470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
7483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
749404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
7504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_fcmp"
7510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
7530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
7543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
7554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl"
7560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
7580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
7593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
7604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
7610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
7630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
7643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
7654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
7660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_gep pc indices] returns the constant [getElementPtr] of [p1] with the
7680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
7693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
7704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep"
7710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [p1]
7731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
7741b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
7751b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_in_bounds_gep : llvalue -> llvalue array -> llvalue
7761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_in_bounds_gep"
7771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
7780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
7790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
7803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
7814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
7820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
7840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
7853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
7864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
7870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
7890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
7903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
7914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"
7920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
7940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
7953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
7964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc"
7970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
7990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
8003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
8014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt"
8020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
8040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
8053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
8064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP"
8070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
8090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
8103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
8114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP"
8120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
8140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
8153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
8164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI"
8170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
8190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
8203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
8214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI"
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
8240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
8253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
8264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt"
8270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
8290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
8303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
8314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr"
8320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
8340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
8353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
8364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast"
8370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
8391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
8411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_zext_or_bitcast : llvalue -> lltype -> llvalue
8421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstZExtOrBitCast"
8431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
8451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8461b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
8471b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_sext_or_bitcast : llvalue -> lltype -> llvalue
8481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                               = "LLVMConstSExtOrBitCast"
8491b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
8511b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
8521b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
8531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_trunc_or_bitcast : llvalue -> lltype -> llvalue
8541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                                = "LLVMConstTruncOrBitCast"
8551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
8571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
8581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
8591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_pointercast : llvalue -> lltype -> llvalue
8601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "LLVMConstPointerCast"
8611b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_intcast c ty] returns a constant zext, bitcast, or trunc for integer
8631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    -> integer casts of constant [c] to type [ty].
8641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getIntCast]. *)
8651b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_intcast : llvalue -> lltype -> llvalue
8661b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                       = "LLVMConstIntCast"
8671b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8681b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
8695371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    fp casts of constant [c] to type [ty].
8701b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
8711b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fpcast : llvalue -> lltype -> llvalue
8721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                      = "LLVMConstFPCast"
8731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
8750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
8763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
8774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_select : llvalue -> llvalue -> llvalue -> llvalue
8784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                      = "LLVMConstSelect"
8790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
8810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
8820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
8833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
8844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_extractelement : llvalue -> llvalue -> llvalue
8854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                              = "LLVMConstExtractElement"
8860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
8880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
8890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
8900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
8910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
8923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
8934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
8944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstInsertElement"
8950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
8970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    See the LLVM Language Reference for details on the [sufflevector]
8980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
8993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
9004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
9014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstShuffleVector"
9024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
9041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
9051b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
9061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_extractvalue : llvalue -> int array -> llvalue
9071b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_extractvalue"
9081b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9091b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
9101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
9111b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
9121b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_insertvalue : llvalue -> llvalue -> int array -> llvalue
9131b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "llvm_const_insertvalue"
9141b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
9163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
9170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
918dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
919dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
920dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal global_parent : llvalue -> llmodule = "LLVMGetGlobalParent"
921dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
9220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
9230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
9243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
9258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_declaration : llvalue -> bool = "llvm_is_declaration"
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
9283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
929404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal linkage : llvalue -> Linkage.t = "llvm_linkage"
9300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
9323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
933404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
9340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
9363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
9378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal section : llvalue -> string = "llvm_section"
9380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
9403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
9418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_section : string -> llvalue -> unit = "llvm_set_section"
9420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
9443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
945404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal visibility : llvalue -> Visibility.t = "llvm_visibility"
9460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
9483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
949404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_visibility : Visibility.t -> llvalue -> unit
950404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                        = "llvm_set_visibility"
9510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
9533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
9548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal alignment : llvalue -> int = "llvm_alignment"
9550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
9573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
9588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
9598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
9603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
9613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
9620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
9640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a global variable already exists,
9650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing global differs, then a bitcast
9663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
9678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal declare_global : lltype -> string -> llmodule -> llvalue
9688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                        = "llvm_declare_global"
9690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
9710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    initializer [init] in module [m]. If the named global already exists, it is
9720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed.
9733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
9748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal define_global : string -> llvalue -> llmodule -> llvalue
9758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                       = "llvm_define_global"
9760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
9780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
9793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
9806d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_global : string -> llmodule -> llvalue option
9816d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                       = "llvm_lookup_global"
9820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
9843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
9858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal delete_global : llvalue -> unit = "llvm_delete_global"
9860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
9884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
9894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
9904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
9914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_begin : llmodule -> (llmodule, llvalue) llpos
9924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_global_begin"
9934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
9954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
9964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
9974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_succ : llvalue -> (llmodule, llvalue) llpos
9984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_succ"
9994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
10014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
10024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
10034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
10054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
10064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
10074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
10094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
10104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
10114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
10124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_end : llmodule -> (llmodule, llvalue) llrev_pos
10134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_global_end"
10144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
10164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
10174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
10184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_pred : llvalue -> (llmodule, llvalue) llrev_pos
10194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_pred"
10204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
10224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
10234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
10244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
10264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
10274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
10284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
10300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
10313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
10320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal is_global_constant : llvalue -> bool = "llvm_is_global_constant"
10330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
10350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
10363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
10370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksenexternal set_global_constant : bool -> llvalue -> unit
10380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                             = "llvm_set_global_constant"
10390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
10413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
104246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal global_initializer : llvalue -> llvalue = "LLVMGetInitializer"
10430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
10450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
10463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
10478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer"
10480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
10500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
10513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
10528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal remove_initializer : llvalue -> unit = "llvm_remove_initializer"
10530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
10550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
10563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
10578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_thread_local : llvalue -> bool = "llvm_is_thread_local"
10580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
10600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
10613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
10628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
10638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
10643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
10653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
10660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
10680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
10690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
10703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
107146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal declare_function : string -> lltype -> llmodule -> llvalue
107246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_declare_function"
10730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
10750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
10760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
10773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
107846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_function : string -> lltype -> llmodule -> llvalue
107946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         = "llvm_define_function"
10800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
10820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
10833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
10846d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_function : string -> llmodule -> llvalue option
10856d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                         = "llvm_lookup_function"
10860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
10883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
108946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_function : llvalue -> unit = "llvm_delete_function"
10900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
10924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
10934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
10944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
10954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_begin : llmodule -> (llmodule, llvalue) llpos
10964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                        = "llvm_function_begin"
10974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
10984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
10994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
11004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
11014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_succ : llvalue -> (llmodule, llvalue) llpos
11024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_succ"
11034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
11054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
11064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
11074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
11094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
11104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
11114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
11134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
11144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
11154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
11164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_end : llmodule -> (llmodule, llvalue) llrev_pos
11174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_function_end"
11184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
11204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
11214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_pred : llvalue -> (llmodule, llvalue) llrev_pos
11224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_pred"
11234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
11254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
11264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
11274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
11294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
11304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
11314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
11333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
113446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal is_intrinsic : llvalue -> bool = "llvm_is_intrinsic"
11350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
11373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
113846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal function_call_conv : llvalue -> int = "llvm_function_call_conv"
11390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
11410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
11423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
114346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal set_function_call_conv : int -> llvalue -> unit
114446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                = "llvm_set_function_call_conv"
114546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
11465eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
114780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
11485eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
11495eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal gc : llvalue -> string option = "llvm_gc"
115080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
11515eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
11525eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
11535eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal set_gc : string option -> llvalue -> unit = "llvm_set_gc"
115480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1155e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1156e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
1157e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_function_attr : llvalue -> Attribute.t -> unit
1158e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_add_function_attr"
1159e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1160e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1161e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
1162e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_function_attr : llvalue -> Attribute.t -> unit
1163e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                              = "llvm_remove_function_attr"
11643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1165dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1166dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1167dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1168dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1169dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal params : llvalue -> llvalue array = "llvm_params"
1170dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1171dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1172dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1173dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param : llvalue -> int -> llvalue = "llvm_param"
1174dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1175dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1176dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1177dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param_parent : llvalue -> llvalue = "LLVMGetParamParent"
1178dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
11794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
11804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
11814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
11824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
11834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin"
11844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
11864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
11874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
11884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ"
11894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
11914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
11924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
11934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
11954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
11964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
11974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
11984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
11994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
12004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
12014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
12024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end"
12034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
12054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
12064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_pred : llvalue -> (llvalue, llvalue) llrev_pos
12074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_param_pred"
12084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
12104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
12114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
12124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
12144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
12154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
12164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1217e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
1218e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_param_attr : llvalue -> Attribute.t -> unit = "llvm_add_param_attr"
1219e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1220e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
1221e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_param_attr : llvalue -> Attribute.t -> unit
1222e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                           = "llvm_remove_param_attr"
1223e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1224e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1225e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal set_param_alignment : llvalue -> int -> unit
1226e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                             = "llvm_set_param_alignment"
1227dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
12290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
12313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
123246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks"
12330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
12353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
123646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock"
12370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
12393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
124046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_block : llbasicblock -> unit = "llvm_delete_block"
12410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1242b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [append_block c name f] creates a new basic block named [name] at the end of
1243b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    function [f] in the context [c].
12443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1245b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal append_block : llcontext -> string -> llvalue -> llbasicblock
1246b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar                      = "llvm_append_block"
12470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1248b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [insert_block c name bb] creates a new basic block named [name] before the
1249b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    basic block [bb] in the context [c].
12503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1251b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal insert_block : llcontext -> string -> llbasicblock -> llbasicblock
125246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_insert_block"
12530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1254dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1255dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1256dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent"
1257dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
12594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
12604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
12614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
12624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_begin : llvalue -> (llvalue, llbasicblock) llpos
12634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_block_begin"
12644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
12664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
12674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
12684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
12694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_succ"
12704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
12724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
12734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
12744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
12764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
12774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
12784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
12804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
12814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
12824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
12834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
12844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                   = "llvm_block_end"
12854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_pred gv] returns the function list position preceding [After gv].
12874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
12884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
12894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_pred"
12904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
12924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
12934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
12944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
12964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
12974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
12984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
130046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
13010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
13030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
13043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
130546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal value_is_block : llvalue -> bool = "llvm_value_is_block"
13060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
130846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
130946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1310cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1311dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1312dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1313dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1314dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1315dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent"
1316dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1317033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1318033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1319033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1320033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1321033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1322033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_begin"
1323033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1324033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1325033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1326033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1327033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_succ"
1328033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1329033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1330033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1331033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1332033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1333033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1334033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1335033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1336033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1337033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1338033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1339033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1340033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1341033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1342033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_end"
1343033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1344033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1345033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1346033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1347033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_pred"
1348033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1349033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1350033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1351033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1352033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1353dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
13553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
13563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
13573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
13583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
13593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1360cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal instruction_call_conv: llvalue -> int
1361cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                              = "llvm_instruction_call_conv"
1362cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1363dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1364dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1365dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1366dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
13673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1368cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal set_instruction_call_conv: int -> llvalue -> unit
1369cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                                  = "llvm_set_instruction_call_conv"
1370cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1371e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1372e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1373e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
1374e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1375e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_add_instruction_param_attr"
1376e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1377e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1378e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1379e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
1380e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1381e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  = "llvm_remove_instruction_param_attr"
1382e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
138307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** {Operations on call instructions (only)} *)
138407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
138507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
138607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
138707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
138807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal is_tail_call : llvalue -> bool = "llvm_is_tail_call"
138907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
139007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
139107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
139207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
139307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call"
13943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
13953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
13960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
13983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
13992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
14002618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                      = "llvm_add_incoming"
14010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
14033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
14042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
14052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
140646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
14073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
14083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
14090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14105371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [builder context] creates an instruction builder with no position in
14115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context]. It is invalid to use this builder until its position
14125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    is set with {!position_before} or {!position_at_end}. See the constructor
14135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for [llvm::LLVMBuilder]. *)
14145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal builder : llcontext -> llbuilder = "llvm_builder"
1415033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1416033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1417033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
14185371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at : llcontext -> (llbasicblock, llvalue) llpos -> llbuilder
1419a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
14200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
14213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
14225371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_before : llcontext -> llvalue -> llbuilder
14230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
14253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
14265371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at_end : llcontext -> llbasicblock -> llbuilder
1427033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1428033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1429033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1430033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1431033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1432033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                          = "llvm_position_builder"
14330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
14353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1436033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
14370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
14393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1440033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
144146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1442dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1443dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1444dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1445dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1446dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal insertion_block : llbuilder -> llbasicblock = "llvm_insertion_block"
1447dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14485c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
14495c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
14505c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
14515c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarexternal insert_into_builder : llvalue -> string -> llbuilder -> unit
14525c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                             = "llvm_insert_into_builder"
14535c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
14543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
14553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
14560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
14580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
14590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
146146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret_void : llbuilder -> llvalue = "llvm_build_ret_void"
14620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
14640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
14650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
146746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret : llvalue -> llbuilder -> llvalue = "llvm_build_ret"
14680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1469e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1470e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1471e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1472e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1473e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1474e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_aggregate_ret"
1475e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
14760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
14771430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %bb]
14780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
148046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_br : llbasicblock -> llbuilder -> llvalue = "llvm_build_br"
14810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
14831430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %cond, %tbb, %fbb]
14840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
14853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
148646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
148746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         llvalue = "llvm_build_cond_br"
14880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
148921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
14900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
149121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
149221491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
14933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
149446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
149546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_switch"
14960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
149721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
149821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
149921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
150021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksenexternal add_case : llvalue -> llvalue -> llbasicblock -> unit
150121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen                  = "llvm_add_case"
150221491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
15030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
15040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
15050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
150746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_invoke : llvalue -> llvalue array -> llbasicblock ->
150846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
150946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
15100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unwind b] creates an
15120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unwind]
15130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
151546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unwind : llbuilder -> llvalue = "llvm_build_unwind"
15160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
15180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
15190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
152146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unreachable : llbuilder -> llvalue = "llvm_build_unreachable"
152246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
15243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
15250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
15270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
15280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
153046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
153146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_add"
15320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15331430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar(** [build_nsw_add x y name b] creates a
1534e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1535e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1536e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1537e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1538e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_nsw_add"
1539e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
154019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_add x y name b] creates a
154119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw add %x, %y]
154219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
154319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWAdd]. *)
154419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
154519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                      = "llvm_build_nuw_add"
154619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1547e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1548e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1549e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1550e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1551e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1552e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fadd"
1553e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
15540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
15550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
15560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
155846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
155946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_sub"
15600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
156119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_sub x y name b] creates a
156219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub %x, %y]
156319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
156419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWSub]. *)
156519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
156619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_sub"
156719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
156819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_sub x y name b] creates a
156919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub %x, %y]
157019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
157119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWSub]. *)
157219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
157319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_sub"
157419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1575e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1576e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1577e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1578e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1579e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1580e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fsub"
1581e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
15820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
15830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
15840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
15853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_mul"
15880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
158919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_mul x y name b] creates a
159019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw mul %x, %y]
159119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
159219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWMul]. *)
159319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
159419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_mul"
159519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
159619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_mul x y name b] creates a
159719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw mul %x, %y]
159819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
159919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWMul]. *)
160019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
160119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_mul"
160219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1603e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
1604e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
1605e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1606e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
1607e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1608e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fmul"
1609e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
16110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
16120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
161446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
161546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_udiv"
16160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
16180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
16190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
162146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
162246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sdiv"
16230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1624e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
1625e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
1626e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1627e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
1628e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1629e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                          = "llvm_build_exact_sdiv"
1630e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
16310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
16320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
16330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
163546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
163646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_fdiv"
16370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
16390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
16400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
164246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
164346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_urem"
16440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
16460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
16470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
164946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
165046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_srem"
16510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
16530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
16540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
165646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
165746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_frem"
16580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
16600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
16610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
166346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
166446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_shl"
16650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
16670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
16680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_lshr"
16720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
16740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
16750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
167746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
167846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_ashr"
16790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
16810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
16820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
168446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
168546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_and"
16860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
16880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
16890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
169146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
169246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                  = "llvm_build_or"
16930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
16950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
16960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
16973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
169846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
169946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_xor"
17000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
17020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
17030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
17053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
170646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_neg : llvalue -> string -> llbuilder -> llvalue
170746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_neg"
17080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
170919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_neg x name b] creates a
171019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub 0, %x]
171119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
171219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
171319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
171419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
171519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_neg"
171619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
171719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_neg x name b] creates a
171819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub 0, %x]
171919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
172019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
172119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
172219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
172319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_neg"
172419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
172519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_fneg x name b] creates a
172619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = fsub 0, %x]
172719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
172819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
172919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFNeg]. *)
173019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_fneg : llvalue -> string -> llbuilder -> llvalue
173119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                    = "llvm_build_fneg"
173219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
17330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
17340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
17350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
17373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
173846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_not : llvalue -> string -> llbuilder -> llvalue
173946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_not"
174046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
17413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
17423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
17430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
17450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
17460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
174846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_alloca : lltype -> string -> llbuilder -> llvalue
174946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_alloca"
17500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
17520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
17530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
175546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
175646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_alloca"
17570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
17590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
17600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
176246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_load : llvalue -> string -> llbuilder -> llvalue
176346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_load"
17640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
17660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
17670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
176946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_store : llvalue -> llvalue -> llbuilder -> llvalue
177046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_store"
17710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1772632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
1773e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
17740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
177646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
177746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_gep"
177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1779e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
1780e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
1781e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1782e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
1783e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
1784e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                               llvalue = "llvm_build_in_bounds_gep"
1785e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1786e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
1787e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
1788e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1789e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
1790e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_struct_gep : llvalue -> int -> string -> llbuilder ->
1791e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            llvalue = "llvm_build_struct_gep"
1792e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1793e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
1794e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
1795e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
1796e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_string : string -> string -> llbuilder -> llvalue
1797e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_global_string"
1798e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1799e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
1800e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
18015371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    builder [b].
1802e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
1803e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_stringptr : string -> string -> llbuilder -> llvalue
1804e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                = "llvm_build_global_stringptr"
1805e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
18080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
18100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
18110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
181346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
181446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_trunc"
18150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
18170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
18180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
182046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
182146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_zext"
18220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
18240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
18250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
182746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
182846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sext"
18290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
18310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
18320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
183446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
183546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptoui"
18360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
18380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
18390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
184146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
184246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptosi"
18430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
18450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
18460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
184846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
184946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_uitofp"
18500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
18520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
18530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
185546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
185646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_sitofp"
18570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
18590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
18600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
186246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
186346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_fptrunc"
18640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
18660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
18670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
186946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
187046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_fpext"
18710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
18730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
18740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
187646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
187746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_prttoint"
18780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
18800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
18810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
188346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
188446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_inttoptr"
18850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
18870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
18880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
1889e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
189046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
189146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_bitcast"
189246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1893e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
1894e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1895e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1896e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1897e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_zext_or_bitcast"
1898e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1899e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
1900e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1901e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
1902e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1903e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_sext_or_bitcast"
1904e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1905e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
1906e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1907e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
1908e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1909e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                  llvalue = "llvm_build_trunc_or_bitcast"
1910e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1911e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
1912e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1913e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
1914e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
1915e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_pointercast"
1916e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1917e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
1918e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1919e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
1920e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1921e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_intcast"
1922e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1923e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
1924e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1925e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
1926e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1927e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_fpcast"
1928e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
19293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
19303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
19310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
19330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
19340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
1936404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
193746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_icmp"
19380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
19400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
19410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
1943404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
194446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_fcmp"
194546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
19463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
19473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
19480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
19500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
19510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
1952a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
19533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
19542618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
19552618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     llvalue = "llvm_build_phi"
19560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
19580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
19590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
196146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
196246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_call"
19630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
19650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
19660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
196846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
196946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llvalue = "llvm_build_select"
19700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
19720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
19730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
197546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
197646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_va_arg"
19770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
19790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
19800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
198246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
198346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                llvalue = "llvm_build_extractelement"
19840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
19860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
19870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
198946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_insertelement : llvalue -> llvalue -> llvalue -> string ->
199046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_insertelement"
19910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
19930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
19940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
199646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
199746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_shufflevector"
19981ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1999e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg idx name b] creates a
2000e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
2001e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2002e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
2003e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
2004e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            = "llvm_build_extractvalue"
2005e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2006e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
2007e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
2008e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2009e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
2010e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
2011e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llvalue = "llvm_build_insertvalue"
2012e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2013e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
2014e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
2015e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2016e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
2017e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_null : llvalue -> string -> llbuilder -> llvalue
2018e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_is_null"
2019e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2020e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
2021e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
2022e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2023e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
2024e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_not_null : llvalue -> string -> llbuilder -> llvalue
2025e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_is_not_null"
2026e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2027e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
2028e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
20295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    instruction builder [b].
2030e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
2031e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
2032e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_ptrdiff"
20331ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
20343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Module providers} *)
20351ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2036da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule ModuleProvider : sig
2037da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [create_module_provider m] encapsulates [m] in a module provider and takes
20383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      ownership of the module. See the constructor
20393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      [llvm::ExistingModuleProvider::ExistingModuleProvider]. *)
2040da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external create : llmodule -> llmoduleprovider
2041da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen                  = "LLVMCreateModuleProviderForExistingModule"
20423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  
2043da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [dispose_module_provider mp] destroys the module provider [mp] as well as
20443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      the contained module. *)
2045da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmoduleprovider -> unit = "llvm_dispose_module_provider"
2046da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2047da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
20483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
20493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
2050da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2051da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
20523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
20533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
20543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
2055da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
2056da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
2057da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [stdin ()] is the memory buffer containing the contents of standard input.
20583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
2059da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
2060da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
20613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
2062da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
2063da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2064d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2065d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2066d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
2067d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2068d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
2069d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
2070d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
2071d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
2072d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2073d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
2074d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
2075d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
2076d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
2077d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create : unit -> [ `Module ] t = "llvm_passmanager_create"
2078d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2079d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create_function mp] constructs a new function-by-function
2080d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      pass pipeline over the module provider [mp]. It does not take ownership of
2081d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      [mp]. This type of pipeline is suitable for code generation and JIT
2082d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      compilation tasks.
2083d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
2084d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create_function : llmoduleprovider -> [ `Function ] t
2085d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                           = "LLVMCreateFunctionPassManager"
2086d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2087d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
2088d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
2089d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
2090d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
2091d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_module : llmodule -> [ `Module ] t -> bool
2092d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                      = "llvm_passmanager_run_module"
2093d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2094d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
2095d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
2096d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
2097d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
2098d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize"
2099d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2100d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
2101d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
2102d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
2103d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
2104d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_function : llvalue -> [ `Function ] t -> bool
2105d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                        = "llvm_passmanager_run_function"
2106d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2107d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
2108d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
2109d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
2110d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
2111d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize"
2112d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2113d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
2114d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module provider.
2115d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
2116d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external dispose : [< any ] t -> unit = "llvm_passmanager_dispose"
2117d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
2118