1dfc58e3bcfcb8f37796b2ca1c289dd202f26d03cSylvestre Ledru(*===-- 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
12dfc58e3bcfcb8f37796b2ca1c289dd202f26d03cSylvestre Ledru    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
320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Any value in the LLVM IR. Functions, instructions, global variables,
330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, and much more are all [llvalues]. See the [llvm::Value] class.
343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    This type covers a wide range of subclasses. *)
358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llvalue
360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
37705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** Used to store users and usees of values. See the [llvm::Use] class. *)
38705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaartype lluse
39705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** A basic block in LLVM IR. See the [llvm::BasicBlock] class. *)
410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksentype llbasicblock
420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Used to generate instructions in the LLVM IR. See the [llvm::LLVMBuilder]
443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    class. *)
4546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentype llbuilder
468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
47da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(** Used to efficiently handle large buffers of read-only binary data.
483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::MemoryBuffer] class. *)
49da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksentype llmemorybuffer
50da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines(** The kind id of metadata attached to an instruction. *)
52cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinestype llmdkind
53cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The kind of an [lltype], the result of [classify_type ty]. See the
553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type::TypeID] enumeration. *)
56404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind : sig
57404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
58404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Void
59eaf0608891cff27fe4cf08d180a6baf49e00f8aeBob Wilson  | Half
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
68404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
69404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
70404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
71404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
7232eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
738a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | X86_mmx
74404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linkage of a global value, accessed with {!linkage} and
773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_linkage}. See [llvm::GlobalValue::LinkageTypes]. *)
78404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage : sig
79404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
80404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    External
8114b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
82404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
834aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
848a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Link_once_odr_auto_hide
85404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
864aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
87404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
88404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
894aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
90404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
91404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
92404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
93404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
944aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
954aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
968a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Linker_private_weak
97404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linker visibility of a global value, accessed with {!visibility} and
1003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_visibility}. See [llvm::GlobalValue::VisibilityTypes]. *)
101404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility : sig
102404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
103404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Default
104404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
105404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
106404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
1078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The following calling convention values may be accessed with
1093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!function_call_conv} and {!set_function_call_conv}. Calling
1103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    conventions are open-ended. *)
1111475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv : sig
1123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  val c : int             (** [c] is the C calling convention. *)
1131475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val fast : int          (** [fast] is the calling convention to allow LLVM
1140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                              maximum optimization opportunities. Use only with
1153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              internal linkage. *)
1161475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val cold : int          (** [cold] is the calling convention for
1173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              callee-save. *)
1181475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_stdcall : int   (** [x86_stdcall] is the familiar stdcall calling
1193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1201475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_fastcall : int  (** [x86_fastcall] is the familiar fastcall calling
1213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1221475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
12346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1246b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** The attribute kind of a function parameter, result or the function itself.
1256b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov    See [llvm::Attribute::AttrKind]. *)
126e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute : sig
127e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
128e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
129e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
130e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
131e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
132e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
133e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
134e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
135e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
136e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
137e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
138e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
139f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
140f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
141f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
142f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
143f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
1440941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Alignment of int
145f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
146f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
147f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
148f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
149570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
1500941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Stackalignment of int
1510be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | ReturnsTwice
1520be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | UWTable
1530be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | NonLazyBind
154e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
155e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for an integer comparison ([icmp]) instruction.
1573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ICmpInst::Predicate] enumeration. *)
158404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp : sig
159404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
160cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Eq  (* Equal *)
161cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ne  (* Not equal *)
162cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ugt (* Unsigned greater than *)
163cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Uge (* Unsigned greater or equal *)
164cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ult (* Unsigned less than *)
165cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ule (* Unsigned less or equal *)
166cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Sgt (* Signed greater than *)
167cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Sge (* Signed greater or equal *)
168cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Slt (* Signed less than *)
169cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Sle (* Signed less or equal *)
170404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
17146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for a floating-point comparison ([fcmp]) instruction.
173cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    Ordered means that neither operand is a QNAN while unordered means
174cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    that either operand may be a QNAN.
1753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::FCmpInst::Predicate] enumeration. *)
176404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp : sig
177404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
178cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | False (* Always false *)
179cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Oeq   (* Ordered and equal *)
180cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ogt   (* Ordered and greater than *)
181cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Oge   (* Ordered and greater or equal *)
182cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Olt   (* Ordered and less than *)
183cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ole   (* Ordered and less or equal *)
184cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | One   (* Ordered and not equal *)
185cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ord   (* Ordered (no operand is NaN) *)
186cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Uno   (* Unordered (one operand at least is NaN) *)
187cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ueq   (* Unordered and equal *)
188cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ugt   (* Unordered and greater than *)
189cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Uge   (* Unordered and greater or equal *)
190cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ult   (* Unordered and less than *)
191cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Ule   (* Unordered and less or equal *)
192cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | Une   (* Unordered and not equal *)
193cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  | True  (* Always true *)
194404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
19546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1966563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** The opcodes for LLVM instructions and constant expressions. *)
1976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinmodule Opcode : sig
1986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  type t =
1996563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid (* not an instruction *)
2006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Terminator Instructions *)
2016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Ret
2026563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Br
2036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Switch
2046563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IndirectBr
2056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invoke
2066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid2
2076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unreachable
2086563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Standard Binary Operators *)
2096563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Add
2106563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FAdd
2116563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Sub
2126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FSub
2136563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Mul
2146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FMul
2156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UDiv
2166563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SDiv
2176563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FDiv
2186563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | URem
2196563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SRem
2206563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FRem
2216563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Logical Operators *)
2226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Shl
2236563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LShr
2246563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AShr
2256563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | And
2266563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Or
2276563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Xor
2286563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Memory Operators *)
2296563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Alloca
2306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Load
2316563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Store
2326563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | GetElementPtr
2336563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Cast Operators *)
2346563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Trunc
2356563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ZExt
2366563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SExt
2376563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToUI
2386563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToSI
2396563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UIToFP
2406563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SIToFP
2416563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPTrunc
2426563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPExt
2436563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PtrToInt
2446563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IntToPtr
2456563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | BitCast
2466563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Other Operators *)
2476563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ICmp
2486563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FCmp
2496563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PHI
2506563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Call
2516563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Select
2526563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp1
2536563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp2
2546563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | VAArg
2556563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractElement
2566563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertElement
2576563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ShuffleVector
2586563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractValue
2596563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertValue
2606563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Fence
2616563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicCmpXchg
2626563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicRMW
2636563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Resume
2646563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LandingPad
2658a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2668a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2678a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** The type of a clause of a [landingpad] instruction.
2688a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See [llvm::LandingPadInst::ClauseType]. *)
2698a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule LandingPadClauseTy : sig
2708a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2718a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Catch
2728a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Filter
2738a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2748a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2758a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** The thread local mode of a global value, accessed with {!thread_local_mode}
2768a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    and {!set_thread_local_mode}.
2778a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See [llvm::GlobalVariable::ThreadLocalMode]. *)
2788a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule ThreadLocalMode : sig
2798a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2808a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | None
2818a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | GeneralDynamic
2828a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | LocalDynamic
2838a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | InitialExec
2848a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | LocalExec
2858a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2868a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2878a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** The ordering of an atomic [load], [store], [cmpxchg], [atomicrmw] or
2888a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    [fence] instruction. See [llvm::AtomicOrdering]. *)
2898a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule AtomicOrdering : sig
2908a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2918a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | NotAtomic
2928a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Unordered
2938a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Monotonic
2948a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Invalid (* removed due to API changes *)
2958a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Acquire
2968a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Release
2978a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | AcqiureRelease
2988a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | SequentiallyConsistent
2998a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
3008a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
3018a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** The opcode of an [atomicrmw] instruction.
3028a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See [llvm::AtomicRMWInst::BinOp]. *)
3038a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule AtomicRMWBinOp : sig
3048a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
3058a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Xchg
3068a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Add
3078a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Sub
3088a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | And
3098a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Nand
3108a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Or
3118a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Xor
3128a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Max
3138a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Min
3148a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | UMax
3158a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | UMin
3166563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinend
3176563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
3183dd16741864302af14b31b7f75375c09d8544a35Torok Edwin(** The kind of an [llvalue], the result of [classify_value v].
319e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the various [LLVMIsA*] functions. *)
3203dd16741864302af14b31b7f75375c09d8544a35Torok Edwinmodule ValueKind : sig
3213dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  type t =
3223dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | NullValue
3233dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Argument
3243dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BasicBlock
3253dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | InlineAsm
3263dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDNode
3273dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDString
3283dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BlockAddress
3293dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantAggregateZero
3303dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantArray
33134b4a8426131ec2deea45a1e0174f191c63295e2Peter Zotov  | ConstantDataArray
33234b4a8426131ec2deea45a1e0174f191c63295e2Peter Zotov  | ConstantDataVector
3333dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantExpr
3343dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantFP
3353dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantInt
3363dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantPointerNull
3373dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantStruct
3383dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantVector
3393dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Function
3403dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalAlias
3413dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalVariable
3423dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | UndefValue
3433dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Instruction of Opcode.t
3443dd16741864302af14b31b7f75375c09d8544a35Torok Edwinend
3453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
346e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
3474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** {6 Iteration} *)
3484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [Before b] and [At_end a] specify positions from the start of the ['b] list
350224fceb41f993fbc954345f053dab4e8caf28329Gordon Henriksen    of [a]. [llpos] is used to specify positions in and for forward iteration
3514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    through the various value lists maintained by the LLVM IR. *)
3524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
3534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
3544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
3554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [After b] and [At_start a] specify positions from the end of the ['b] list
3574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of [a]. [llrev_pos] is used for reverse iteration through the various value
3584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    lists maintained by the LLVM IR. *)
3594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
3604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
3614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
3624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Exceptions} *)
3653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
366da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
367da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
369a69773cead6dea09ade34342eafacf848ec41367Peter Zotov(** {6 Global configuration} *)
370a69773cead6dea09ade34342eafacf848ec41367Peter Zotov
371a69773cead6dea09ade34342eafacf848ec41367Peter Zotov(** [enable_pretty_stacktraces ()] enables LLVM's built-in stack trace code.
372a69773cead6dea09ade34342eafacf848ec41367Peter Zotov    This intercepts the OS's crash signals and prints which component of LLVM
373a69773cead6dea09ade34342eafacf848ec41367Peter Zotov    you were in at the time of the crash. *)
374a69773cead6dea09ade34342eafacf848ec41367Peter Zotovval enable_pretty_stacktrace : unit -> unit
375a69773cead6dea09ade34342eafacf848ec41367Peter Zotov
376a69773cead6dea09ade34342eafacf848ec41367Peter Zotov(** [install_fatal_error_handler f] installs [f] as LLVM's fatal error handler.
377a69773cead6dea09ade34342eafacf848ec41367Peter Zotov    The handler will receive the reason for termination as a string. After
378a69773cead6dea09ade34342eafacf848ec41367Peter Zotov    the handler has been executed, LLVM calls [exit(1)]. *)
379a69773cead6dea09ade34342eafacf848ec41367Peter Zotovval install_fatal_error_handler : (string -> unit) -> unit
380a69773cead6dea09ade34342eafacf848ec41367Peter Zotov
381a69773cead6dea09ade34342eafacf848ec41367Peter Zotov(** [reset_fatal_error_handler ()] resets LLVM's fatal error handler. *)
382a69773cead6dea09ade34342eafacf848ec41367Peter Zotovval reset_fatal_error_handler : unit -> unit
383a69773cead6dea09ade34342eafacf848ec41367Peter Zotov
3845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** {6 Contexts} *)
3855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_context ()] creates a context for storing the "global" state in
3875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    LLVM. See the constructor [llvm::LLVMContext]. *)
388a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_context : unit -> llcontext
3895371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3905371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [destroy_context ()] destroys a context. See the destructor
3915371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext::~LLVMContext]. *)
392a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_context : llcontext -> unit
3935371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3945371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** See the function [llvm::getGlobalContext]. *)
395a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_context : unit -> llcontext
3965371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
39746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdkind_id context name] returns the MDKind ID that corresponds to the
39846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    name [name] in the context [context].  See the function
39946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::LLVMContext::getMDKindID]. *)
400cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesval mdkind_id : llcontext -> string -> llmdkind
40146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
4025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
4033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
4048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4055371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_module context id] creates a module with the supplied module ID in
4065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context].  Modules are not garbage collected; it is mandatory
4075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    to call {!dispose_module} to free memory. See the constructor
4085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::Module::Module]. *)
409a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_module : llcontext -> string -> llmodule
4108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
4120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
4130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
4143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
415a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_module : llmodule -> unit
4168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
417a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
4183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
419a156efdf71bc668093e31593713694cf076db895Torok Edwinval target_triple: llmodule -> string
420a156efdf71bc668093e31593713694cf076db895Torok Edwin
421a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
4223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
423a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_target_triple: string -> llmodule -> unit
424a156efdf71bc668093e31593713694cf076db895Torok Edwin
425a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
426a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
4273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
428a156efdf71bc668093e31593713694cf076db895Torok Edwinval data_layout: llmodule -> string
429a156efdf71bc668093e31593713694cf076db895Torok Edwin
430a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
4313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
432a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_data_layout: string -> llmodule -> unit
433a156efdf71bc668093e31593713694cf076db895Torok Edwin
4343c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
4353c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
436a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_module : llmodule -> unit
4373c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
4388a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [print_module f m] prints the .ll representation of the module [m]
4398a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    to file [f]. See the method [llvm::Module::print]. *)
4408a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval print_module : string -> llmodule -> unit
4418a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
4428a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [string_of_llmodule m] returns the .ll representation of the module [m]
4438a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    as a string. See the method [llvm::Module::print]. *)
4448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval string_of_llmodule : llmodule -> string
4458a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
4460941534c712d77243d9dda5e8c1d927563b4edffChris Lattner(** [set_module_inline_asm m asm] sets the inline assembler for the module. See
4470941534c712d77243d9dda5e8c1d927563b4edffChris Lattner    the method [llvm::Module::setModuleInlineAsm]. *)
448a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_module_inline_asm : llmodule -> string -> unit
449a156efdf71bc668093e31593713694cf076db895Torok Edwin
450ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [module_context m] returns the context of the specified module.
451e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::Module::getContext] *)
452ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval module_context : llmodule -> llcontext
4538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
454e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
4553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
4560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
4583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
459a156efdf71bc668093e31593713694cf076db895Torok Edwinval classify_type : lltype -> TypeKind.t
4600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
461ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin(** [type_is_sized ty] returns whether the type has a size or not.
462e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    If it doesn't then it is not safe to call the [DataLayout::] methods on it.
463e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    *)
464ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwinval type_is_sized : lltype -> bool
465ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin
4665371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [type_context ty] returns the {!llcontext} corresponding to the type [ty].
4675371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    See the method [llvm::Type::getContext]. *)
468a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_context : lltype -> llcontext
4695371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
4708a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [dump_type ty] prints the .ll representation of the type [ty] to standard
4718a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    error. See the method [llvm::Type::dump]. *)
4728a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval dump_type : lltype -> unit
4738a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
4743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
4758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
4768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
477e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
4783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
4790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
480b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i1_type c] returns an integer type of bitwidth 1 in the context [c]. See
481b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int1Ty]. *)
482a156efdf71bc668093e31593713694cf076db895Torok Edwinval i1_type : llcontext -> lltype
4830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
484b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i8_type c] returns an integer type of bitwidth 8 in the context [c]. See
485b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int8Ty]. *)
486a156efdf71bc668093e31593713694cf076db895Torok Edwinval i8_type : llcontext -> lltype
4870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
488b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i16_type c] returns an integer type of bitwidth 16 in the context [c]. See
489b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int16Ty]. *)
490a156efdf71bc668093e31593713694cf076db895Torok Edwinval i16_type : llcontext -> lltype
4910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
492b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i32_type c] returns an integer type of bitwidth 32 in the context [c]. See
493b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int32Ty]. *)
494a156efdf71bc668093e31593713694cf076db895Torok Edwinval i32_type : llcontext -> lltype
4950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
496b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i64_type c] returns an integer type of bitwidth 64 in the context [c]. See
497b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int64Ty]. *)
498a156efdf71bc668093e31593713694cf076db895Torok Edwinval i64_type : llcontext -> lltype
4990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
500b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_type c n] returns an integer type of bitwidth [n] in the context
501b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See the method [llvm::IntegerType::get]. *)
502a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_type : llcontext -> int -> lltype
5030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
504b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_bitwidth c ty] returns the number of bits in the integer type [ty]
505b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    in the context [c].  See the method [llvm::IntegerType::getBitWidth]. *)
506a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_bitwidth : lltype -> int
5078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
5103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
511b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [float_type c] returns the IEEE 32-bit floating point type in the context
512b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FloatTy]. *)
513a156efdf71bc668093e31593713694cf076db895Torok Edwinval float_type : llcontext -> lltype
5140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
515b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [double_type c] returns the IEEE 64-bit floating point type in the context
516b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::DoubleTy]. *)
517a156efdf71bc668093e31593713694cf076db895Torok Edwinval double_type : llcontext -> lltype
5180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
519b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [x86fp80_type c] returns the x87 80-bit floating point type in the context
520b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::X86_FP80Ty]. *)
521a156efdf71bc668093e31593713694cf076db895Torok Edwinval x86fp80_type : llcontext -> lltype
5220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
523b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [fp128_type c] returns the IEEE 128-bit floating point type in the context
524b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FP128Ty]. *)
525a156efdf71bc668093e31593713694cf076db895Torok Edwinval fp128_type : llcontext -> lltype
5260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
527b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [ppc_fp128_type c] returns the PowerPC 128-bit floating point type in the
528b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. See [llvm::Type::PPC_FP128Ty]. *)
529a156efdf71bc668093e31593713694cf076db895Torok Edwinval ppc_fp128_type : llcontext -> lltype
5308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
5330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
5350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
5363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
537a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_type : lltype -> lltype array -> lltype
5380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
53948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [var_arg_function_type ret_ty param_tys] is just like
5400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
5410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
5423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
543a156efdf71bc668093e31593713694cf076db895Torok Edwinval var_arg_function_type : lltype -> lltype array -> lltype
544a156efdf71bc668093e31593713694cf076db895Torok Edwin
5450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
5463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
547a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_var_arg : lltype -> bool
5480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
5503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
551a156efdf71bc668093e31593713694cf076db895Torok Edwinval return_type : lltype -> lltype
5520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
5543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
555a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_types : lltype -> lltype array
5568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
5590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [struct_type context tys] returns the structure type in the context
5615371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [context] containing in the types in the array [tys]. See the method
5625371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
563a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_type : llcontext -> lltype array -> lltype
564a156efdf71bc668093e31593713694cf076db895Torok Edwin
5655371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [packed_struct_type context ys] returns the packed structure type in the
5665371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    context [context] containing in the types in the array [tys]. See the method
5675371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
568a156efdf71bc668093e31593713694cf076db895Torok Edwinval packed_struct_type : llcontext -> lltype array -> lltype
569a156efdf71bc668093e31593713694cf076db895Torok Edwin
570c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin(** [struct_name ty] returns the name of the named structure type [ty],
571e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    or None if the structure type is not named *)
572c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinval struct_name : lltype -> string option
573c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin
5746b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [named_struct_type context name] returns the named structure type [name]
575e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    in the context [context].
576e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::StructType::get]. *)
5776b228e506f42972c003599f4873a24910f8a530aTorok Edwinval named_struct_type : llcontext -> string -> lltype
5786b228e506f42972c003599f4873a24910f8a530aTorok Edwin
5796b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [struct_set_body ty elts ispacked] sets the body of the named struct [ty]
580e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    to the [elts] elements.
581e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the moethd [llvm::StructType::setBody]. *)
5826b228e506f42972c003599f4873a24910f8a530aTorok Edwinval struct_set_body : lltype -> lltype array -> bool -> unit
5830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5841940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [struct_element_types sty] returns the constituent types of the struct type
5851940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [sty]. See the method [llvm::StructType::getElementType]. *)
586a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_element_types : lltype -> lltype array
587a156efdf71bc668093e31593713694cf076db895Torok Edwin
5880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
5893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
590a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_packed : lltype -> bool
5918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5926b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [is_opaque sty] returns [true] if the structure type [sty] is opaque.
5936b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [false] otherwise. See the method [llvm::StructType::isOpaque]. *)
5946b228e506f42972c003599f4873a24910f8a530aTorok Edwinval is_opaque : lltype -> bool
5953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
596e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
5973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
5980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
6003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
601a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_type : lltype -> int -> lltype
6020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
60457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
6053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
606a156efdf71bc668093e31593713694cf076db895Torok Edwinval pointer_type : lltype -> lltype
60757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
60857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
60957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
6103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
611a156efdf71bc668093e31593713694cf076db895Torok Edwinval qualified_pointer_type : lltype -> int -> lltype
612a156efdf71bc668093e31593713694cf076db895Torok Edwin
6130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
6143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
615a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_type : lltype -> int -> lltype
6168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
6183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
619a156efdf71bc668093e31593713694cf076db895Torok Edwinval element_type : lltype -> lltype
6200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
6223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
623a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_length : lltype -> int
6240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
62557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
6263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
627a156efdf71bc668093e31593713694cf076db895Torok Edwinval address_space : lltype -> int
62857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
6290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
6303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
631a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_size : lltype -> int
6328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
6343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
6350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
636b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [void_type c] creates a type of a function which does not return any
637b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value in the context [c]. See [llvm::Type::VoidTy]. *)
638a156efdf71bc668093e31593713694cf076db895Torok Edwinval void_type : llcontext -> lltype
6390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
640b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [label_type c] creates a type of a basic block in the context [c]. See
641b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::LabelTy]. *)
642a156efdf71bc668093e31593713694cf076db895Torok Edwinval label_type : llcontext -> lltype
6438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [x86_mmx_type c] returns the x86 64-bit MMX register type in the
6458a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    context [c]. See [llvm::Type::X86_MMXTy]. *)
6468a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval x86_mmx_type : llcontext -> lltype
6478a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
648ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [type_by_name m name] returns the specified type from the current module
649e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    if it exists.
650e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::Module::getTypeByName] *)
651ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval type_by_name : llmodule -> string -> lltype option
652ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
653e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
6543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
6550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
6573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
658a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_of : llvalue -> lltype
6590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6606b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [classify_value v] returns the kind of the value [v]. *)
6613dd16741864302af14b31b7f75375c09d8544a35Torok Edwinval classify_value : llvalue -> ValueKind.t
6623dd16741864302af14b31b7f75375c09d8544a35Torok Edwin
6630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
6640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
6650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
6663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
667a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_name : llvalue -> string
6680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
6703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
671a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_value_name : string -> llvalue -> unit
6720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
6743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
675a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_value : llvalue -> unit
6768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
677ba0c7cd012b064e2d8009480f9ae6f7d75e00e13Peter Zotov(** [string_of_llvalue v] returns a string describing the value [v]. *)
678ba0c7cd012b064e2d8009480f9ae6f7d75e00e13Peter Zotovval string_of_llvalue : llvalue -> string
679ba0c7cd012b064e2d8009480f9ae6f7d75e00e13Peter Zotov
68068bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar(** [replace_all_uses_with old new] replaces all uses of the value [old]
681e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    with the value [new]. See the method [llvm::Value::replaceAllUsesWith]. *)
682a156efdf71bc668093e31593713694cf076db895Torok Edwinval replace_all_uses_with : llvalue -> llvalue -> unit
683a156efdf71bc668093e31593713694cf076db895Torok Edwin
68468bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar
685705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(* {6 Uses} *)
686705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
687705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_begin v] returns the first position in the use list for the value [v].
688705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [use_begin] and [use_succ] can e used to iterate over the use list in order.
689705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Value::use_begin]. *)
690a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_begin : llvalue -> lluse option
691705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
692705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_succ u] returns the use list position succeeding [u].
693705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::use_value_iterator::operator++]. *)
694a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_succ : lluse -> lluse option
695705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
696705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [user u] returns the user of the use [u].
697705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUser]. *)
698a156efdf71bc668093e31593713694cf076db895Torok Edwinval user : lluse -> llvalue
699705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
700705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [used_value u] returns the usee of the use [u].
701705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUsedValue]. *)
702a156efdf71bc668093e31593713694cf076db895Torok Edwinval used_value : lluse -> llvalue
703705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
704705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [iter_uses f v] applies function [f] to each of the users of the value [v]
705705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    in order. Tail recursive. *)
706705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval iter_uses : (lluse -> unit) -> llvalue -> unit
707705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
708705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_left_uses f init v] is [f (... (f init u1) ...) uN] where
709705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Tail recursive. *)
710705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_left_uses : ('a -> lluse -> 'a) -> 'a -> llvalue -> 'a
711705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
712705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_right_uses f v init] is [f u1 (... (f uN init) ...)] where
713705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Not tail recursive. *)
714705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_right_uses : (lluse -> 'a -> 'a) -> llvalue -> 'a -> 'a
715705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
716705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
717b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(* {6 Users} *)
718b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
719b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(** [operand v i] returns the operand at index [i] for the value [v]. See the
720b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar    method [llvm::User::getOperand]. *)
721a156efdf71bc668093e31593713694cf076db895Torok Edwinval operand : llvalue -> int -> llvalue
722b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
723f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [set_operand v i o] sets the operand of the value [v] at the index [i] to
724f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    the value [o].
725f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::setOperand]. *)
726a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_operand : llvalue -> int -> llvalue -> unit
727f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
728f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [num_operands v] returns the number of operands for the value [v].
729f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::getNumOperands]. *)
730a156efdf71bc668093e31593713694cf076db895Torok Edwinval num_operands : llvalue -> int
731b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
732e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
7333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
7340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
7363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
737a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_constant : llvalue -> bool
7380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
7403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
741a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_null : lltype -> llvalue
7420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
7443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
745a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_all_ones : (*int|vec*)lltype -> llvalue
7460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7475b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar(** [const_pointer_null ty] returns the constant null (zero) pointer of the type
7485b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar    [ty]. See the method [llvm::ConstantPointerNull::get]. *)
749a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointer_null : lltype -> llvalue
7505b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar
7510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
7523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
753a156efdf71bc668093e31593713694cf076db895Torok Edwinval undef : lltype -> llvalue
7540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
7563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
757a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_null : llvalue -> bool
7580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
7603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
761a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_undef : llvalue -> bool
7628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
7636b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [constexpr_opcode v] returns an [Opcode.t] corresponding to constexpr
7646b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov    value [v], or [Opcode.Invalid] if [v] is not a constexpr. *)
7656563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval constexpr_opcode : llvalue -> Opcode.t
766e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
767e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
76846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on instructions} *)
76946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
77046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [has_metadata i] returns whether or not the instruction [i] has any
77146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    metadata attached to it. See the function
77246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::hasMetadata]. *)
773a156efdf71bc668093e31593713694cf076db895Torok Edwinval has_metadata : llvalue -> bool
77446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
77546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [metadata i kind] optionally returns the metadata associated with the
77646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    kind [kind] in the instruction [i] See the function
77746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::getMetadata]. *)
778cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesval metadata : llvalue -> llmdkind -> llvalue option
77946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
78046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
78146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
782cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesval set_metadata : llvalue -> llmdkind -> llvalue -> unit
78346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
78446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_metadata i kind] clears the metadata of kind [kind] in the
78546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
786cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesval clear_metadata : llvalue -> llmdkind -> unit
78746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
78846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
78946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on metadata} *)
79046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
79146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdstring c s] returns the MDString of the string [s] in the context [c].
79246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
793a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdstring : llcontext -> string -> llvalue
79446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
79546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdnode c elts] returns the MDNode containing the values [elts] in the
79646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    context [c].
79746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
798a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdnode : llcontext -> llvalue array -> llvalue
79946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
8004f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin(** [get_mdstring v] returns the MDString.
801e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::MDString::getString] *)
8024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_mdstring : llvalue -> string option
8034f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
8046b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [get_named_metadata m name] returns all the MDNodes belonging to the named
805e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    metadata (if any).
806e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::NamedMDNode::getOperand]. *)
8074f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_named_metadata : llmodule -> string -> llvalue array
80846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
8098a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [add_named_metadata_operand m name v] adds [v] as the last operand of
8108a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    metadata named [name] in module [m]. If the metadata does not exist,
8118a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    it is created.
8128a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the methods [llvm::Module::getNamedMetadata()] and
8138a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    [llvm::MDNode::addOperand()]. *)
8148a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval add_named_metadata_operand : llmodule -> string -> llvalue -> unit
8158a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
816e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
8173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
8180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
8203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
821a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int : lltype -> int -> llvalue
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
8243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
825a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_of_int64 : lltype -> Int64.t -> bool -> llvalue
826a156efdf71bc668093e31593713694cf076db895Torok Edwin
8276563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** [int64_of_const c] returns the int64 value of the [c] constant integer.
828e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    None is returned if this is not an integer constant, or bitwidth exceeds 64.
829e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::ConstantInt::getSExtValue].*)
8306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval int64_of_const : llvalue -> Int64.t option
8310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
83245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
833e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
834a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int_of_string : lltype -> string -> int -> llvalue
835a156efdf71bc668093e31593713694cf076db895Torok Edwin
8360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
8372b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
838a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float : lltype -> float -> llvalue
8398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
84045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
84145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
842a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float_of_string : lltype -> string -> llvalue
843a156efdf71bc668093e31593713694cf076db895Torok Edwin
84445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
8453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
8460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
847b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_string c s] returns the constant [i8] array with the values of the
848b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] in the context [c]. The array is not 
849b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    null-terminated (but see {!const_stringz}). This value can in turn be used
850b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    as the initializer for a global variable. See the method
851b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::ConstantArray::get]. *)
852a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_string : llcontext -> string -> llvalue
8530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
854b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_stringz c s] returns the constant [i8] array with the values of the
855b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] and a null terminator in the context [c]. This
856b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value can in turn be used as the initializer for a global variable.
8573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
858a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_stringz : llcontext -> string -> llvalue
8590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
8610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
8620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
8633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
864a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_array : lltype -> llvalue array -> llvalue
8650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8665371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_struct context elts] returns the structured constant of type
8675371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [struct_type (Array.map type_of elts)] and containing the values [elts]
8685371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    in the context [context]. This value can in turn be used as the initializer
8696b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::getAnon]. *)
870a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_struct : llcontext -> llvalue array -> llvalue
871a156efdf71bc668093e31593713694cf076db895Torok Edwin
8726b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [const_named_struct namedty elts] returns the structured constant of type
8736b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [namedty] (which must be a named structure type) and containing the values [elts].
8746b228e506f42972c003599f4873a24910f8a530aTorok Edwin    This value can in turn be used as the initializer
8756b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::get]. *)
8766b228e506f42972c003599f4873a24910f8a530aTorok Edwinval const_named_struct : lltype -> llvalue array -> llvalue
8775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
8785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_packed_struct context elts] returns the structured constant of
8795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    type {!packed_struct_type} [(Array.map type_of elts)] and containing the
8805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    values [elts] in the context [context]. This value can in turn be used as
8815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the initializer for a global variable. See the method
8825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::ConstantStruct::get]. *)
883a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_packed_struct : llcontext -> llvalue array -> llvalue
884a156efdf71bc668093e31593713694cf076db895Torok Edwin
8850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
8860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
8873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
888a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_vector : llvalue array -> llvalue
8898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
8903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
8913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
8920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
893ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
894ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
895ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
896ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
897a156efdf71bc668093e31593713694cf076db895Torok Edwinval align_of : lltype -> llvalue
898ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
8990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
9000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
901ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
9023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
903a156efdf71bc668093e31593713694cf076db895Torok Edwinval size_of : lltype -> llvalue
9040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
9063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
907a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_neg : llvalue -> llvalue
9080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
90919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_neg c] returns the arithmetic negation of the constant [c] with
91019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the negation overflows.
91119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWNeg]. *)
912a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_neg : llvalue -> llvalue
91319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
91419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_neg c] returns the arithmetic negation of the constant [c] with
91519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the negation overflows.
91619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNUWNeg]. *)
917a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_neg : llvalue -> llvalue
91819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
9191b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
9201b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
921a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fneg : llvalue -> llvalue
9221b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
9243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
925a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_not : llvalue -> llvalue
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
9283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
929a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_add : llvalue -> llvalue -> llvalue
9300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
9321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
9331b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
934a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_add : llvalue -> llvalue -> llvalue
9351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
93619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_add c1 c2] returns the constant sum of two constants with no
93719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    unsigned wrapping. The result is undefined if the sum overflows.
93819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
939a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_add : llvalue -> llvalue -> llvalue
94019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
9411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
9421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
943a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fadd : llvalue -> llvalue -> llvalue
9441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
9463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
947a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sub : llvalue -> llvalue -> llvalue
9480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
94919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_sub c1 c2] returns the constant difference of two constants with
95019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
95119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
952a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_sub : llvalue -> llvalue -> llvalue
95319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
95419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_sub c1 c2] returns the constant difference of two constants with
95519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
95619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
957a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_sub : llvalue -> llvalue -> llvalue
95819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
9591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
9601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
961a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fsub : llvalue -> llvalue -> llvalue
9621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
9643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
965a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_mul : llvalue -> llvalue -> llvalue
9660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
96719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_mul c1 c2] returns the constant product of two constants with
96819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
96919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
970a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_mul : llvalue -> llvalue -> llvalue
97119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
97219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_mul c1 c2] returns the constant product of two constants with
97319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
97419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
975a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_mul : llvalue -> llvalue -> llvalue
97619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
9771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
9781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
979a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fmul : llvalue -> llvalue -> llvalue
9801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
9820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
9833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
984a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_udiv : llvalue -> llvalue -> llvalue
9850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
9870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
9881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
989a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sdiv : llvalue -> llvalue -> llvalue
9900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
9921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
9935371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
994a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_exact_sdiv : llvalue -> llvalue -> llvalue
9951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
9970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
9983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
999a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fdiv : llvalue -> llvalue -> llvalue
10000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
10020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
10033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
1004a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_urem : llvalue -> llvalue -> llvalue
10050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
10070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
10083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
1009a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_srem : llvalue -> llvalue -> llvalue
10100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
10120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
10133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
1014a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_frem : llvalue -> llvalue -> llvalue
10150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
10170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
10183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
1019a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_and : llvalue -> llvalue -> llvalue
10200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
10220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
10233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
1024a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_or : llvalue -> llvalue -> llvalue
10250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
10270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
10283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
1029a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_xor : llvalue -> llvalue -> llvalue
10300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
10320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
10333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
1034a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
1035a156efdf71bc668093e31593713694cf076db895Torok Edwin
10360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
10370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
10383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
1039a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
1040a156efdf71bc668093e31593713694cf076db895Torok Edwin
10410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
10420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
10433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
1044a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shl : llvalue -> llvalue -> llvalue
10450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
10470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
10483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
1049a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_lshr : llvalue -> llvalue -> llvalue
10500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
10520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
10533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
1054a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ashr : llvalue -> llvalue -> llvalue
10550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1056cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines(** [const_gep pc indices] returns the constant [getElementPtr] of [pc] with the
10570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
10583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
1059a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_gep : llvalue -> llvalue array -> llvalue
10600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1061cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [pc]
10621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
10631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
1064a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_in_bounds_gep : llvalue -> llvalue array -> llvalue
1065a156efdf71bc668093e31593713694cf076db895Torok Edwin
10660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
10670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
10683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
1069a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc : llvalue -> lltype -> llvalue
10700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
10720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
10733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
1074a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext : llvalue -> lltype -> llvalue
10750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
10770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
10783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
1079a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext : llvalue -> lltype -> llvalue
10800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
10820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
10833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
1084a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptrunc : llvalue -> lltype -> llvalue
10850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
10870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
10883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
1089a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpext : llvalue -> lltype -> llvalue
10900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
10920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
10933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
1094a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_uitofp : llvalue -> lltype -> llvalue
10950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
10970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
10983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
1099a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sitofp : llvalue -> lltype -> llvalue
11000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
11020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
11033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
1104a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptoui : llvalue -> lltype -> llvalue
11050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
11070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
11083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
1109a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptosi : llvalue -> lltype -> llvalue
11100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
11120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
11133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
1114a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ptrtoint : llvalue -> lltype -> llvalue
11150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
11170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
11183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
1119a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_inttoptr : llvalue -> lltype -> llvalue
11200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
11220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
11233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
1124a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_bitcast : llvalue -> lltype -> llvalue
11250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
11271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
11281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
1129a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext_or_bitcast : llvalue -> lltype -> llvalue
1130a156efdf71bc668093e31593713694cf076db895Torok Edwin
11311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
11321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
11331b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
1134a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext_or_bitcast : llvalue -> lltype -> llvalue
1135a156efdf71bc668093e31593713694cf076db895Torok Edwin
11361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
11371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
11381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
1139a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc_or_bitcast : llvalue -> lltype -> llvalue
1140a156efdf71bc668093e31593713694cf076db895Torok Edwin
11411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
11421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
11431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
1144a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointercast : llvalue -> lltype -> llvalue
1145a156efdf71bc668093e31593713694cf076db895Torok Edwin
1146c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov(** [const_intcast c ty ~is_signed] returns a constant sext/zext, bitcast,
1147c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov    or trunc for integer -> integer casts of constant [c] to type [ty].
1148c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov    When converting a narrower value to a wider one, whether sext or zext
1149c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov    will be used is controlled by [is_signed].
1150c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov    See the method [llvm::ConstantExpr::getIntegerCast]. *)
1151c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotovval const_intcast : llvalue -> lltype -> is_signed:bool -> llvalue
1152a156efdf71bc668093e31593713694cf076db895Torok Edwin
11531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
11545371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    fp casts of constant [c] to type [ty].
11551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
1156a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpcast : llvalue -> lltype -> llvalue
1157a156efdf71bc668093e31593713694cf076db895Torok Edwin
11580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
11590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
11603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
1161a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_select : llvalue -> llvalue -> llvalue -> llvalue
1162a156efdf71bc668093e31593713694cf076db895Torok Edwin
11630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
11640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
11650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
11663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
1167a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractelement : llvalue -> llvalue -> llvalue
1168a156efdf71bc668093e31593713694cf076db895Torok Edwin
11690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
11700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
11710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
11720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
11730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
11743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
1175a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
1176a156efdf71bc668093e31593713694cf076db895Torok Edwin
11770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
1178d6850b0f37e2bfdb189452562c00faa24dc32574Bob Wilson    See the LLVM Language Reference for details on the [shufflevector]
11790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
11803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
1181a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
1182a156efdf71bc668093e31593713694cf076db895Torok Edwin
11831b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
11841b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
11851b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
1186a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractvalue : llvalue -> int array -> llvalue
1187a156efdf71bc668093e31593713694cf076db895Torok Edwin
11881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
11891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
11901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
1191a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertvalue : llvalue -> llvalue -> int array -> llvalue
1192a156efdf71bc668093e31593713694cf076db895Torok Edwin
1193ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar(** [const_inline_asm ty asm con side align] inserts a inline assembly string.
1194ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar    See the method [llvm::InlineAsm::get]. *)
1195e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotovval const_inline_asm : lltype -> string -> string -> bool -> bool -> llvalue
1196ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar
1197c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [block_address f bb] returns the address of the basic block [bb] in the
1198c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    function [f]. See the method [llvm::BasicBlock::get]. *)
1199a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_address : llvalue -> llbasicblock -> llvalue
1200c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
12013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
12030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1204dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
1205dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
1206a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_parent : llvalue -> llmodule
1207dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
12090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
12103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
1211a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_declaration : llvalue -> bool
12120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
12143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
1215a156efdf71bc668093e31593713694cf076db895Torok Edwinval linkage : llvalue -> Linkage.t
12160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
12183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
1219a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_linkage : Linkage.t -> llvalue -> unit
12200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
12223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
1223a156efdf71bc668093e31593713694cf076db895Torok Edwinval section : llvalue -> string
12240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
12263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
1227a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_section : string -> llvalue -> unit
12280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
12303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
1231a156efdf71bc668093e31593713694cf076db895Torok Edwinval visibility : llvalue -> Visibility.t
12320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
12343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
1235a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_visibility : Visibility.t -> llvalue -> unit
1236a156efdf71bc668093e31593713694cf076db895Torok Edwin
12370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
12383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
1239a156efdf71bc668093e31593713694cf076db895Torok Edwinval alignment : llvalue -> int
12400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
12423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
1243a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_alignment : int -> llvalue -> unit
12448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
12453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
12470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
12498e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    with name [name] in module [m] in the default address space (0). If such a
12508e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global variable already exists, it is returned. If the type of the existing
12518e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global differs, then a bitcast to [ty] is returned. *)
1252a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_global : lltype -> string -> llmodule -> llvalue
1253a156efdf71bc668093e31593713694cf076db895Torok Edwin
1254df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [declare_qualified_global ty name addrspace m] returns a new global variable
1255df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    of type [ty] and with name [name] in module [m] in the address space
1256df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If such a global variable already exists, it is returned. If
1257df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    the type of the existing global differs, then a bitcast to [ty] is
1258df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    returned. *)
1259e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotovval declare_qualified_global : lltype -> string -> int -> llmodule -> llvalue
12608e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
12610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
12628e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    initializer [init] in module [m] in the default address space (0). If the
12638e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    named global already exists, it is renamed.
12643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1265a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_global : string -> llvalue -> llmodule -> llvalue
1266a156efdf71bc668093e31593713694cf076db895Torok Edwin
1267df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [define_qualified_global name init addrspace m] returns a new global with
1268df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    name [name] and initializer [init] in module [m] in the address space
1269df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If the named global already exists, it is renamed.
12708e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    See the constructor of [llvm::GlobalVariable]. *)
1271e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotovval define_qualified_global : string -> llvalue -> int -> llmodule -> llvalue
12728e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
12730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
12740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
12753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
1276a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_global : string -> llmodule -> llvalue option
1277a156efdf71bc668093e31593713694cf076db895Torok Edwin
12780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
12793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
1280a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_global : llvalue -> unit
12810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
12834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
12844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
12854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
1286a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_begin : llmodule -> (llmodule, llvalue) llpos
1287a156efdf71bc668093e31593713694cf076db895Torok Edwin
12884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
12894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
12904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
1291a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_succ : llvalue -> (llmodule, llvalue) llpos
1292a156efdf71bc668093e31593713694cf076db895Torok Edwin
12934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
12944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
12954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
12964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
12984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
12994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
13004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
13024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
13034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
13044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
1305a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_end : llmodule -> (llmodule, llvalue) llrev_pos
1306a156efdf71bc668093e31593713694cf076db895Torok Edwin
13074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
13084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
13094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
1310a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_pred : llvalue -> (llmodule, llvalue) llrev_pos
1311a156efdf71bc668093e31593713694cf076db895Torok Edwin
13124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
13134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
13144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
13154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
13174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
13184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
13194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
13210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
13223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
1323a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_global_constant : llvalue -> bool
13240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
13260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
13273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
1328a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_global_constant : bool -> llvalue -> unit
1329a156efdf71bc668093e31593713694cf076db895Torok Edwin
13300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
13313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
1332a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_initializer : llvalue -> llvalue
13330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
13350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
13363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1337a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_initializer : llvalue -> llvalue -> unit
13380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
13400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
13413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1342a156efdf71bc668093e31593713694cf076db895Torok Edwinval remove_initializer : llvalue -> unit
13430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
13450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
13463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
1347a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_thread_local : llvalue -> bool
13480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
13500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
13513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
1352a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_thread_local : bool -> llvalue -> unit
13538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
13548a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [is_thread_local gv] returns the thread local mode of the global
13558a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    variable [gv].
13568a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::GlobalVariable::getThreadLocalMode]. *)
13578a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval thread_local_mode : llvalue -> ThreadLocalMode.t
13588a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
13598a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [set_thread_local c gv] sets the thread local mode of the global
13608a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    variable [gv].
13618a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::GlobalVariable::setThreadLocalMode]. *)
13628a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval set_thread_local_mode : ThreadLocalMode.t -> llvalue -> unit
13638a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
13648a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [is_externally_initialized gv] returns [true] if the global
13658a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    variable [gv] is externally initialized and [false] otherwise.
13668a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::GlobalVariable::isExternallyInitialized]. *)
13678a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval is_externally_initialized : llvalue -> bool
13688a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
13698a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [set_externally_initialized c gv] sets the global variable [gv] to be
13708a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    externally initialized if [c] is [true] and not otherwise.
13718a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::GlobalVariable::setExternallyInitialized]. *)
13728a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval set_externally_initialized : bool -> llvalue -> unit
13738a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
13743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
13756ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** {7 Operations on aliases} *)
13766ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
13776ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** [add_alias m t a n] inserts an alias in the module [m] with the type [t] and
13786ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    the aliasee [a] with the name [n].
13796ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    See the constructor for [llvm::GlobalAlias]. *)
1380a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
1381a156efdf71bc668093e31593713694cf076db895Torok Edwin
13826ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
13833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
13840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
13860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
13870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
13883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
1389a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_function : string -> lltype -> llmodule -> llvalue
1390a156efdf71bc668093e31593713694cf076db895Torok Edwin
13910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
13920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
13930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
13943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1395a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_function : string -> lltype -> llmodule -> llvalue
1396a156efdf71bc668093e31593713694cf076db895Torok Edwin
13970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
13980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
13993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
1400a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_function : string -> llmodule -> llvalue option
1401a156efdf71bc668093e31593713694cf076db895Torok Edwin
14020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
14033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
1404a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_function : llvalue -> unit
14050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
14074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
14084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
14094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
1410a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_begin : llmodule -> (llmodule, llvalue) llpos
1411a156efdf71bc668093e31593713694cf076db895Torok Edwin
14124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
14134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
14144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
1415a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_succ : llvalue -> (llmodule, llvalue) llpos
1416a156efdf71bc668093e31593713694cf076db895Torok Edwin
14174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
14184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
14194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
14204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
14224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
14234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
14244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
14264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
14274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
14284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
1429a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_end : llmodule -> (llmodule, llvalue) llrev_pos
1430a156efdf71bc668093e31593713694cf076db895Torok Edwin
14314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
14324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
1433a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_pred : llvalue -> (llmodule, llvalue) llrev_pos
1434a156efdf71bc668093e31593713694cf076db895Torok Edwin
14354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
14364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
14374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
14384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
14404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
14414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
14424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
14443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
1445a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_intrinsic : llvalue -> bool
14460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
14483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
1449a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_call_conv : llvalue -> int
14500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
14520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
14533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
1454a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_function_call_conv : int -> llvalue -> unit
1455a156efdf71bc668093e31593713694cf076db895Torok Edwin
14565eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
145780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
14585eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
1459a156efdf71bc668093e31593713694cf076db895Torok Edwinval gc : llvalue -> string option
146080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
14615eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
14625eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
1463a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_gc : string option -> llvalue -> unit
146480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1465e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1466e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
14670941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_function_attr : llvalue -> Attribute.t -> unit
1468e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
14698a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [add_target_dependent_function_attr f a] adds target-dependent attribute
14708a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    [a] to function [f]. *)
14718a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval add_target_dependent_function_attr : llvalue -> string -> string -> unit
14728a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
14730be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [function_attr f] returns the function attribute for the function [f].
1474e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::Function::getAttributes] *)
14750be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval function_attr : llvalue -> Attribute.t list
14760be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1477e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1478e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
14790941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_function_attr : llvalue -> Attribute.t -> unit
14803b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1481e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
1482dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1483dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1484dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1485dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1486a156efdf71bc668093e31593713694cf076db895Torok Edwinval params : llvalue -> llvalue array
1487dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1488dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1489dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1490a156efdf71bc668093e31593713694cf076db895Torok Edwinval param : llvalue -> int -> llvalue
1491dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14920be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [param_attr p] returns the attributes of parameter [p].
1493e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the methods [llvm::Function::getAttributes] and
1494e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    [llvm::Attributes::getParamAttributes] *)
14950be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval param_attr : llvalue -> Attribute.t list
14960be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1497dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1498dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1499a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_parent : llvalue -> llvalue
1500dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
15014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
15024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
15034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
15044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
1505a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_begin : llvalue -> (llvalue, llvalue) llpos
15064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
15084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
15094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
1510a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_succ : llvalue -> (llvalue, llvalue) llpos
15114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
15134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
15144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
15154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
15174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
15184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
15194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
15214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
15224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
15234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
1524a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_end : llvalue -> (llvalue, llvalue) llrev_pos
15254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
15274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
1528a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_pred : llvalue -> (llvalue, llvalue) llrev_pos
1529a156efdf71bc668093e31593713694cf076db895Torok Edwin
15304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
15314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
15324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
15334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
15354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
15364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
15374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1538e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
15390941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_param_attr : llvalue -> Attribute.t -> unit
1540e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1541e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
15420941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_param_attr : llvalue -> Attribute.t -> unit
1543e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1544e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1545a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_param_alignment : llvalue -> int -> unit
1546a156efdf71bc668093e31593713694cf076db895Torok Edwin
1547dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
15483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
15490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
15513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
1552a156efdf71bc668093e31593713694cf076db895Torok Edwinval basic_blocks : llvalue -> llbasicblock array
15530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
15553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
1556a156efdf71bc668093e31593713694cf076db895Torok Edwinval entry_block : llvalue -> llbasicblock
15570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
15593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
1560a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_block : llbasicblock -> unit
15610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15628a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [remove_block bb] removes the basic block [bb] from its parent function.
15638a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::BasicBlock::removeFromParent]. *)
15648a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval remove_block : llbasicblock -> unit
15658a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
15668a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [move_block_before pos bb] moves the basic block [bb] before [pos].
15678a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::BasicBlock::moveBefore]. *)
15688a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval move_block_before : llbasicblock -> llbasicblock -> unit
15698a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
15708a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [move_block_after pos bb] moves the basic block [bb] after [pos].
15718a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::BasicBlock::moveAfter]. *)
15728a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval move_block_after : llbasicblock -> llbasicblock -> unit
15738a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
1574b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [append_block c name f] creates a new basic block named [name] at the end of
1575b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    function [f] in the context [c].
15763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1577a156efdf71bc668093e31593713694cf076db895Torok Edwinval append_block : llcontext -> string -> llvalue -> llbasicblock
1578a156efdf71bc668093e31593713694cf076db895Torok Edwin
1579b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [insert_block c name bb] creates a new basic block named [name] before the
1580b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    basic block [bb] in the context [c].
15813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1582a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_block : llcontext -> string -> llbasicblock -> llbasicblock
1583a156efdf71bc668093e31593713694cf076db895Torok Edwin
1584dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1585dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1586a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_parent : llbasicblock -> llvalue
1587dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
15884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
15894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
15904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
15914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
1592a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_begin : llvalue -> (llvalue, llbasicblock) llpos
1593a156efdf71bc668093e31593713694cf076db895Torok Edwin
15944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
15954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
15964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
1597a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
1598a156efdf71bc668093e31593713694cf076db895Torok Edwin
15994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
16004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
16014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
16024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
16044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
16054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
16064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
16084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
16094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
16104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
1611a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
1612a156efdf71bc668093e31593713694cf076db895Torok Edwin
16136b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [block_pred bb] returns the basic block list position preceding [After bb].
16144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
1615a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
1616a156efdf71bc668093e31593713694cf076db895Torok Edwin
16176b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [block_terminator bb] returns the terminator of the basic block [bb]. *)
1618ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval block_terminator : llbasicblock -> llvalue option
16194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
16214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
16224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
16234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
16254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
16264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
16274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
1629a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_of_block : llbasicblock -> llvalue
16300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
16320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
16333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
1634a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_is_block : llvalue -> bool
16350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
1637a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_of_value : llvalue -> llbasicblock
163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1639cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1640dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1641dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1642dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1643dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1644a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_parent : llvalue -> llbasicblock
1645dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
16466b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [delete_instruction i] deletes the instruction [i].
16476b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov * See the method [llvm::Instruction::eraseFromParent]. *)
16486b8416192aeb6502f027883b8056d389f2c186a9Peter Zotovval delete_instruction : llvalue -> unit
16496b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov
1650033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1651033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1652033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1653033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1654a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1655a156efdf71bc668093e31593713694cf076db895Torok Edwin
1656033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1657033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1658a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1659a156efdf71bc668093e31593713694cf076db895Torok Edwin
1660033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1661033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1662033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1663033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1664033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1665033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1666033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1667033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1668033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1669033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1670033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1671033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1672a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1673a156efdf71bc668093e31593713694cf076db895Torok Edwin
1674033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1675033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1676a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1677a156efdf71bc668093e31593713694cf076db895Torok Edwin
1678033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1679033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1680033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1681033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
16826b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [inst_opcode i] returns the [Opcode.t] corresponding to instruction [i],
16836b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov    or [Opcode.Invalid] if [i] is not an instruction. *)
16846563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval instr_opcode : llvalue -> Opcode.t
1685dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
16866b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** [icmp_predicate i] returns the [Icmp.t] corresponding to an [icmp]
16876b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov    instruction [i]. *)
16884917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwinval icmp_predicate : llvalue -> Icmp.t option
16894917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
1690e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
16913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
16923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
16943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
16953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
16963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1697a156efdf71bc668093e31593713694cf076db895Torok Edwinval instruction_call_conv: llvalue -> int
1698a156efdf71bc668093e31593713694cf076db895Torok Edwin
1699dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1700dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1701dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1702dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
17033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1704a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_instruction_call_conv: int -> llvalue -> unit
1705a156efdf71bc668093e31593713694cf076db895Torok Edwin
1706e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1707e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1708e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
17090941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1710e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1711e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1712e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1713e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
17140941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1715e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1716e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
17176b8416192aeb6502f027883b8056d389f2c186a9Peter Zotov(** {7 Operations on call instructions (only)} *)
171807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
171907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
172007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
172107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
1722a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_tail_call : llvalue -> bool
172307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
172407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
172507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
172607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
1727a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_tail_call : bool -> llvalue -> unit
17283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1729e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
17308a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** {7 Operations on load/store instructions (only)} *)
17318a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
17328a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [is_volatile i] is [true] if the load or store instruction [i] is marked
17338a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    as volatile.
17348a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the methods [llvm::LoadInst::isVolatile] and
17358a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    [llvm::StoreInst::isVolatile]. *)
17368a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval is_volatile : llvalue -> bool
17378a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
17388a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [set_volatile v i] marks the load or store instruction [i] as volatile
17398a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    if [v] is [true], unmarks otherwise.
17408a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the methods [llvm::LoadInst::setVolatile] and
17418a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    [llvm::StoreInst::setVolatile]. *)
17428a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval set_volatile : bool -> llvalue -> unit
17438a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
17448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
17453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
17460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
17483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
1749a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
1750a156efdf71bc668093e31593713694cf076db895Torok Edwin
17510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
17523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
1753a156efdf71bc668093e31593713694cf076db895Torok Edwinval incoming : llvalue -> (llvalue * llbasicblock) list
17542618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
17553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1756e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov
17573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
17580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17595371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [builder context] creates an instruction builder with no position in
17605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context]. It is invalid to use this builder until its position
17615371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    is set with {!position_before} or {!position_at_end}. See the constructor
17625371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for [llvm::LLVMBuilder]. *)
1763a156efdf71bc668093e31593713694cf076db895Torok Edwinval builder : llcontext -> llbuilder
1764033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1765033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1766033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
17675371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at : llcontext -> (llbasicblock, llvalue) llpos -> llbuilder
1768a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
17690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
17703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
17715371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_before : llcontext -> llvalue -> llbuilder
17720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
17743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
17755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at_end : llcontext -> llbasicblock -> llbuilder
1776033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1777033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1778033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1779033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1780a156efdf71bc668093e31593713694cf076db895Torok Edwinval position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1781a156efdf71bc668093e31593713694cf076db895Torok Edwin
17820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
17833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1784033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
17850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
17873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1788033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
178946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1790dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1791dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1792dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1793dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1794a156efdf71bc668093e31593713694cf076db895Torok Edwinval insertion_block : llbuilder -> llbasicblock
1795dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
17965c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
17975c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
17985c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
1799a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_into_builder : llvalue -> string -> llbuilder -> unit
1800a156efdf71bc668093e31593713694cf076db895Torok Edwin
18015c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
180246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Metadata} *)
180346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
180446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_current_debug_location b md] sets the current debug location [md] in
180546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    the builder [b].
180646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetDebugLocation]. *)
1807a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_current_debug_location : llbuilder -> llvalue -> unit
1808a156efdf71bc668093e31593713694cf076db895Torok Edwin
180946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_current_debug_location b] clears the current debug location in the
181046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    builder [b]. *)
1811a156efdf71bc668093e31593713694cf076db895Torok Edwinval clear_current_debug_location : llbuilder -> unit
1812a156efdf71bc668093e31593713694cf076db895Torok Edwin
181346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [current_debug_location b] returns the current debug location, or None
181446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    if none is currently set.
181546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::GetDebugLocation]. *)
1816a156efdf71bc668093e31593713694cf076db895Torok Edwinval current_debug_location : llbuilder -> llvalue option
1817a156efdf71bc668093e31593713694cf076db895Torok Edwin
181846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_inst_debug_location b i] sets the current debug location of the builder
181946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [b] to the instruction [i].
182046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetInstDebugLocation]. *)
1821a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_inst_debug_location : llbuilder -> llvalue -> unit
1822a156efdf71bc668093e31593713694cf076db895Torok Edwin
18233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
18250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
18270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
18280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
1830a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret_void : llbuilder -> llvalue
18310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
18330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
18340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
1836a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret : llvalue -> llbuilder -> llvalue
18370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1838e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1839e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1840e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1841e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1842a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1843a156efdf71bc668093e31593713694cf076db895Torok Edwin
18440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
18451430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %bb]
18460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
1848a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_br : llbasicblock -> llbuilder -> llvalue
18490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
18511430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %cond, %tbb, %fbb]
18520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
1854a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
1855a156efdf71bc668093e31593713694cf076db895Torok Edwin                         llvalue
18560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
185721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
18580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
185921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
186021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
18613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
1862a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
1863a156efdf71bc668093e31593713694cf076db895Torok Edwin
1864ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_malloc ty name b] creates an [malloc]
1865ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1866ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateMalloc]. *)
1867ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_malloc : lltype -> string -> llbuilder -> llvalue
1868ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1869ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_array_malloc ty val name b] creates an [array malloc]
1870ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1871ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateArrayMalloc]. *)
1872ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_array_malloc : lltype -> llvalue -> string -> llbuilder -> llvalue
1873ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1874ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_free p b] creates a [free]
1875ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1876ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LLVMBuilder::CreateFree]. *)
1877ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_free : llvalue -> llbuilder -> llvalue
18780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
187921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
188021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
188121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
1882a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_case : llvalue -> llvalue -> llbasicblock -> unit
1883a156efdf71bc668093e31593713694cf076db895Torok Edwin
1884ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [switch_default_dest sw] returns the default destination of the [switch]
1885e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    instruction.
1886e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm:;SwitchInst::getDefaultDest]. **)
1887ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval switch_default_dest : llvalue -> llbasicblock
188821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
1889c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [build_indirect_br addr count b] creates a
1890c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    [indirectbr %addr]
1891c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    instruction at the position specified by the instruction builder [b] with
1892c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    space reserved for [count] destinations.
1893c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIndirectBr]. *)
1894a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_indirect_br : llvalue -> int -> llbuilder -> llvalue
1895a156efdf71bc668093e31593713694cf076db895Torok Edwin
1896c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [add_destination br bb] adds the basic block [bb] as a possible branch
1897c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    location for the indirectbr instruction [br].
1898c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::IndirectBrInst::addDestination]. **)
1899a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_destination : llvalue -> llbasicblock -> unit
1900a156efdf71bc668093e31593713694cf076db895Torok Edwin
19010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
19020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
19030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
1905a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_invoke : llvalue -> llvalue array -> llbasicblock ->
190646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
1907a156efdf71bc668093e31593713694cf076db895Torok Edwin
190848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [build_landingpad ty persfn numclauses name b] creates an
190948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    [landingpad]
191048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    instruction at the position specified by the instruction builder [b].
191148488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LLVMBuilder::CreateLandingPad]. *)
191248488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval build_landingpad : lltype -> llvalue -> int -> string -> llbuilder ->
191348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin                         llvalue
191448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin
191548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [set_cleanup lp] sets the cleanup flag in the [landingpad]instruction.
191648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LandingPadInst::setCleanup]. *)
191748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval set_cleanup : llvalue -> bool -> unit
19180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1919ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [add_clause lp clause] adds the clause to the [landingpad]instruction.
1920ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LandingPadInst::addClause]. *)
1921ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval add_clause : llvalue -> llvalue -> unit
1922ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1923e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov(** [build_resume exn b] builds a [resume exn] instruction
1924e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    at the position specified by the instruction builder [b].
1925e5de63c7de04c81d7d8484e5b64f47941143c739Peter Zotov    See the method [llvm::LLVMBuilder::CreateResume] *)
1926ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_resume : llvalue -> llbuilder -> llvalue
1927ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
19280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
19290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
19300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
1932a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_unreachable : llbuilder -> llvalue
193346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
19343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
19353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
19360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
19380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
19390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
1941a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1942a156efdf71bc668093e31593713694cf076db895Torok Edwin
19431430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar(** [build_nsw_add x y name b] creates a
1944e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1945e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1946e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1947a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1948a156efdf71bc668093e31593713694cf076db895Torok Edwin
194919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_add x y name b] creates a
195019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw add %x, %y]
195119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
195219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWAdd]. *)
1953a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1954a156efdf71bc668093e31593713694cf076db895Torok Edwin
1955e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1956e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1957e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1958e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1959a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1960a156efdf71bc668093e31593713694cf076db895Torok Edwin
19610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
19620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
19630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
1965a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1966a156efdf71bc668093e31593713694cf076db895Torok Edwin
196719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_sub x y name b] creates a
196819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub %x, %y]
196919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
197019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWSub]. *)
1971a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1972a156efdf71bc668093e31593713694cf076db895Torok Edwin
197319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_sub x y name b] creates a
197419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub %x, %y]
197519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
197619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWSub]. *)
1977a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1978a156efdf71bc668093e31593713694cf076db895Torok Edwin
1979e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1980e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1981e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1982e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1983a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1984a156efdf71bc668093e31593713694cf076db895Torok Edwin
19850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
19860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
19870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
1989a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1990a156efdf71bc668093e31593713694cf076db895Torok Edwin
199119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_mul x y name b] creates a
199219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw mul %x, %y]
199319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
199419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWMul]. *)
1995a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1996a156efdf71bc668093e31593713694cf076db895Torok Edwin
199719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_mul x y name b] creates a
199819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw mul %x, %y]
199919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
200019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWMul]. *)
2001a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
2002a156efdf71bc668093e31593713694cf076db895Torok Edwin
2003e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
2004e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
2005e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2006e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
2007a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
2008a156efdf71bc668093e31593713694cf076db895Torok Edwin
20090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
20100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
20110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
2013a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
2014a156efdf71bc668093e31593713694cf076db895Torok Edwin
20150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
20160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
20170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
2019a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
2020a156efdf71bc668093e31593713694cf076db895Torok Edwin
2021e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
2022e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
2023e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2024e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
2025a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
2026a156efdf71bc668093e31593713694cf076db895Torok Edwin
20270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
20280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
20290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
2031a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
2032a156efdf71bc668093e31593713694cf076db895Torok Edwin
20330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
20340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
20350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
2037a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
2038a156efdf71bc668093e31593713694cf076db895Torok Edwin
20390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
20400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
20410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
2043a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
2044a156efdf71bc668093e31593713694cf076db895Torok Edwin
20450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
20460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
20470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
2049a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
2050a156efdf71bc668093e31593713694cf076db895Torok Edwin
20510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
20520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
20530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
2055a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
2056a156efdf71bc668093e31593713694cf076db895Torok Edwin
20570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
20580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
20590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
2061a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
2062a156efdf71bc668093e31593713694cf076db895Torok Edwin
20630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
20640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
20650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
2067a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
2068a156efdf71bc668093e31593713694cf076db895Torok Edwin
20690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
20700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
20710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
2073a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
2074a156efdf71bc668093e31593713694cf076db895Torok Edwin
20750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
20760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
20770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
2079a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
2080a156efdf71bc668093e31593713694cf076db895Torok Edwin
20810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
20820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
20830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
2085a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
2086a156efdf71bc668093e31593713694cf076db895Torok Edwin
20870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
20880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
20890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
20913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2092a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_neg : llvalue -> string -> llbuilder -> llvalue
2093a156efdf71bc668093e31593713694cf076db895Torok Edwin
209419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_neg x name b] creates a
209519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub 0, %x]
209619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
209719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
209819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2099a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
2100a156efdf71bc668093e31593713694cf076db895Torok Edwin
210119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_neg x name b] creates a
210219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub 0, %x]
210319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
210419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
210519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2106a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
2107a156efdf71bc668093e31593713694cf076db895Torok Edwin
210819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_fneg x name b] creates a
210919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = fsub 0, %x]
211019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
211119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
211219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFNeg]. *)
2113a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fneg : llvalue -> string -> llbuilder -> llvalue
2114a156efdf71bc668093e31593713694cf076db895Torok Edwin
21150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
21160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
21170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
21193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
2120a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_not : llvalue -> string -> llbuilder -> llvalue
2121a156efdf71bc668093e31593713694cf076db895Torok Edwin
212246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
21233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
21240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
21260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
21270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2129a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_alloca : lltype -> string -> llbuilder -> llvalue
2130a156efdf71bc668093e31593713694cf076db895Torok Edwin
21310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
21320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
21330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2135a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
2136a156efdf71bc668093e31593713694cf076db895Torok Edwin                              llvalue
21370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
21390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
21400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
2142a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_load : llvalue -> string -> llbuilder -> llvalue
2143a156efdf71bc668093e31593713694cf076db895Torok Edwin
21440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
21450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
21460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
2148a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_store : llvalue -> llvalue -> llbuilder -> llvalue
21498a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
21508a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(** [build_atomicrmw op ptr val o st b] creates an [atomicrmw] instruction with
21518a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    operation [op] performed on pointer [ptr] and value [val] with ordering [o]
21528a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    and singlethread flag set to [st] at the position specified by
21538a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    the instruction builder [b].
21548a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    See the method [llvm::IRBuilder::CreateAtomicRMW]. *)
21558a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovval build_atomicrmw : AtomicRMWBinOp.t -> llvalue -> llvalue ->
21568a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                      AtomicOrdering.t -> bool -> string -> llbuilder -> llvalue
2157a156efdf71bc668093e31593713694cf076db895Torok Edwin
2158632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
2159e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
21600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
2162a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2163a156efdf71bc668093e31593713694cf076db895Torok Edwin
2164e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
2165e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
2166e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2167e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
2168a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
2169a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llvalue
2170e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2171e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
2172e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
2173e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2174e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
2175a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_struct_gep : llvalue -> int -> string -> llbuilder ->
2176a156efdf71bc668093e31593713694cf076db895Torok Edwin                            llvalue
2177e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2178e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
2179e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
2180e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
2181a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_string : string -> string -> llbuilder -> llvalue
2182a156efdf71bc668093e31593713694cf076db895Torok Edwin
2183e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
2184e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
21855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    builder [b].
2186e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
2187a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_stringptr : string -> string -> llbuilder -> llvalue
2188a156efdf71bc668093e31593713694cf076db895Torok Edwin
2189e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
21903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
21910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
21930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
21940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
2196a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2197a156efdf71bc668093e31593713694cf076db895Torok Edwin
21980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
21990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
22000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
2202a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
2203a156efdf71bc668093e31593713694cf076db895Torok Edwin
22040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
22050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
22060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
2208a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
2209a156efdf71bc668093e31593713694cf076db895Torok Edwin
22100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
22110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
22120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
2214a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
2215a156efdf71bc668093e31593713694cf076db895Torok Edwin
22160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
22170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
22180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
2220a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
2221a156efdf71bc668093e31593713694cf076db895Torok Edwin
22220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
22230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
22240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
2226a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2227a156efdf71bc668093e31593713694cf076db895Torok Edwin
22280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
22290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
22300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
2232a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2233a156efdf71bc668093e31593713694cf076db895Torok Edwin
22340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
22350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
22360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
2238a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2239a156efdf71bc668093e31593713694cf076db895Torok Edwin
22400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
22410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
22420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
2244a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
2245a156efdf71bc668093e31593713694cf076db895Torok Edwin
22460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
22470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
22480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
2250a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
2251a156efdf71bc668093e31593713694cf076db895Torok Edwin
22520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
22530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
22540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
2256a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
2257a156efdf71bc668093e31593713694cf076db895Torok Edwin
22580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
22590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
22600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2261e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
2262a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2263a156efdf71bc668093e31593713694cf076db895Torok Edwin
2264e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
2265e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2266e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2267a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2268a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2269e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2270e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
2271e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2272e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
2273a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2274a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2275e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2276e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
2277e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2278e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2279a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2280a156efdf71bc668093e31593713694cf076db895Torok Edwin                                  llvalue
2281e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2282e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
2283e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2284e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
2285a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
2286a156efdf71bc668093e31593713694cf076db895Torok Edwin
2287e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
2288e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2289e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
2290a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2291a156efdf71bc668093e31593713694cf076db895Torok Edwin
2292e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
2293e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2294e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
2295a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2296a156efdf71bc668093e31593713694cf076db895Torok Edwin
2297e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
22983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
22990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
23010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
23020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
2304a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
2305a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
23060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
23080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
23090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
2311a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
2312a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
231346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
23143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
23153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
23160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
23180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
23190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2320a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
23213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
2322a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
2323a156efdf71bc668093e31593713694cf076db895Torok Edwin                     llvalue
23240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
23260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
23270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
2329a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2330a156efdf71bc668093e31593713694cf076db895Torok Edwin
23310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
23320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
23330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
2335a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
2336a156efdf71bc668093e31593713694cf076db895Torok Edwin                        llvalue
23370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
23390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
23400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
2342a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
2343a156efdf71bc668093e31593713694cf076db895Torok Edwin
23440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
23450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
23460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
2348a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
2349a156efdf71bc668093e31593713694cf076db895Torok Edwin                                llvalue
23500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
23520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
23530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
2355a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertelement : llvalue -> llvalue -> llvalue -> string ->
2356a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
23570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
23580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
23590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
23600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
23613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
2362a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
2363a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
23641ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2365cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines(** [build_extractvalue agg idx name b] creates a
2366e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
2367e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2368e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
2369a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
2370a156efdf71bc668093e31593713694cf076db895Torok Edwin
2371e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2372e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
2373e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
2374e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2375e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
2376a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
2377a156efdf71bc668093e31593713694cf076db895Torok Edwin                             llvalue
2378e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2379e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
2380e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
2381e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2382e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
2383a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_null : llvalue -> string -> llbuilder -> llvalue
2384a156efdf71bc668093e31593713694cf076db895Torok Edwin
2385e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
2386e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
2387e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2388e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
2389a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_not_null : llvalue -> string -> llbuilder -> llvalue
2390a156efdf71bc668093e31593713694cf076db895Torok Edwin
2391e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
2392e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
23935371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    instruction builder [b].
2394e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
2395a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
2396a156efdf71bc668093e31593713694cf076db895Torok Edwin
23971ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
23983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
2399da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2400da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
24013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
24023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
24033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
2404a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_file : string -> llmemorybuffer
2405da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
2406e239d20d36c2cdf4e4143c38d470300c11441a16Sylvestre Ledru  (** [of_stdin ()] is the memory buffer containing the contents of standard input.
24073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
2408a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_stdin : unit -> llmemorybuffer
2409f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov
2410f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov  (** [of_string ~name s] is the memory buffer containing the contents of string [s].
2411f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov      The name of memory buffer is set to [name] if it is provided. *)
2412f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov  val of_string : ?name:string -> string -> llmemorybuffer
2413f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov
2414f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov  (** [as_string mb] is the string containing the contents of memory buffer [mb]. *)
2415f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov  val as_string : llmemorybuffer -> string
2416da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
24173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
2418a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : llmemorybuffer -> unit
2419da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2420d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2421d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2422d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
2423d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2424d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
2425d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
2426d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
2427d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
2428d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2429d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
2430d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
2431d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
2432d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
2433a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create : unit -> [ `Module ] t
2434d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
243516609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar  (** [PassManager.create_function m] constructs a new function-by-function
243616609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      pass pipeline over the module [m]. It does not take ownership of [m].
243716609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      This type of pipeline is suitable for code generation and JIT compilation
243816609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      tasks.
2439d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
2440a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create_function : llmodule -> [ `Function ] t
2441a156efdf71bc668093e31593713694cf076db895Torok Edwin
2442d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
2443d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
2444d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
2445d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
2446a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_module : llmodule -> [ `Module ] t -> bool
2447a156efdf71bc668093e31593713694cf076db895Torok Edwin
2448d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
2449d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
2450d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
2451d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
2452a156efdf71bc668093e31593713694cf076db895Torok Edwin  val initialize : [ `Function ] t -> bool
2453d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2454d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
2455d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
2456d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
2457d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
2458a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_function : llvalue -> [ `Function ] t -> bool
2459d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2460d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
2461d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
2462d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
2463d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
2464a156efdf71bc668093e31593713694cf076db895Torok Edwin  val finalize : [ `Function ] t -> bool
2465d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2466d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
246716609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      the module.
2468d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
2469a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : [< any ] t -> unit
2470d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
2471