1bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen(*===-- llvm/llvm.mli - LLVM Ocaml Interface -------------------------------===*
28ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
38ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *                     The LLVM Compiler Infrastructure
48ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
5234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * This file is distributed under the University of Illinois Open Source
6234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * License. See LICENSE.TXT for details.
78ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *
88ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *===----------------------------------------------------------------------===*)
98ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** Core API.
113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    This interface provides an ocaml API for the LLVM intermediate
133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    representation, the classes in the VMCore library. *)
143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Abstract types}
178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    These abstract types correlate directly to the LLVM VMCore classes. *)
190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
205371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** The top-level container for all LLVM global data. See the
215371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext] class. *)
225371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaartype llcontext
235371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The top-level container for all other LLVM Intermediate Representation (IR)
253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    objects. See the [llvm::Module] class. *)
268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llmodule
270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** Each value in the LLVM IR has a type, an instance of [lltype]. See the
293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type] class. *)
303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksentype lltype
310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
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
513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The kind of an [lltype], the result of [classify_type ty]. See the
523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Type::TypeID] enumeration. *)
53404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind : sig
54404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
55404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Void
56eaf0608891cff27fe4cf08d180a6baf49e00f8aeBob Wilson  | Half
57404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
58404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
59404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
68404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
6932eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
70404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linkage of a global value, accessed with {!linkage} and
733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_linkage}. See [llvm::GlobalValue::LinkageTypes]. *)
74404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage : sig
75404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
76404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    External
7714b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
78404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
794aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
80404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
814aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
82404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
83404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
844aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
85404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
86404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
87404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
88404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
894aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
904aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
91404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linker visibility of a global value, accessed with {!visibility} and
943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_visibility}. See [llvm::GlobalValue::VisibilityTypes]. *)
95404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility : sig
96404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
97404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Default
98404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
99404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
100404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
1018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The following calling convention values may be accessed with
1033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!function_call_conv} and {!set_function_call_conv}. Calling
1043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    conventions are open-ended. *)
1051475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv : sig
1063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  val c : int             (** [c] is the C calling convention. *)
1071475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val fast : int          (** [fast] is the calling convention to allow LLVM
1080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                              maximum optimization opportunities. Use only with
1093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              internal linkage. *)
1101475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val cold : int          (** [cold] is the calling convention for
1113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              callee-save. *)
1121475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_stdcall : int   (** [x86_stdcall] is the familiar stdcall calling
1133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1141475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_fastcall : int  (** [x86_fastcall] is the familiar fastcall calling
1153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1161475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
11746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
118e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute : sig
119e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
120e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
121e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
122e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
123e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
124e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
125e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
126e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
127e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
128e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
129e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
130e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
131f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
132f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
133f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
134f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
135f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
1360941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Alignment of int
137f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
138f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
139f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
140f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
141570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
1420941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Stackalignment of int
1430be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | ReturnsTwice
1440be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | UWTable
1450be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | NonLazyBind
146e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
147e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for an integer comparison ([icmp]) instruction.
1493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ICmpInst::Predicate] enumeration. *)
150404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp : sig
151404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
152404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
153404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
154404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
155404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
156404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
157404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
158404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
159404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
160404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
161404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
162404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
16346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for a floating-point comparison ([fcmp]) instruction.
1653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::FCmpInst::Predicate] enumeration. *)
166404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp : sig
167404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
168404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
169404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
170404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
171404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
172404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
173404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
174404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
175404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
176404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
177404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
178404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
179404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
180404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
181404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
182404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
183404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
184404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
18546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1866563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** The opcodes for LLVM instructions and constant expressions. *)
1876563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinmodule Opcode : sig
1886563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  type t =
1896563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid (* not an instruction *)
1906563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Terminator Instructions *)
1916563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Ret
1926563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Br
1936563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Switch
1946563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IndirectBr
1956563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invoke
1966563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid2
1976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unreachable
1986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Standard Binary Operators *)
1996563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Add
2006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FAdd
2016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Sub
2026563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FSub
2036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Mul
2046563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FMul
2056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UDiv
2066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SDiv
2076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FDiv
2086563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | URem
2096563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SRem
2106563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FRem
2116563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Logical Operators *)
2126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Shl
2136563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LShr
2146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AShr
2156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | And
2166563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Or
2176563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Xor
2186563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Memory Operators *)
2196563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Alloca
2206563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Load
2216563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Store
2226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | GetElementPtr
2236563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Cast Operators *)
2246563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Trunc
2256563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ZExt
2266563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SExt
2276563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToUI
2286563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToSI
2296563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UIToFP
2306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SIToFP
2316563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPTrunc
2326563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPExt
2336563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PtrToInt
2346563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IntToPtr
2356563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | BitCast
2366563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Other Operators *)
2376563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ICmp
2386563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FCmp
2396563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PHI
2406563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Call
2416563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Select
2426563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp1
2436563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp2
2446563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | VAArg
2456563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractElement
2466563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertElement
2476563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ShuffleVector
2486563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractValue
2496563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertValue
2506563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Fence
2516563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicCmpXchg
2526563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicRMW
2536563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Resume
2546563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LandingPad
2556563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unwind
2566563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinend
2576563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
2583dd16741864302af14b31b7f75375c09d8544a35Torok Edwin(** The kind of an [llvalue], the result of [classify_value v].
2593dd16741864302af14b31b7f75375c09d8544a35Torok Edwin * See the various [LLVMIsA*] functions. *)
2603dd16741864302af14b31b7f75375c09d8544a35Torok Edwinmodule ValueKind : sig
2613dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  type t =
2623dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | NullValue
2633dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Argument
2643dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BasicBlock
2653dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | InlineAsm
2663dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDNode
2673dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDString
2683dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BlockAddress
2693dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantAggregateZero
2703dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantArray
2713dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantExpr
2723dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantFP
2733dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantInt
2743dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantPointerNull
2753dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantStruct
2763dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantVector
2773dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Function
2783dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalAlias
2793dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalVariable
2803dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | UndefValue
2813dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Instruction of Opcode.t
2823dd16741864302af14b31b7f75375c09d8544a35Torok Edwinend
2833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
2844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** {6 Iteration} *)
2854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [Before b] and [At_end a] specify positions from the start of the ['b] list
287224fceb41f993fbc954345f053dab4e8caf28329Gordon Henriksen    of [a]. [llpos] is used to specify positions in and for forward iteration
2884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    through the various value lists maintained by the LLVM IR. *)
2894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
2904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
2914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
2924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [After b] and [At_start a] specify positions from the end of the ['b] list
2944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of [a]. [llrev_pos] is used for reverse iteration through the various value
2954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    lists maintained by the LLVM IR. *)
2964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
2974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
2984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
2994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Exceptions} *)
3023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
303da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
304da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
3058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** {6 Contexts} *)
3075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_context ()] creates a context for storing the "global" state in
3095371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    LLVM. See the constructor [llvm::LLVMContext]. *)
310a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_context : unit -> llcontext
3115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [destroy_context ()] destroys a context. See the destructor
3135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext::~LLVMContext]. *)
314a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_context : llcontext -> unit
3155371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3165371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** See the function [llvm::getGlobalContext]. *)
317a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_context : unit -> llcontext
3185371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
31946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdkind_id context name] returns the MDKind ID that corresponds to the
32046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    name [name] in the context [context].  See the function
32146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::LLVMContext::getMDKindID]. *)
322a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdkind_id : llcontext -> string -> int
32346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
3245371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
3268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3275371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_module context id] creates a module with the supplied module ID in
3285371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context].  Modules are not garbage collected; it is mandatory
3295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    to call {!dispose_module} to free memory. See the constructor
3305371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::Module::Module]. *)
331a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_module : llcontext -> string -> llmodule
3328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
3340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
3350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
3363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
337a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_module : llmodule -> unit
3388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
339a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
3403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
341a156efdf71bc668093e31593713694cf076db895Torok Edwinval target_triple: llmodule -> string
342a156efdf71bc668093e31593713694cf076db895Torok Edwin
343a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
344a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
3453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
346a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_target_triple: string -> llmodule -> unit
347a156efdf71bc668093e31593713694cf076db895Torok Edwin
348a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
349a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
350a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
3513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
352a156efdf71bc668093e31593713694cf076db895Torok Edwinval data_layout: llmodule -> string
353a156efdf71bc668093e31593713694cf076db895Torok Edwin
354a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
355a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
3563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
357a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_data_layout: string -> llmodule -> unit
358a156efdf71bc668093e31593713694cf076db895Torok Edwin
3593c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
3603c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
361a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_module : llmodule -> unit
3623c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
3630941534c712d77243d9dda5e8c1d927563b4edffChris Lattner(** [set_module_inline_asm m asm] sets the inline assembler for the module. See
3640941534c712d77243d9dda5e8c1d927563b4edffChris Lattner    the method [llvm::Module::setModuleInlineAsm]. *)
365a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_module_inline_asm : llmodule -> string -> unit
366a156efdf71bc668093e31593713694cf076db895Torok Edwin
367ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [module_context m] returns the context of the specified module.
368ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Module::getContext] *)
369ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval module_context : llmodule -> llcontext
3708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
3720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
3743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
375a156efdf71bc668093e31593713694cf076db895Torok Edwinval classify_type : lltype -> TypeKind.t
3760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
377ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin(** [type_is_sized ty] returns whether the type has a size or not.
378791cfc211a9801002bfda6b3eb4de7e041f04f53Micah Villmow * If it doesn't then it is not safe to call the [DataLayout::] methods on it.
379ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin * *)
380ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwinval type_is_sized : lltype -> bool
381ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin
3825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [type_context ty] returns the {!llcontext} corresponding to the type [ty].
3835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    See the method [llvm::Type::getContext]. *)
384a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_context : lltype -> llcontext
3855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
3878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
3888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
3900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
391b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i1_type c] returns an integer type of bitwidth 1 in the context [c]. See
392b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int1Ty]. *)
393a156efdf71bc668093e31593713694cf076db895Torok Edwinval i1_type : llcontext -> lltype
3940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
395b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i8_type c] returns an integer type of bitwidth 8 in the context [c]. See
396b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int8Ty]. *)
397a156efdf71bc668093e31593713694cf076db895Torok Edwinval i8_type : llcontext -> lltype
3980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
399b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i16_type c] returns an integer type of bitwidth 16 in the context [c]. See
400b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int16Ty]. *)
401a156efdf71bc668093e31593713694cf076db895Torok Edwinval i16_type : llcontext -> lltype
4020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
403b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i32_type c] returns an integer type of bitwidth 32 in the context [c]. See
404b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int32Ty]. *)
405a156efdf71bc668093e31593713694cf076db895Torok Edwinval i32_type : llcontext -> lltype
4060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
407b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i64_type c] returns an integer type of bitwidth 64 in the context [c]. See
408b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int64Ty]. *)
409a156efdf71bc668093e31593713694cf076db895Torok Edwinval i64_type : llcontext -> lltype
4100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
411b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_type c n] returns an integer type of bitwidth [n] in the context
412b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See the method [llvm::IntegerType::get]. *)
413a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_type : llcontext -> int -> lltype
4140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
415b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_bitwidth c ty] returns the number of bits in the integer type [ty]
416b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    in the context [c].  See the method [llvm::IntegerType::getBitWidth]. *)
417a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_bitwidth : lltype -> int
4188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
4213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
422b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [float_type c] returns the IEEE 32-bit floating point type in the context
423b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FloatTy]. *)
424a156efdf71bc668093e31593713694cf076db895Torok Edwinval float_type : llcontext -> lltype
4250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
426b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [double_type c] returns the IEEE 64-bit floating point type in the context
427b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::DoubleTy]. *)
428a156efdf71bc668093e31593713694cf076db895Torok Edwinval double_type : llcontext -> lltype
4290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
430b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [x86fp80_type c] returns the x87 80-bit floating point type in the context
431b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::X86_FP80Ty]. *)
432a156efdf71bc668093e31593713694cf076db895Torok Edwinval x86fp80_type : llcontext -> lltype
4330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
434b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [fp128_type c] returns the IEEE 128-bit floating point type in the context
435b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FP128Ty]. *)
436a156efdf71bc668093e31593713694cf076db895Torok Edwinval fp128_type : llcontext -> lltype
4370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
438b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [ppc_fp128_type c] returns the PowerPC 128-bit floating point type in the
439b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. See [llvm::Type::PPC_FP128Ty]. *)
440a156efdf71bc668093e31593713694cf076db895Torok Edwinval ppc_fp128_type : llcontext -> lltype
4418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
4440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
4460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
4473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
448a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_type : lltype -> lltype array -> lltype
4490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
45048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [var_arg_function_type ret_ty param_tys] is just like
4510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
4520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
4533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
454a156efdf71bc668093e31593713694cf076db895Torok Edwinval var_arg_function_type : lltype -> lltype array -> lltype
455a156efdf71bc668093e31593713694cf076db895Torok Edwin
4560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
4583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
459a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_var_arg : lltype -> bool
4600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
4623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
463a156efdf71bc668093e31593713694cf076db895Torok Edwinval return_type : lltype -> lltype
4640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
4663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
467a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_types : lltype -> lltype array
4688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
4710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [struct_type context tys] returns the structure type in the context
4735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [context] containing in the types in the array [tys]. See the method
4745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
475a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_type : llcontext -> lltype array -> lltype
476a156efdf71bc668093e31593713694cf076db895Torok Edwin
4770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [packed_struct_type context ys] returns the packed structure type in the
4795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    context [context] containing in the types in the array [tys]. See the method
4805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
481a156efdf71bc668093e31593713694cf076db895Torok Edwinval packed_struct_type : llcontext -> lltype array -> lltype
482a156efdf71bc668093e31593713694cf076db895Torok Edwin
483c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin(** [struct_name ty] returns the name of the named structure type [ty],
484c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin * or None if the structure type is not named *)
485c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinval struct_name : lltype -> string option
486c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin
4876b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [named_struct_type context name] returns the named structure type [name]
4886b228e506f42972c003599f4873a24910f8a530aTorok Edwin * in the context [context].
4896b228e506f42972c003599f4873a24910f8a530aTorok Edwin * See the method [llvm::StructType::get]. *)
4906b228e506f42972c003599f4873a24910f8a530aTorok Edwinval named_struct_type : llcontext -> string -> lltype
4916b228e506f42972c003599f4873a24910f8a530aTorok Edwin
4926b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [struct_set_body ty elts ispacked] sets the body of the named struct [ty]
4936b228e506f42972c003599f4873a24910f8a530aTorok Edwin * to the [elts] elements.
4946b228e506f42972c003599f4873a24910f8a530aTorok Edwin * See the moethd [llvm::StructType::setBody]. *)
4956b228e506f42972c003599f4873a24910f8a530aTorok Edwinval struct_set_body : lltype -> lltype array -> bool -> unit
4960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4971940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [struct_element_types sty] returns the constituent types of the struct type
4981940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [sty]. See the method [llvm::StructType::getElementType]. *)
499a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_element_types : lltype -> lltype array
500a156efdf71bc668093e31593713694cf076db895Torok Edwin
5010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
5033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
504a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_packed : lltype -> bool
5058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5066b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [is_opaque sty] returns [true] if the structure type [sty] is opaque.
5076b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [false] otherwise. See the method [llvm::StructType::isOpaque]. *)
5086b228e506f42972c003599f4873a24910f8a530aTorok Edwinval is_opaque : lltype -> bool
5093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
5110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
5133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
514a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_type : lltype -> int -> lltype
5150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
51757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
5183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
519a156efdf71bc668093e31593713694cf076db895Torok Edwinval pointer_type : lltype -> lltype
52057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
52157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
52257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
5233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
524a156efdf71bc668093e31593713694cf076db895Torok Edwinval qualified_pointer_type : lltype -> int -> lltype
525a156efdf71bc668093e31593713694cf076db895Torok Edwin
5260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
5283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
529a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_type : lltype -> int -> lltype
5308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
5323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
533a156efdf71bc668093e31593713694cf076db895Torok Edwinval element_type : lltype -> lltype
5340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
5363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
537a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_length : lltype -> int
5380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
53957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
5403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
541a156efdf71bc668093e31593713694cf076db895Torok Edwinval address_space : lltype -> int
54257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
5430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
5443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
545a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_size : lltype -> int
5468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
5490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
550b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [void_type c] creates a type of a function which does not return any
551b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value in the context [c]. See [llvm::Type::VoidTy]. *)
552a156efdf71bc668093e31593713694cf076db895Torok Edwinval void_type : llcontext -> lltype
5530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
554b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [label_type c] creates a type of a basic block in the context [c]. See
555b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::LabelTy]. *)
556a156efdf71bc668093e31593713694cf076db895Torok Edwinval label_type : llcontext -> lltype
5578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
558ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [type_by_name m name] returns the specified type from the current module
559ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * if it exists.
560ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Module::getTypeByName] *)
561ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval type_by_name : llmodule -> string -> lltype option
562ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
5633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
5640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
5663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
567a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_of : llvalue -> lltype
5680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5693dd16741864302af14b31b7f75375c09d8544a35Torok Edwinval classify_value : llvalue -> ValueKind.t
5703dd16741864302af14b31b7f75375c09d8544a35Torok Edwin
5710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
5720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
5730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
5743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
575a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_name : llvalue -> string
5760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
5783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
579a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_value_name : string -> llvalue -> unit
5800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
5823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
583a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_value : llvalue -> unit
5848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
58568bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar(** [replace_all_uses_with old new] replaces all uses of the value [old]
58668bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar * with the value [new]. See the method [llvm::Value::replaceAllUsesWith]. *)
587a156efdf71bc668093e31593713694cf076db895Torok Edwinval replace_all_uses_with : llvalue -> llvalue -> unit
588a156efdf71bc668093e31593713694cf076db895Torok Edwin
58968bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar
5903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
591705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(* {6 Uses} *)
592705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
593705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_begin v] returns the first position in the use list for the value [v].
594705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [use_begin] and [use_succ] can e used to iterate over the use list in order.
595705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Value::use_begin]. *)
596a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_begin : llvalue -> lluse option
597705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
598705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_succ u] returns the use list position succeeding [u].
599705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::use_value_iterator::operator++]. *)
600a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_succ : lluse -> lluse option
601705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
602705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [user u] returns the user of the use [u].
603705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUser]. *)
604a156efdf71bc668093e31593713694cf076db895Torok Edwinval user : lluse -> llvalue
605705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
606705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [used_value u] returns the usee of the use [u].
607705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUsedValue]. *)
608a156efdf71bc668093e31593713694cf076db895Torok Edwinval used_value : lluse -> llvalue
609705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
610705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [iter_uses f v] applies function [f] to each of the users of the value [v]
611705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    in order. Tail recursive. *)
612705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval iter_uses : (lluse -> unit) -> llvalue -> unit
613705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
614705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_left_uses f init v] is [f (... (f init u1) ...) uN] where
615705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Tail recursive. *)
616705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_left_uses : ('a -> lluse -> 'a) -> 'a -> llvalue -> 'a
617705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
618705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_right_uses f v init] is [f u1 (... (f uN init) ...)] where
619705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Not tail recursive. *)
620705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_right_uses : (lluse -> 'a -> 'a) -> llvalue -> 'a -> 'a
621705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
622705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
623b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(* {6 Users} *)
624b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
625b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(** [operand v i] returns the operand at index [i] for the value [v]. See the
626b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar    method [llvm::User::getOperand]. *)
627a156efdf71bc668093e31593713694cf076db895Torok Edwinval operand : llvalue -> int -> llvalue
628b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
629f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [set_operand v i o] sets the operand of the value [v] at the index [i] to
630f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    the value [o].
631f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::setOperand]. *)
632a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_operand : llvalue -> int -> llvalue -> unit
633f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
634f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [num_operands v] returns the number of operands for the value [v].
635f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::getNumOperands]. *)
636a156efdf71bc668093e31593713694cf076db895Torok Edwinval num_operands : llvalue -> int
637b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
6383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
6390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
6413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
642a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_constant : llvalue -> bool
6430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
6453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
646a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_null : lltype -> llvalue
6470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
6493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
650a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_all_ones : (*int|vec*)lltype -> llvalue
6510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6525b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar(** [const_pointer_null ty] returns the constant null (zero) pointer of the type
6535b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar    [ty]. See the method [llvm::ConstantPointerNull::get]. *)
654a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointer_null : lltype -> llvalue
6555b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar
6560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
6573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
658a156efdf71bc668093e31593713694cf076db895Torok Edwinval undef : lltype -> llvalue
6590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
6613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
662a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_null : llvalue -> bool
6630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
6653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
666a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_undef : llvalue -> bool
6678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6686563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval constexpr_opcode : llvalue -> Opcode.t
66946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on instructions} *)
67046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
67146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [has_metadata i] returns whether or not the instruction [i] has any
67246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    metadata attached to it. See the function
67346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::hasMetadata]. *)
674a156efdf71bc668093e31593713694cf076db895Torok Edwinval has_metadata : llvalue -> bool
67546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
67646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [metadata i kind] optionally returns the metadata associated with the
67746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    kind [kind] in the instruction [i] See the function
67846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::getMetadata]. *)
679a156efdf71bc668093e31593713694cf076db895Torok Edwinval metadata : llvalue -> int -> llvalue option
68046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
68246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
683a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_metadata : llvalue -> int -> llvalue -> unit
68446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_metadata i kind] clears the metadata of kind [kind] in the
68646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
687a156efdf71bc668093e31593713694cf076db895Torok Edwinval clear_metadata : llvalue -> int -> unit
68846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
69046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on metadata} *)
69146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
69246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdstring c s] returns the MDString of the string [s] in the context [c].
69346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
694a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdstring : llcontext -> string -> llvalue
69546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
69646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdnode c elts] returns the MDNode containing the values [elts] in the
69746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    context [c].
69846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
699a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdnode : llcontext -> llvalue array -> llvalue
70046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
7014f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin(** [get_mdstring v] returns the MDString.
7024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * See the method [llvm::MDString::getString] *)
7034f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_mdstring : llvalue -> string option
7044f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
7054f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin(** [get_named_metadata m name] return all the MDNodes belonging to the named
7064f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * metadata (if any).
7074f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * See the method [llvm::NamedMDNode::getOperand]. *)
7084f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_named_metadata : llmodule -> string -> llvalue array
70946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
7103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
7110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
7133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
714a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int : lltype -> int -> llvalue
7150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
7173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
718a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_of_int64 : lltype -> Int64.t -> bool -> llvalue
719a156efdf71bc668093e31593713694cf076db895Torok Edwin
7206563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** [int64_of_const c] returns the int64 value of the [c] constant integer.
7216563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin * None is returned if this is not an integer constant, or bitwidth exceeds 64.
7226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin * See the method [llvm::ConstantInt::getSExtValue].*)
7236563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval int64_of_const : llvalue -> Int64.t option
7240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
72545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
72645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar * value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
727a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int_of_string : lltype -> string -> int -> llvalue
728a156efdf71bc668093e31593713694cf076db895Torok Edwin
72945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
7300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
7312b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
732a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float : lltype -> float -> llvalue
7338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
73445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
73545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
736a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float_of_string : lltype -> string -> llvalue
737a156efdf71bc668093e31593713694cf076db895Torok Edwin
73845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
7393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
7403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
7410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
742b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_string c s] returns the constant [i8] array with the values of the
743b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] in the context [c]. The array is not 
744b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    null-terminated (but see {!const_stringz}). This value can in turn be used
745b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    as the initializer for a global variable. See the method
746b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::ConstantArray::get]. *)
747a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_string : llcontext -> string -> llvalue
7480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
749b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_stringz c s] returns the constant [i8] array with the values of the
750b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] and a null terminator in the context [c]. This
751b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value can in turn be used as the initializer for a global variable.
7523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
753a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_stringz : llcontext -> string -> llvalue
7540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
7560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
7570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
7583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
759a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_array : lltype -> llvalue array -> llvalue
7600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7615371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_struct context elts] returns the structured constant of type
7625371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [struct_type (Array.map type_of elts)] and containing the values [elts]
7635371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    in the context [context]. This value can in turn be used as the initializer
7646b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::getAnon]. *)
765a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_struct : llcontext -> llvalue array -> llvalue
766a156efdf71bc668093e31593713694cf076db895Torok Edwin
7676b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [const_named_struct namedty elts] returns the structured constant of type
7686b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [namedty] (which must be a named structure type) and containing the values [elts].
7696b228e506f42972c003599f4873a24910f8a530aTorok Edwin    This value can in turn be used as the initializer
7706b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::get]. *)
7716b228e506f42972c003599f4873a24910f8a530aTorok Edwinval const_named_struct : lltype -> llvalue array -> llvalue
7725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
7735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_packed_struct context elts] returns the structured constant of
7745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    type {!packed_struct_type} [(Array.map type_of elts)] and containing the
7755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    values [elts] in the context [context]. This value can in turn be used as
7765371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the initializer for a global variable. See the method
7775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::ConstantStruct::get]. *)
778a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_packed_struct : llcontext -> llvalue array -> llvalue
779a156efdf71bc668093e31593713694cf076db895Torok Edwin
7800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
7820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
7833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
784a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_vector : llvalue array -> llvalue
7858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
7863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
7873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
7880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
789ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
790ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
791ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
792ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
793a156efdf71bc668093e31593713694cf076db895Torok Edwinval align_of : lltype -> llvalue
794ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
7950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
7960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
797ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
7983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
799a156efdf71bc668093e31593713694cf076db895Torok Edwinval size_of : lltype -> llvalue
8000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
8023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
803a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_neg : llvalue -> llvalue
8040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
80519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_neg c] returns the arithmetic negation of the constant [c] with
80619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the negation overflows.
80719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWNeg]. *)
808a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_neg : llvalue -> llvalue
80919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
81019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_neg c] returns the arithmetic negation of the constant [c] with
81119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the negation overflows.
81219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNUWNeg]. *)
813a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_neg : llvalue -> llvalue
81419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
8161b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
817a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fneg : llvalue -> llvalue
8181b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
8203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
821a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_not : llvalue -> llvalue
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
8243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
825a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_add : llvalue -> llvalue -> llvalue
8260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
8281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
8291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
830a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_add : llvalue -> llvalue -> llvalue
8311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
83219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_add c1 c2] returns the constant sum of two constants with no
83319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    unsigned wrapping. The result is undefined if the sum overflows.
83419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
835a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_add : llvalue -> llvalue -> llvalue
83619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
8381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
839a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fadd : llvalue -> llvalue -> llvalue
8401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
8423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
843a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sub : llvalue -> llvalue -> llvalue
8440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
84519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_sub c1 c2] returns the constant difference of two constants with
84619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
84719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
848a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_sub : llvalue -> llvalue -> llvalue
84919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
85019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_sub c1 c2] returns the constant difference of two constants with
85119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
85219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
853a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_sub : llvalue -> llvalue -> llvalue
85419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
8561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
857a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fsub : llvalue -> llvalue -> llvalue
8581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
8603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
861a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_mul : llvalue -> llvalue -> llvalue
8620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
86319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_mul c1 c2] returns the constant product of two constants with
86419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
86519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
866a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_mul : llvalue -> llvalue -> llvalue
86719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
86819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_mul c1 c2] returns the constant product of two constants with
86919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
87019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
871a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_mul : llvalue -> llvalue -> llvalue
87219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
8741b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
875a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fmul : llvalue -> llvalue -> llvalue
8761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
8780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
8793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
880a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_udiv : llvalue -> llvalue -> llvalue
8810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
8830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
8841b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
885a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sdiv : llvalue -> llvalue -> llvalue
8860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8871b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
8881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
8895371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
890a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_exact_sdiv : llvalue -> llvalue -> llvalue
8911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
8930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
8943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
895a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fdiv : llvalue -> llvalue -> llvalue
8960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
8980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
8993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
900a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_urem : llvalue -> llvalue -> llvalue
9010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9021b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
9030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
9043b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
905a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_srem : llvalue -> llvalue -> llvalue
9060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
9080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
9093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
910a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_frem : llvalue -> llvalue -> llvalue
9110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
9130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
915a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_and : llvalue -> llvalue -> llvalue
9160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
9180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
920a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_or : llvalue -> llvalue -> llvalue
9210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
9230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
925a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_xor : llvalue -> llvalue -> llvalue
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
9280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
9293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
930a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
931a156efdf71bc668093e31593713694cf076db895Torok Edwin
9320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
9340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
9353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
936a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
937a156efdf71bc668093e31593713694cf076db895Torok Edwin
9380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
9400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
9413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
942a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shl : llvalue -> llvalue -> llvalue
9430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
9450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
9463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
947a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_lshr : llvalue -> llvalue -> llvalue
9480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
9500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
9513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
952a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ashr : llvalue -> llvalue -> llvalue
9530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_gep pc indices] returns the constant [getElementPtr] of [p1] with the
9550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
9563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
957a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_gep : llvalue -> llvalue array -> llvalue
9580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [p1]
9601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
9611b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
962a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_in_bounds_gep : llvalue -> llvalue array -> llvalue
963a156efdf71bc668093e31593713694cf076db895Torok Edwin
9641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
9660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
9673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
968a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc : llvalue -> lltype -> llvalue
9690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
9710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
9723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
973a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext : llvalue -> lltype -> llvalue
9740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
9760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
9773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
978a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext : llvalue -> lltype -> llvalue
9790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
9810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
9823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
983a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptrunc : llvalue -> lltype -> llvalue
9840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
9860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
9873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
988a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpext : llvalue -> lltype -> llvalue
9890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
9910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
9923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
993a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_uitofp : llvalue -> lltype -> llvalue
9940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
9960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
9973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
998a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sitofp : llvalue -> lltype -> llvalue
9990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
10010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
10023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
1003a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptoui : llvalue -> lltype -> llvalue
10040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
10060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
10073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
1008a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptosi : llvalue -> lltype -> llvalue
10090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
10110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
10123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
1013a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ptrtoint : llvalue -> lltype -> llvalue
10140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
10160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
10173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
1018a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_inttoptr : llvalue -> lltype -> llvalue
10190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
10210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
10223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
1023a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_bitcast : llvalue -> lltype -> llvalue
10240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10251b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
10261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
1028a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext_or_bitcast : llvalue -> lltype -> llvalue
1029a156efdf71bc668093e31593713694cf076db895Torok Edwin
10301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
10321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10331b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
1034a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext_or_bitcast : llvalue -> lltype -> llvalue
1035a156efdf71bc668093e31593713694cf076db895Torok Edwin
10361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
10381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
1040a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc_or_bitcast : llvalue -> lltype -> llvalue
1041a156efdf71bc668093e31593713694cf076db895Torok Edwin
10421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
10441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
10451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
1046a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointercast : llvalue -> lltype -> llvalue
1047a156efdf71bc668093e31593713694cf076db895Torok Edwin
10481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10491b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_intcast c ty] returns a constant zext, bitcast, or trunc for integer
10501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    -> integer casts of constant [c] to type [ty].
10511b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getIntCast]. *)
1052a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_intcast : llvalue -> lltype -> llvalue
1053a156efdf71bc668093e31593713694cf076db895Torok Edwin
10541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
10565371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    fp casts of constant [c] to type [ty].
10571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
1058a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpcast : llvalue -> lltype -> llvalue
1059a156efdf71bc668093e31593713694cf076db895Torok Edwin
10601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
10620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
10633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
1064a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_select : llvalue -> llvalue -> llvalue -> llvalue
1065a156efdf71bc668093e31593713694cf076db895Torok Edwin
10660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
10680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
10690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
10703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
1071a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractelement : llvalue -> llvalue -> llvalue
1072a156efdf71bc668093e31593713694cf076db895Torok Edwin
10730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
10750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
10760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
10770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
10780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
10793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
1080a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
1081a156efdf71bc668093e31593713694cf076db895Torok Edwin
10820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
1084d6850b0f37e2bfdb189452562c00faa24dc32574Bob Wilson    See the LLVM Language Reference for details on the [shufflevector]
10850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
10863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
1087a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
1088a156efdf71bc668093e31593713694cf076db895Torok Edwin
10894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
10911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
10921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
1093a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractvalue : llvalue -> int array -> llvalue
1094a156efdf71bc668093e31593713694cf076db895Torok Edwin
10951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
10971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
10981b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
1099a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertvalue : llvalue -> llvalue -> int array -> llvalue
1100a156efdf71bc668093e31593713694cf076db895Torok Edwin
11011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
1102ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar(** [const_inline_asm ty asm con side align] inserts a inline assembly string.
1103ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar    See the method [llvm::InlineAsm::get]. *)
1104a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_inline_asm : lltype -> string -> string -> bool -> bool ->
1105ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                            llvalue
1106a156efdf71bc668093e31593713694cf076db895Torok Edwin
1107ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar
1108c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [block_address f bb] returns the address of the basic block [bb] in the
1109c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    function [f]. See the method [llvm::BasicBlock::get]. *)
1110a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_address : llvalue -> llbasicblock -> llvalue
1111c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
11123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
11133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
11140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1115dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
1116dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
1117a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_parent : llvalue -> llmodule
1118dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
11190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
11200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
11213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
1122a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_declaration : llvalue -> bool
11230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
11253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
1126a156efdf71bc668093e31593713694cf076db895Torok Edwinval linkage : llvalue -> Linkage.t
11270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
11293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
1130a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_linkage : Linkage.t -> llvalue -> unit
11310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
11333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
1134a156efdf71bc668093e31593713694cf076db895Torok Edwinval section : llvalue -> string
11350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
11373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
1138a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_section : string -> llvalue -> unit
11390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
11413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
1142a156efdf71bc668093e31593713694cf076db895Torok Edwinval visibility : llvalue -> Visibility.t
11430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
11453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
1146a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_visibility : Visibility.t -> llvalue -> unit
1147a156efdf71bc668093e31593713694cf076db895Torok Edwin
11480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
11503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
1151a156efdf71bc668093e31593713694cf076db895Torok Edwinval alignment : llvalue -> int
11520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
11543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
1155a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_alignment : int -> llvalue -> unit
11568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
11573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
11583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
11590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
11618e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    with name [name] in module [m] in the default address space (0). If such a
11628e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global variable already exists, it is returned. If the type of the existing
11638e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global differs, then a bitcast to [ty] is returned. *)
1164a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_global : lltype -> string -> llmodule -> llvalue
1165a156efdf71bc668093e31593713694cf076db895Torok Edwin
11660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1167df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [declare_qualified_global ty name addrspace m] returns a new global variable
1168df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    of type [ty] and with name [name] in module [m] in the address space
1169df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If such a global variable already exists, it is returned. If
1170df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    the type of the existing global differs, then a bitcast to [ty] is
1171df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    returned. *)
1172a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_qualified_global : lltype -> string -> int -> llmodule ->
11738e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                    llvalue
1174a156efdf71bc668093e31593713694cf076db895Torok Edwin
11758e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
11760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
11778e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    initializer [init] in module [m] in the default address space (0). If the
11788e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    named global already exists, it is renamed.
11793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1180a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_global : string -> llvalue -> llmodule -> llvalue
1181a156efdf71bc668093e31593713694cf076db895Torok Edwin
11820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1183df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [define_qualified_global name init addrspace m] returns a new global with
1184df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    name [name] and initializer [init] in module [m] in the address space
1185df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If the named global already exists, it is renamed.
11868e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    See the constructor of [llvm::GlobalVariable]. *)
1187a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_qualified_global : string -> llvalue -> int -> llmodule ->
11888e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                   llvalue
1189a156efdf71bc668093e31593713694cf076db895Torok Edwin
11908e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
11910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
11920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
11933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
1194a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_global : string -> llmodule -> llvalue option
1195a156efdf71bc668093e31593713694cf076db895Torok Edwin
11960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
11983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
1199a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_global : llvalue -> unit
12000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
12024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
12034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
12044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
1205a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_begin : llmodule -> (llmodule, llvalue) llpos
1206a156efdf71bc668093e31593713694cf076db895Torok Edwin
12074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
12094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
12104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
1211a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_succ : llvalue -> (llmodule, llvalue) llpos
1212a156efdf71bc668093e31593713694cf076db895Torok Edwin
12134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
12154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
12164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
12174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
12194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
12204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
12214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
12234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
12244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
12254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
1226a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_end : llmodule -> (llmodule, llvalue) llrev_pos
1227a156efdf71bc668093e31593713694cf076db895Torok Edwin
12284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
12304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
12314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
1232a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_pred : llvalue -> (llmodule, llvalue) llrev_pos
1233a156efdf71bc668093e31593713694cf076db895Torok Edwin
12344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
12364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
12374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
12384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
12404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
12414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
12424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
12440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
12453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
1246a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_global_constant : llvalue -> bool
12470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
12490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
12503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
1251a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_global_constant : bool -> llvalue -> unit
1252a156efdf71bc668093e31593713694cf076db895Torok Edwin
12530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
12553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
1256a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_initializer : llvalue -> llvalue
12570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
12590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
12603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1261a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_initializer : llvalue -> llvalue -> unit
12620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
12640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
12653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1266a156efdf71bc668093e31593713694cf076db895Torok Edwinval remove_initializer : llvalue -> unit
12670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
12690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
12703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
1271a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_thread_local : llvalue -> bool
12720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
12740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
12753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
1276a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_thread_local : bool -> llvalue -> unit
12778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
12783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12796ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** {7 Operations on aliases} *)
12806ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12816ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** [add_alias m t a n] inserts an alias in the module [m] with the type [t] and
12826ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    the aliasee [a] with the name [n].
12836ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    See the constructor for [llvm::GlobalAlias]. *)
1284a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
1285a156efdf71bc668093e31593713694cf076db895Torok Edwin
12866ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12876ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
12890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
12910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
12920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
12933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
1294a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_function : string -> lltype -> llmodule -> llvalue
1295a156efdf71bc668093e31593713694cf076db895Torok Edwin
12960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
12980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
12990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
13003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1301a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_function : string -> lltype -> llmodule -> llvalue
1302a156efdf71bc668093e31593713694cf076db895Torok Edwin
13030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
13050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
13063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
1307a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_function : string -> llmodule -> llvalue option
1308a156efdf71bc668093e31593713694cf076db895Torok Edwin
13090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
13113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
1312a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_function : llvalue -> unit
13130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
13154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
13164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
13174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
1318a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_begin : llmodule -> (llmodule, llvalue) llpos
1319a156efdf71bc668093e31593713694cf076db895Torok Edwin
13204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
13224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
13234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
1324a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_succ : llvalue -> (llmodule, llvalue) llpos
1325a156efdf71bc668093e31593713694cf076db895Torok Edwin
13264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
13284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
13294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
13304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
13324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
13334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
13344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
13364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
13374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
13384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
1339a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_end : llmodule -> (llmodule, llvalue) llrev_pos
1340a156efdf71bc668093e31593713694cf076db895Torok Edwin
13414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
13434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
1344a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_pred : llvalue -> (llmodule, llvalue) llrev_pos
1345a156efdf71bc668093e31593713694cf076db895Torok Edwin
13464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
13484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
13494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
13504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
13524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
13534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
13544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
13563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
1357a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_intrinsic : llvalue -> bool
13580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
13603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
1361a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_call_conv : llvalue -> int
13620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
13640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
13653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
1366a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_function_call_conv : int -> llvalue -> unit
1367a156efdf71bc668093e31593713694cf076db895Torok Edwin
136846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13695eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
137080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
13715eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
1372a156efdf71bc668093e31593713694cf076db895Torok Edwinval gc : llvalue -> string option
137380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
13745eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
13755eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
1376a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_gc : string option -> llvalue -> unit
137780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1378e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1379e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
13800941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_function_attr : llvalue -> Attribute.t -> unit
1381e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
13820be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [function_attr f] returns the function attribute for the function [f].
13830be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * See the method [llvm::Function::getAttributes] *)
13840be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval function_attr : llvalue -> Attribute.t list
13850be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1386e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1387e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
13880941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_function_attr : llvalue -> Attribute.t -> unit
13893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1390dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1391dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1392dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1393dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1394a156efdf71bc668093e31593713694cf076db895Torok Edwinval params : llvalue -> llvalue array
1395dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1396dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1397dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1398a156efdf71bc668093e31593713694cf076db895Torok Edwinval param : llvalue -> int -> llvalue
1399dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14000be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [param_attr p] returns the attributes of parameter [p].
14010be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * See the methods [llvm::Function::getAttributes] and
14020be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * [llvm::Attributes::getParamAttributes] *)
14030be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval param_attr : llvalue -> Attribute.t list
14040be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1405dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1406dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1407a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_parent : llvalue -> llvalue
1408dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
14104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
14114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
14124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
1413a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_begin : llvalue -> (llvalue, llvalue) llpos
14144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
14164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
14174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
1418a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_succ : llvalue -> (llvalue, llvalue) llpos
14194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
14214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
14224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
14234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
14254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
14264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
14274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
14294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
14304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
14314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
1432a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_end : llvalue -> (llvalue, llvalue) llrev_pos
14334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
14354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
1436a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_pred : llvalue -> (llvalue, llvalue) llrev_pos
1437a156efdf71bc668093e31593713694cf076db895Torok Edwin
14384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
14404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
14414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
14424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
14444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
14454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
14464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1447e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
14480941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_param_attr : llvalue -> Attribute.t -> unit
1449e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1450e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
14510941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_param_attr : llvalue -> Attribute.t -> unit
1452e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1453e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1454a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_param_alignment : llvalue -> int -> unit
1455a156efdf71bc668093e31593713694cf076db895Torok Edwin
1456dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
14580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
14603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
1461a156efdf71bc668093e31593713694cf076db895Torok Edwinval basic_blocks : llvalue -> llbasicblock array
14620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
14643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
1465a156efdf71bc668093e31593713694cf076db895Torok Edwinval entry_block : llvalue -> llbasicblock
14660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
14683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
1469a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_block : llbasicblock -> unit
14700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1471b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [append_block c name f] creates a new basic block named [name] at the end of
1472b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    function [f] in the context [c].
14733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1474a156efdf71bc668093e31593713694cf076db895Torok Edwinval append_block : llcontext -> string -> llvalue -> llbasicblock
1475a156efdf71bc668093e31593713694cf076db895Torok Edwin
14760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1477b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [insert_block c name bb] creates a new basic block named [name] before the
1478b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    basic block [bb] in the context [c].
14793b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1480a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_block : llcontext -> string -> llbasicblock -> llbasicblock
1481a156efdf71bc668093e31593713694cf076db895Torok Edwin
14820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1483dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1484dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1485a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_parent : llbasicblock -> llvalue
1486dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
14884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
14894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
14904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
1491a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_begin : llvalue -> (llvalue, llbasicblock) llpos
1492a156efdf71bc668093e31593713694cf076db895Torok Edwin
14934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
14954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
14964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
1497a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
1498a156efdf71bc668093e31593713694cf076db895Torok Edwin
14994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
15014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
15024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
15034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
15054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
15064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
15074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
15094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
15104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
15114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
1512a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
1513a156efdf71bc668093e31593713694cf076db895Torok Edwin
15144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_pred gv] returns the function list position preceding [After gv].
15164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
1517a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
1518a156efdf71bc668093e31593713694cf076db895Torok Edwin
1519ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval block_terminator : llbasicblock -> llvalue option
15204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
15224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
15234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
15244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
15264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
15274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
15284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
1530a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_of_block : llbasicblock -> llvalue
15310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
15330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
15343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
1535a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_is_block : llvalue -> bool
15360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
1538a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_of_value : llvalue -> llbasicblock
153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1540cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1541dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1542dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1543dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1544dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1545a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_parent : llvalue -> llbasicblock
1546dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1547033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1548033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1549033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1550033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1551a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1552a156efdf71bc668093e31593713694cf076db895Torok Edwin
1553033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1554033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1555033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1556a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1557a156efdf71bc668093e31593713694cf076db895Torok Edwin
1558033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1559033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1560033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1561033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1562033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1563033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1564033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1565033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1566033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1567033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1568033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1569033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1570033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1571a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1572a156efdf71bc668093e31593713694cf076db895Torok Edwin
1573033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1574033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1575033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1576a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1577a156efdf71bc668093e31593713694cf076db895Torok Edwin
1578033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1579033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1580033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1581033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1582033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
15836563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval instr_opcode : llvalue -> Opcode.t
1584dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
15854917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwinval icmp_predicate : llvalue -> Icmp.t option
15864917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
15873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
15883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
15893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
15903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
15913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
15923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1593a156efdf71bc668093e31593713694cf076db895Torok Edwinval instruction_call_conv: llvalue -> int
1594a156efdf71bc668093e31593713694cf076db895Torok Edwin
1595cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1596dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1597dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1598dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1599dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
16003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1601a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_instruction_call_conv: int -> llvalue -> unit
1602a156efdf71bc668093e31593713694cf076db895Torok Edwin
1603cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1604e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1605e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1606e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
16070941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1608e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1609e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1610e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1611e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
16120941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1613e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
161407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** {Operations on call instructions (only)} *)
161507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
161607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
161707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
161807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
1619a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_tail_call : llvalue -> bool
162007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
162107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
162207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
162307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
1624a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_tail_call : bool -> llvalue -> unit
16253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
16270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
16293b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
1630a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
1631a156efdf71bc668093e31593713694cf076db895Torok Edwin
16320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
16343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
1635a156efdf71bc668093e31593713694cf076db895Torok Edwinval incoming : llvalue -> (llvalue * llbasicblock) list
16362618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
1637ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [delete_instruction i] deletes the instruction [i].
1638ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Instruction::eraseFromParent]. *)
1639ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval delete_instruction : llvalue -> unit
16403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
16420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16435371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [builder context] creates an instruction builder with no position in
16445371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context]. It is invalid to use this builder until its position
16455371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    is set with {!position_before} or {!position_at_end}. See the constructor
16465371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for [llvm::LLVMBuilder]. *)
1647a156efdf71bc668093e31593713694cf076db895Torok Edwinval builder : llcontext -> llbuilder
1648033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1649033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1650033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
16515371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at : llcontext -> (llbasicblock, llvalue) llpos -> llbuilder
1652a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
16530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
16543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
16555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_before : llcontext -> llvalue -> llbuilder
16560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
16583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
16595371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at_end : llcontext -> llbasicblock -> llbuilder
1660033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1661033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1662033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1663033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1664a156efdf71bc668093e31593713694cf076db895Torok Edwinval position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1665a156efdf71bc668093e31593713694cf076db895Torok Edwin
16660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
16683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1669033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
16700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
16723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1673033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
167446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1675dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1676dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1677dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1678dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1679a156efdf71bc668093e31593713694cf076db895Torok Edwinval insertion_block : llbuilder -> llbasicblock
1680dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
16815c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
16825c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
16835c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
1684a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_into_builder : llvalue -> string -> llbuilder -> unit
1685a156efdf71bc668093e31593713694cf076db895Torok Edwin
16865c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
168746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Metadata} *)
168846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
168946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_current_debug_location b md] sets the current debug location [md] in
169046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    the builder [b].
169146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetDebugLocation]. *)
1692a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_current_debug_location : llbuilder -> llvalue -> unit
1693a156efdf71bc668093e31593713694cf076db895Torok Edwin
169446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
169546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_current_debug_location b] clears the current debug location in the
169646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    builder [b]. *)
1697a156efdf71bc668093e31593713694cf076db895Torok Edwinval clear_current_debug_location : llbuilder -> unit
1698a156efdf71bc668093e31593713694cf076db895Torok Edwin
169946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
170046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [current_debug_location b] returns the current debug location, or None
170146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    if none is currently set.
170246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::GetDebugLocation]. *)
1703a156efdf71bc668093e31593713694cf076db895Torok Edwinval current_debug_location : llbuilder -> llvalue option
1704a156efdf71bc668093e31593713694cf076db895Torok Edwin
170546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
170646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_inst_debug_location b i] sets the current debug location of the builder
170746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [b] to the instruction [i].
170846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetInstDebugLocation]. *)
1709a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_inst_debug_location : llbuilder -> llvalue -> unit
1710a156efdf71bc668093e31593713694cf076db895Torok Edwin
17113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
17123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
17130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
17150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
17160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
1718a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret_void : llbuilder -> llvalue
17190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
17210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
17220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
1724a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret : llvalue -> llbuilder -> llvalue
17250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1726e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1727e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1728e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1729e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1730a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1731a156efdf71bc668093e31593713694cf076db895Torok Edwin
1732e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
17330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
17341430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %bb]
17350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
1737a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_br : llbasicblock -> llbuilder -> llvalue
17380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
17401430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %cond, %tbb, %fbb]
17410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
1743a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
1744a156efdf71bc668093e31593713694cf076db895Torok Edwin                         llvalue
17450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
174621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
17470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
174821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
174921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
17503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
1751a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
1752a156efdf71bc668093e31593713694cf076db895Torok Edwin
1753ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_malloc ty name b] creates an [malloc]
1754ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1755ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateMalloc]. *)
1756ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_malloc : lltype -> string -> llbuilder -> llvalue
1757ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1758ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_array_malloc ty val name b] creates an [array malloc]
1759ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1760ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateArrayMalloc]. *)
1761ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_array_malloc : lltype -> llvalue -> string -> llbuilder -> llvalue
1762ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1763ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_free p b] creates a [free]
1764ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1765ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LLVMBuilder::CreateFree]. *)
1766ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_free : llvalue -> llbuilder -> llvalue
17670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
176821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
176921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
177021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
1771a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_case : llvalue -> llvalue -> llbasicblock -> unit
1772a156efdf71bc668093e31593713694cf076db895Torok Edwin
1773ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [switch_default_dest sw] returns the default destination of the [switch]
1774ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * instruction.
1775ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm:;SwitchInst::getDefaultDest]. **)
1776ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval switch_default_dest : llvalue -> llbasicblock
177721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
1778c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [build_indirect_br addr count b] creates a
1779c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    [indirectbr %addr]
1780c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    instruction at the position specified by the instruction builder [b] with
1781c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    space reserved for [count] destinations.
1782c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIndirectBr]. *)
1783a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_indirect_br : llvalue -> int -> llbuilder -> llvalue
1784a156efdf71bc668093e31593713694cf076db895Torok Edwin
1785c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
1786c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [add_destination br bb] adds the basic block [bb] as a possible branch
1787c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    location for the indirectbr instruction [br].
1788c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::IndirectBrInst::addDestination]. **)
1789a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_destination : llvalue -> llbasicblock -> unit
1790a156efdf71bc668093e31593713694cf076db895Torok Edwin
1791c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
17920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
17930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
17940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17953b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
1796a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_invoke : llvalue -> llvalue array -> llbasicblock ->
179746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
1798a156efdf71bc668093e31593713694cf076db895Torok Edwin
179948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [build_landingpad ty persfn numclauses name b] creates an
180048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    [landingpad]
180148488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    instruction at the position specified by the instruction builder [b].
180248488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LLVMBuilder::CreateLandingPad]. *)
180348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval build_landingpad : lltype -> llvalue -> int -> string -> llbuilder ->
180448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin                         llvalue
180548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin
180648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [set_cleanup lp] sets the cleanup flag in the [landingpad]instruction.
180748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LandingPadInst::setCleanup]. *)
180848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval set_cleanup : llvalue -> bool -> unit
18090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1810ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [add_clause lp clause] adds the clause to the [landingpad]instruction.
1811ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LandingPadInst::addClause]. *)
1812ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval add_clause : llvalue -> llvalue -> unit
1813ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1814ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(* [build_resume exn b] builds a [resume exn] instruction
1815ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * at the position specified by the instruction builder [b].
1816ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::LLVMBuilder::CreateResume] *)
1817ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_resume : llvalue -> llbuilder -> llvalue
1818ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
18190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
18200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
18210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
1823a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_unreachable : llbuilder -> llvalue
182446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
18253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18263b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
18270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
18290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
18300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
1832a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1833a156efdf71bc668093e31593713694cf076db895Torok Edwin
18340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18351430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar(** [build_nsw_add x y name b] creates a
1836e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1837e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1838e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1839a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1840a156efdf71bc668093e31593713694cf076db895Torok Edwin
1841e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
184219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_add x y name b] creates a
184319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw add %x, %y]
184419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
184519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWAdd]. *)
1846a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1847a156efdf71bc668093e31593713694cf076db895Torok Edwin
184819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1849e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1850e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1851e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1852e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1853a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1854a156efdf71bc668093e31593713694cf076db895Torok Edwin
1855e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
18570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
18580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
1860a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1861a156efdf71bc668093e31593713694cf076db895Torok Edwin
18620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
186319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_sub x y name b] creates a
186419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub %x, %y]
186519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
186619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWSub]. *)
1867a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1868a156efdf71bc668093e31593713694cf076db895Torok Edwin
186919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
187019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_sub x y name b] creates a
187119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub %x, %y]
187219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
187319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWSub]. *)
1874a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1875a156efdf71bc668093e31593713694cf076db895Torok Edwin
187619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1877e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1878e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1879e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1880e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1881a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1882a156efdf71bc668093e31593713694cf076db895Torok Edwin
1883e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
18850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
18860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
1888a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1889a156efdf71bc668093e31593713694cf076db895Torok Edwin
18900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
189119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_mul x y name b] creates a
189219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw mul %x, %y]
189319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
189419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWMul]. *)
1895a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1896a156efdf71bc668093e31593713694cf076db895Torok Edwin
189719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
189819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_mul x y name b] creates a
189919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw mul %x, %y]
190019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
190119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWMul]. *)
1902a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1903a156efdf71bc668093e31593713694cf076db895Torok Edwin
190419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1905e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
1906e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
1907e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1908e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
1909a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1910a156efdf71bc668093e31593713694cf076db895Torok Edwin
1911e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
19120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
19130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
19140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19153b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
1916a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1917a156efdf71bc668093e31593713694cf076db895Torok Edwin
19180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
19200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
19210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
1923a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1924a156efdf71bc668093e31593713694cf076db895Torok Edwin
19250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1926e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
1927e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
1928e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1929e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
1930a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1931a156efdf71bc668093e31593713694cf076db895Torok Edwin
1932e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
19330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
19340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
19350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
1937a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1938a156efdf71bc668093e31593713694cf076db895Torok Edwin
19390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
19410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
19420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
1944a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1945a156efdf71bc668093e31593713694cf076db895Torok Edwin
19460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
19480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
19490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
1951a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1952a156efdf71bc668093e31593713694cf076db895Torok Edwin
19530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
19550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
19560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
1958a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1959a156efdf71bc668093e31593713694cf076db895Torok Edwin
19600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
19620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
19630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
1965a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
1966a156efdf71bc668093e31593713694cf076db895Torok Edwin
19670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
19690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
19700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
1972a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
1973a156efdf71bc668093e31593713694cf076db895Torok Edwin
19740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
19760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
19770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
1979a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
1980a156efdf71bc668093e31593713694cf076db895Torok Edwin
19810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
19830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
19840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
1986a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
1987a156efdf71bc668093e31593713694cf076db895Torok Edwin
19880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
19900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
19910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
1993a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
1994a156efdf71bc668093e31593713694cf076db895Torok Edwin
19950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
19970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
19980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
2000a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
2001a156efdf71bc668093e31593713694cf076db895Torok Edwin
20020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
20040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
20050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
20073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2008a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_neg : llvalue -> string -> llbuilder -> llvalue
2009a156efdf71bc668093e31593713694cf076db895Torok Edwin
20100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
201119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_neg x name b] creates a
201219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub 0, %x]
201319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
201419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
201519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2016a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
2017a156efdf71bc668093e31593713694cf076db895Torok Edwin
201819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
201919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_neg x name b] creates a
202019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub 0, %x]
202119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
202219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
202319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2024a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
2025a156efdf71bc668093e31593713694cf076db895Torok Edwin
202619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
202719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_fneg x name b] creates a
202819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = fsub 0, %x]
202919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
203019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
203119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFNeg]. *)
2032a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fneg : llvalue -> string -> llbuilder -> llvalue
2033a156efdf71bc668093e31593713694cf076db895Torok Edwin
203419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
20350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
20360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
20370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
20393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
2040a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_not : llvalue -> string -> llbuilder -> llvalue
2041a156efdf71bc668093e31593713694cf076db895Torok Edwin
204246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
20433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
20443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
20450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
20470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
20480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2050a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_alloca : lltype -> string -> llbuilder -> llvalue
2051a156efdf71bc668093e31593713694cf076db895Torok Edwin
20520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
20540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
20550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2057a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
2058a156efdf71bc668093e31593713694cf076db895Torok Edwin                              llvalue
20590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
20610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
20620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
2064a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_load : llvalue -> string -> llbuilder -> llvalue
2065a156efdf71bc668093e31593713694cf076db895Torok Edwin
20660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
20680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
20690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
2071a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_store : llvalue -> llvalue -> llbuilder -> llvalue
2072a156efdf71bc668093e31593713694cf076db895Torok Edwin
20730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2074632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
2075e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
20760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
2078a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2079a156efdf71bc668093e31593713694cf076db895Torok Edwin
208046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2081e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
2082e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
2083e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2084e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
2085a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
2086a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llvalue
2087e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2088e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
2089e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
2090e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2091e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
2092a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_struct_gep : llvalue -> int -> string -> llbuilder ->
2093a156efdf71bc668093e31593713694cf076db895Torok Edwin                            llvalue
2094e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2095e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
2096e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
2097e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
2098a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_string : string -> string -> llbuilder -> llvalue
2099a156efdf71bc668093e31593713694cf076db895Torok Edwin
2100e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2101e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
2102e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
21035371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    builder [b].
2104e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
2105a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_stringptr : string -> string -> llbuilder -> llvalue
2106a156efdf71bc668093e31593713694cf076db895Torok Edwin
2107e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
21083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
21093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
21100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
21120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
21130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
2115a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2116a156efdf71bc668093e31593713694cf076db895Torok Edwin
21170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
21190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
21200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
2122a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
2123a156efdf71bc668093e31593713694cf076db895Torok Edwin
21240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
21260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
21270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
2129a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
2130a156efdf71bc668093e31593713694cf076db895Torok Edwin
21310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
21330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
21340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
2136a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
2137a156efdf71bc668093e31593713694cf076db895Torok Edwin
21380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
21400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
21410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
2143a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
2144a156efdf71bc668093e31593713694cf076db895Torok Edwin
21450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
21470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
21480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
2150a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2151a156efdf71bc668093e31593713694cf076db895Torok Edwin
21520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
21540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
21550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
2157a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2158a156efdf71bc668093e31593713694cf076db895Torok Edwin
21590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
21610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
21620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
2164a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2165a156efdf71bc668093e31593713694cf076db895Torok Edwin
21660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
21680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
21690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
2171a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
2172a156efdf71bc668093e31593713694cf076db895Torok Edwin
21730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
21750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
21760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
2178a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
2179a156efdf71bc668093e31593713694cf076db895Torok Edwin
21800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
21820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
21830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
2185a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
2186a156efdf71bc668093e31593713694cf076db895Torok Edwin
21870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
21890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
21900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2191e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
2192a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2193a156efdf71bc668093e31593713694cf076db895Torok Edwin
219446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2195e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
2196e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2197e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2198a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2199a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2200e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2201e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
2202e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2203e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
2204a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2205a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2206e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2207e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
2208e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2209e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2210a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2211a156efdf71bc668093e31593713694cf076db895Torok Edwin                                  llvalue
2212e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2213e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
2214e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2215e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
2216a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
2217a156efdf71bc668093e31593713694cf076db895Torok Edwin
2218e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2219e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
2220e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2221e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
2222a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2223a156efdf71bc668093e31593713694cf076db895Torok Edwin
2224e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2225e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
2226e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2227e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
2228a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2229a156efdf71bc668093e31593713694cf076db895Torok Edwin
2230e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
22313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
22323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
22330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
22350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
22360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
2238a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
2239a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
22400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
22420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
22430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
2245a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
2246a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
224746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
22483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
22493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
22500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
22520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
22530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2254a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
22553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
2256a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
2257a156efdf71bc668093e31593713694cf076db895Torok Edwin                     llvalue
22580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
22600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
22610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
2263a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2264a156efdf71bc668093e31593713694cf076db895Torok Edwin
22650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
22670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
22680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
2270a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
2271a156efdf71bc668093e31593713694cf076db895Torok Edwin                        llvalue
22720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
22740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
22750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
2277a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
2278a156efdf71bc668093e31593713694cf076db895Torok Edwin
22790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
22810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
22820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
2284a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
2285a156efdf71bc668093e31593713694cf076db895Torok Edwin                                llvalue
22860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
22880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
22890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
2291a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertelement : llvalue -> llvalue -> llvalue -> string ->
2292a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
22930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
22950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
22960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
2298a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
2299a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
23001ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2301e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg idx name b] creates a
2302e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
2303e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2304e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
2305a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
2306a156efdf71bc668093e31593713694cf076db895Torok Edwin
2307e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2308e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
2309e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
2310e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2311e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
2312a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
2313a156efdf71bc668093e31593713694cf076db895Torok Edwin                             llvalue
2314e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2315e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
2316e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
2317e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2318e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
2319a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_null : llvalue -> string -> llbuilder -> llvalue
2320a156efdf71bc668093e31593713694cf076db895Torok Edwin
2321e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2322e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
2323e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
2324e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2325e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
2326a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_not_null : llvalue -> string -> llbuilder -> llvalue
2327a156efdf71bc668093e31593713694cf076db895Torok Edwin
2328e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2329e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
2330e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
23315371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    instruction builder [b].
2332e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
2333a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
2334a156efdf71bc668093e31593713694cf076db895Torok Edwin
23351ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
23363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
23373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
2338da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2339da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
23403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
23413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
23423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
2343a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_file : string -> llmemorybuffer
2344da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
2345da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [stdin ()] is the memory buffer containing the contents of standard input.
23463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
2347a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_stdin : unit -> llmemorybuffer
2348da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
23493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
2350a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : llmemorybuffer -> unit
2351da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2352d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2353d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2354d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
2355d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2356d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
2357d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
2358d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
2359d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
2360d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2361d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
2362d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
2363d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
2364d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
2365a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create : unit -> [ `Module ] t
2366d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
236716609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar  (** [PassManager.create_function m] constructs a new function-by-function
236816609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      pass pipeline over the module [m]. It does not take ownership of [m].
236916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      This type of pipeline is suitable for code generation and JIT compilation
237016609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      tasks.
2371d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
2372a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create_function : llmodule -> [ `Function ] t
2373a156efdf71bc668093e31593713694cf076db895Torok Edwin
2374d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2375d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
2376d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
2377d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
2378d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
2379a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_module : llmodule -> [ `Module ] t -> bool
2380a156efdf71bc668093e31593713694cf076db895Torok Edwin
2381d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2382d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
2383d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
2384d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
2385d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
2386a156efdf71bc668093e31593713694cf076db895Torok Edwin  val initialize : [ `Function ] t -> bool
2387d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2388d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
2389d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
2390d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
2391d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
2392a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_function : llvalue -> [ `Function ] t -> bool
2393a156efdf71bc668093e31593713694cf076db895Torok Edwin
2394d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2395d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
2396d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
2397d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
2398d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
2399a156efdf71bc668093e31593713694cf076db895Torok Edwin  val finalize : [ `Function ] t -> bool
2400d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2401d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
240216609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      the module.
2403d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
2404a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : [< any ] t -> unit
2405d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
2406