llvm.mli revision ff616cb440d696b2663d55494e0a5aedfab20726
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
56404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
57404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
58404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
59404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
6832eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
69404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linkage of a global value, accessed with {!linkage} and
723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_linkage}. See [llvm::GlobalValue::LinkageTypes]. *)
73404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage : sig
74404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
75404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    External
7614b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
77404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
784aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
79404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
804aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
81404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
82404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
834aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
84404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
85404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
86404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
87404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
884aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
894aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
90404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The linker visibility of a global value, accessed with {!visibility} and
933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!set_visibility}. See [llvm::GlobalValue::VisibilityTypes]. *)
94404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility : sig
95404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
96404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    Default
97404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
98404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
99404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
1008ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** The following calling convention values may be accessed with
1023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!function_call_conv} and {!set_function_call_conv}. Calling
1033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    conventions are open-ended. *)
1041475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv : sig
1053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  val c : int             (** [c] is the C calling convention. *)
1061475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val fast : int          (** [fast] is the calling convention to allow LLVM
1070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen                              maximum optimization opportunities. Use only with
1083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              internal linkage. *)
1091475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val cold : int          (** [cold] is the calling convention for
1103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              callee-save. *)
1111475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_stdcall : int   (** [x86_stdcall] is the familiar stdcall calling
1123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1131475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  val x86_fastcall : int  (** [x86_fastcall] is the familiar fastcall calling
1143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen                              convention from C. *)
1151475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
11646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
117e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute : sig
118e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
119e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
120e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
121e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
122e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
123e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
124e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
125e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
126e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
127e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
128e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
129e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
130f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
131f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
132f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
133f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
134f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
1350941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Alignment of int
136f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
137f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
138f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
139f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
140570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
1410941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Stackalignment of int
1420be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | ReturnsTwice
1430be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | UWTable
1440be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | NonLazyBind
145e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
146e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for an integer comparison ([icmp]) instruction.
1483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::ICmpInst::Predicate] enumeration. *)
149404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp : sig
150404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
151404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
152404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
153404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
154404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
155404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
156404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
157404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
158404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
159404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
160404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
161404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
16246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** The predicate for a floating-point comparison ([fcmp]) instruction.
1643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::FCmpInst::Predicate] enumeration. *)
165404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp : sig
166404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
167404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
168404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
169404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
170404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
171404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
172404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
173404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
174404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
175404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
176404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
177404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
178404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
179404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
180404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
181404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
182404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
183404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
18446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1856563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** The opcodes for LLVM instructions and constant expressions. *)
1866563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinmodule Opcode : sig
1876563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  type t =
1886563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid (* not an instruction *)
1896563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Terminator Instructions *)
1906563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Ret
1916563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Br
1926563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Switch
1936563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IndirectBr
1946563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invoke
1956563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid2
1966563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unreachable
1976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Standard Binary Operators *)
1986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Add
1996563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FAdd
2006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Sub
2016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FSub
2026563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Mul
2036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FMul
2046563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UDiv
2056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SDiv
2066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FDiv
2076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | URem
2086563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SRem
2096563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FRem
2106563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Logical Operators *)
2116563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Shl
2126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LShr
2136563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AShr
2146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | And
2156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Or
2166563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Xor
2176563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Memory Operators *)
2186563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Alloca
2196563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Load
2206563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Store
2216563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | GetElementPtr
2226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Cast Operators *)
2236563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Trunc
2246563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ZExt
2256563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SExt
2266563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToUI
2276563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToSI
2286563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UIToFP
2296563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SIToFP
2306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPTrunc
2316563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPExt
2326563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PtrToInt
2336563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IntToPtr
2346563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | BitCast
2356563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Other Operators *)
2366563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ICmp
2376563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FCmp
2386563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PHI
2396563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Call
2406563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Select
2416563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp1
2426563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp2
2436563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | VAArg
2446563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractElement
2456563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertElement
2466563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ShuffleVector
2476563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractValue
2486563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertValue
2496563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Fence
2506563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicCmpXchg
2516563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicRMW
2526563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Resume
2536563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LandingPad
2546563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unwind
2556563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinend
2566563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
2573dd16741864302af14b31b7f75375c09d8544a35Torok Edwin(** The kind of an [llvalue], the result of [classify_value v].
2583dd16741864302af14b31b7f75375c09d8544a35Torok Edwin * See the various [LLVMIsA*] functions. *)
2593dd16741864302af14b31b7f75375c09d8544a35Torok Edwinmodule ValueKind : sig
2603dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  type t =
2613dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | NullValue
2623dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Argument
2633dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BasicBlock
2643dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | InlineAsm
2653dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDNode
2663dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDString
2673dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BlockAddress
2683dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantAggregateZero
2693dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantArray
2703dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantExpr
2713dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantFP
2723dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantInt
2733dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantPointerNull
2743dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantStruct
2753dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantVector
2763dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Function
2773dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalAlias
2783dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalVariable
2793dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | UndefValue
2803dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Instruction of Opcode.t
2813dd16741864302af14b31b7f75375c09d8544a35Torok Edwinend
2823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
2834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** {6 Iteration} *)
2844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [Before b] and [At_end a] specify positions from the start of the ['b] list
286224fceb41f993fbc954345f053dab4e8caf28329Gordon Henriksen    of [a]. [llpos] is used to specify positions in and for forward iteration
2874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    through the various value lists maintained by the LLVM IR. *)
2884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
2894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
2904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
2914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [After b] and [At_start a] specify positions from the end of the ['b] list
2934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of [a]. [llrev_pos] is used for reverse iteration through the various value
2944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    lists maintained by the LLVM IR. *)
2954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
2964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
2974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
2984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3003b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Exceptions} *)
3013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
302da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
303da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
3048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3055371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** {6 Contexts} *)
3065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_context ()] creates a context for storing the "global" state in
3085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    LLVM. See the constructor [llvm::LLVMContext]. *)
309a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_context : unit -> llcontext
3105371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [destroy_context ()] destroys a context. See the destructor
3125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::LLVMContext::~LLVMContext]. *)
313a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_context : llcontext -> unit
3145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3155371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** See the function [llvm::getGlobalContext]. *)
316a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_context : unit -> llcontext
3175371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
31846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdkind_id context name] returns the MDKind ID that corresponds to the
31946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    name [name] in the context [context].  See the function
32046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::LLVMContext::getMDKindID]. *)
321a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdkind_id : llcontext -> string -> int
32246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
3235371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Modules} *)
3258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3265371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [create_module context id] creates a module with the supplied module ID in
3275371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context].  Modules are not garbage collected; it is mandatory
3285371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    to call {!dispose_module} to free memory. See the constructor
3295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::Module::Module]. *)
330a156efdf71bc668093e31593713694cf076db895Torok Edwinval create_module : llcontext -> string -> llmodule
3318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dispose_module m] destroys a module [m] and all of the IR objects it
3330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    contained. All references to subordinate objects are invalidated;
3340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    referencing them will invoke undefined behavior. See the destructor
3353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Module::~Module]. *)
336a156efdf71bc668093e31593713694cf076db895Torok Edwinval dispose_module : llmodule -> unit
3378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
338a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple m] is the target specifier for the module [m], something like
3393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
340a156efdf71bc668093e31593713694cf076db895Torok Edwinval target_triple: llmodule -> string
341a156efdf71bc668093e31593713694cf076db895Torok Edwin
342a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
343a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [target_triple triple m] changes the target specifier for the module [m] to
3443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the string [triple]. See the method [llvm::Module::setTargetTriple]. *)
345a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_target_triple: string -> llmodule -> unit
346a156efdf71bc668093e31593713694cf076db895Torok Edwin
347a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
348a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [data_layout m] is the data layout specifier for the module [m], something
349a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen    like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
3503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    method [llvm::Module::getDataLayout]. *)
351a156efdf71bc668093e31593713694cf076db895Torok Edwinval data_layout: llmodule -> string
352a156efdf71bc668093e31593713694cf076db895Torok Edwin
353a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
354a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen(** [set_data_layout s m] changes the data layout specifier for the module [m]
3553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to the string [s]. See the method [llvm::Module::setDataLayout]. *)
356a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_data_layout: string -> llmodule -> unit
357a156efdf71bc668093e31593713694cf076db895Torok Edwin
3583c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen(** [dump_module m] prints the .ll representation of the module [m] to standard
3593c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen    error. See the method [llvm::Module::dump]. *)
360a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_module : llmodule -> unit
3613c5da81df86ec463c5604cb36d93e699a25c6b4dGordon Henriksen
3620941534c712d77243d9dda5e8c1d927563b4edffChris Lattner(** [set_module_inline_asm m asm] sets the inline assembler for the module. See
3630941534c712d77243d9dda5e8c1d927563b4edffChris Lattner    the method [llvm::Module::setModuleInlineAsm]. *)
364a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_module_inline_asm : llmodule -> string -> unit
365a156efdf71bc668093e31593713694cf076db895Torok Edwin
366ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [module_context m] returns the context of the specified module.
367ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Module::getContext] *)
368ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval module_context : llmodule -> llcontext
3698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Types} *)
3710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
3723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [classify_type ty] returns the {!TypeKind.t} corresponding to the type [ty].
3733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Type::getTypeID]. *)
374a156efdf71bc668093e31593713694cf076db895Torok Edwinval classify_type : lltype -> TypeKind.t
3750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
376ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin(** [type_is_sized ty] returns whether the type has a size or not.
377ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin * If it doesn't then it is not safe to call the [TargetData::] methods on it.
378ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin * *)
379ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwinval type_is_sized : lltype -> bool
380ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin
3815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [type_context ty] returns the {!llcontext} corresponding to the type [ty].
3825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    See the method [llvm::Type::getContext]. *)
383a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_context : lltype -> llcontext
3845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
3853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [string_of_lltype ty] returns a string describing the type [ty]. *)
3868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenval string_of_lltype : lltype -> string
3878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on integer types} *)
3890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
390b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i1_type c] returns an integer type of bitwidth 1 in the context [c]. See
391b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int1Ty]. *)
392a156efdf71bc668093e31593713694cf076db895Torok Edwinval i1_type : llcontext -> lltype
3930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
394b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i8_type c] returns an integer type of bitwidth 8 in the context [c]. See
395b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int8Ty]. *)
396a156efdf71bc668093e31593713694cf076db895Torok Edwinval i8_type : llcontext -> lltype
3970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
398b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i16_type c] returns an integer type of bitwidth 16 in the context [c]. See
399b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int16Ty]. *)
400a156efdf71bc668093e31593713694cf076db895Torok Edwinval i16_type : llcontext -> lltype
4010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
402b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i32_type c] returns an integer type of bitwidth 32 in the context [c]. See
403b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int32Ty]. *)
404a156efdf71bc668093e31593713694cf076db895Torok Edwinval i32_type : llcontext -> lltype
4050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
406b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [i64_type c] returns an integer type of bitwidth 64 in the context [c]. See
407b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::Int64Ty]. *)
408a156efdf71bc668093e31593713694cf076db895Torok Edwinval i64_type : llcontext -> lltype
4090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
410b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_type c n] returns an integer type of bitwidth [n] in the context
411b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See the method [llvm::IntegerType::get]. *)
412a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_type : llcontext -> int -> lltype
4130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
414b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [integer_bitwidth c ty] returns the number of bits in the integer type [ty]
415b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    in the context [c].  See the method [llvm::IntegerType::getBitWidth]. *)
416a156efdf71bc668093e31593713694cf076db895Torok Edwinval integer_bitwidth : lltype -> int
4178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on real types} *)
4203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
421b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [float_type c] returns the IEEE 32-bit floating point type in the context
422b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FloatTy]. *)
423a156efdf71bc668093e31593713694cf076db895Torok Edwinval float_type : llcontext -> lltype
4240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
425b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [double_type c] returns the IEEE 64-bit floating point type in the context
426b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::DoubleTy]. *)
427a156efdf71bc668093e31593713694cf076db895Torok Edwinval double_type : llcontext -> lltype
4280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
429b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [x86fp80_type c] returns the x87 80-bit floating point type in the context
430b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::X86_FP80Ty]. *)
431a156efdf71bc668093e31593713694cf076db895Torok Edwinval x86fp80_type : llcontext -> lltype
4320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
433b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [fp128_type c] returns the IEEE 128-bit floating point type in the context
434b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [c]. See [llvm::Type::FP128Ty]. *)
435a156efdf71bc668093e31593713694cf076db895Torok Edwinval fp128_type : llcontext -> lltype
4360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
437b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [ppc_fp128_type c] returns the PowerPC 128-bit floating point type in the
438b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    context [c]. See [llvm::Type::PPC_FP128Ty]. *)
439a156efdf71bc668093e31593713694cf076db895Torok Edwinval ppc_fp128_type : llcontext -> lltype
4408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on function types} *)
4430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_type ret_ty param_tys] returns the function type returning
4450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret_ty] and taking [param_tys] as parameters.
4463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
447a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_type : lltype -> lltype array -> lltype
4480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
44948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [var_arg_function_type ret_ty param_tys] is just like
4500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [function_type ret_ty param_tys] except that it returns the function type
4510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    which also takes a variable number of arguments.
4523b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::get]. *)
453a156efdf71bc668093e31593713694cf076db895Torok Edwinval var_arg_function_type : lltype -> lltype array -> lltype
454a156efdf71bc668093e31593713694cf076db895Torok Edwin
4550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_var_arg fty] returns [true] if [fty] is a varargs function type, [false]
4573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. See the method [llvm::FunctionType::isVarArg]. *)
458a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_var_arg : lltype -> bool
4590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [return_type fty] gets the return type of the function type [fty].
4613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getReturnType]. *)
462a156efdf71bc668093e31593713694cf076db895Torok Edwinval return_type : lltype -> lltype
4630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [param_types fty] gets the parameter types of the function type [fty].
4653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::FunctionType::getParamType]. *)
466a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_types : lltype -> lltype array
4678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
4693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on struct types} *)
4700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4715371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [struct_type context tys] returns the structure type in the context
4725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [context] containing in the types in the array [tys]. See the method
4735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
474a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_type : llcontext -> lltype array -> lltype
475a156efdf71bc668093e31593713694cf076db895Torok Edwin
4760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [packed_struct_type context ys] returns the packed structure type in the
4785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    context [context] containing in the types in the array [tys]. See the method
4795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::StructType::get]. *)
480a156efdf71bc668093e31593713694cf076db895Torok Edwinval packed_struct_type : llcontext -> lltype array -> lltype
481a156efdf71bc668093e31593713694cf076db895Torok Edwin
482c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin(** [struct_name ty] returns the name of the named structure type [ty],
483c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin * or None if the structure type is not named *)
484c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinval struct_name : lltype -> string option
485c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin
4866b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [named_struct_type context name] returns the named structure type [name]
4876b228e506f42972c003599f4873a24910f8a530aTorok Edwin * in the context [context].
4886b228e506f42972c003599f4873a24910f8a530aTorok Edwin * See the method [llvm::StructType::get]. *)
4896b228e506f42972c003599f4873a24910f8a530aTorok Edwinval named_struct_type : llcontext -> string -> lltype
4906b228e506f42972c003599f4873a24910f8a530aTorok Edwin
4916b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [struct_set_body ty elts ispacked] sets the body of the named struct [ty]
4926b228e506f42972c003599f4873a24910f8a530aTorok Edwin * to the [elts] elements.
4936b228e506f42972c003599f4873a24910f8a530aTorok Edwin * See the moethd [llvm::StructType::setBody]. *)
4946b228e506f42972c003599f4873a24910f8a530aTorok Edwinval struct_set_body : lltype -> lltype array -> bool -> unit
4950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
4961940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar(** [struct_element_types sty] returns the constituent types of the struct type
4971940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar    [sty]. See the method [llvm::StructType::getElementType]. *)
498a156efdf71bc668093e31593713694cf076db895Torok Edwinval struct_element_types : lltype -> lltype array
499a156efdf71bc668093e31593713694cf076db895Torok Edwin
5000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_packed sty] returns [true] if the structure type [sty] is packed,
5023b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [false] otherwise. See the method [llvm::StructType::isPacked]. *)
503a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_packed : lltype -> bool
5048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5056b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [is_opaque sty] returns [true] if the structure type [sty] is opaque.
5066b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [false] otherwise. See the method [llvm::StructType::isOpaque]. *)
5076b228e506f42972c003599f4873a24910f8a530aTorok Edwinval is_opaque : lltype -> bool
5083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on pointer, vector, and array types} *)
5100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [array_type ty n] returns the array type containing [n] elements of type
5123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::ArrayType::get]. *)
513a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_type : lltype -> int -> lltype
5140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [pointer_type ty] returns the pointer type referencing objects of type
51657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    [ty] in the default address space (0).
5173b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::getUnqual]. *)
518a156efdf71bc668093e31593713694cf076db895Torok Edwinval pointer_type : lltype -> lltype
51957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
52057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [qualified_pointer_type ty as] returns the pointer type referencing objects
52157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen    of type [ty] in address space [as].
5223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PointerType::get]. *)
523a156efdf71bc668093e31593713694cf076db895Torok Edwinval qualified_pointer_type : lltype -> int -> lltype
524a156efdf71bc668093e31593713694cf076db895Torok Edwin
5250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [vector_type ty n] returns the array type containing [n] elements of the
5273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    primitive type [ty]. See the method [llvm::ArrayType::get]. *)
528a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_type : lltype -> int -> lltype
5298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element type of the pointer, vector, or array
5313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    type [ty]. See the method [llvm::SequentialType::get]. *)
532a156efdf71bc668093e31593713694cf076db895Torok Edwinval element_type : lltype -> lltype
5330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type aty] returns the element count of the array type [aty].
5353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ArrayType::getNumElements]. *)
536a156efdf71bc668093e31593713694cf076db895Torok Edwinval array_length : lltype -> int
5370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
53857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen(** [address_space pty] returns the address space qualifier of the pointer type
5393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [pty]. See the method [llvm::PointerType::getAddressSpace]. *)
540a156efdf71bc668093e31593713694cf076db895Torok Edwinval address_space : lltype -> int
54157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
5420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [element_type ty] returns the element count of the vector type [ty].
5433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::VectorType::getNumElements]. *)
544a156efdf71bc668093e31593713694cf076db895Torok Edwinval vector_size : lltype -> int
5458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5463b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
5473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on other types} *)
5480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
549b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [void_type c] creates a type of a function which does not return any
550b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value in the context [c]. See [llvm::Type::VoidTy]. *)
551a156efdf71bc668093e31593713694cf076db895Torok Edwinval void_type : llcontext -> lltype
5520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
553b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [label_type c] creates a type of a basic block in the context [c]. See
554b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::Type::LabelTy]. *)
555a156efdf71bc668093e31593713694cf076db895Torok Edwinval label_type : llcontext -> lltype
5568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
557ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [type_by_name m name] returns the specified type from the current module
558ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * if it exists.
559ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Module::getTypeByName] *)
560ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval type_by_name : llmodule -> string -> lltype option
561ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
5623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(* {6 Values} *)
5630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [type_of v] returns the type of the value [v].
5653b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getType]. *)
566a156efdf71bc668093e31593713694cf076db895Torok Edwinval type_of : llvalue -> lltype
5670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5683dd16741864302af14b31b7f75375c09d8544a35Torok Edwinval classify_value : llvalue -> ValueKind.t
5693dd16741864302af14b31b7f75375c09d8544a35Torok Edwin
5700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_name v] returns the name of the value [v]. For global values, this is
5710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the symbol name. For instructions and basic blocks, it is the SSA register
5720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    name. It is meaningless for constants.
5733b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Value::getName]. *)
574a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_name : llvalue -> string
5750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [set_value_name n v] sets the name of the value [v] to [n]. See the method
5773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::Value::setName]. *)
578a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_value_name : string -> llvalue -> unit
5790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
5800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [dump_value v] prints the .ll representation of the value [v] to standard
5813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    error. See the method [llvm::Value::dump]. *)
582a156efdf71bc668093e31593713694cf076db895Torok Edwinval dump_value : llvalue -> unit
5838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
58468bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar(** [replace_all_uses_with old new] replaces all uses of the value [old]
58568bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar * with the value [new]. See the method [llvm::Value::replaceAllUsesWith]. *)
586a156efdf71bc668093e31593713694cf076db895Torok Edwinval replace_all_uses_with : llvalue -> llvalue -> unit
587a156efdf71bc668093e31593713694cf076db895Torok Edwin
58868bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar
5893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
590705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(* {6 Uses} *)
591705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
592705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_begin v] returns the first position in the use list for the value [v].
593705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [use_begin] and [use_succ] can e used to iterate over the use list in order.
594705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Value::use_begin]. *)
595a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_begin : llvalue -> lluse option
596705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
597705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [use_succ u] returns the use list position succeeding [u].
598705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::use_value_iterator::operator++]. *)
599a156efdf71bc668093e31593713694cf076db895Torok Edwinval use_succ : lluse -> lluse option
600705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
601705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [user u] returns the user of the use [u].
602705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUser]. *)
603a156efdf71bc668093e31593713694cf076db895Torok Edwinval user : lluse -> llvalue
604705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
605705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [used_value u] returns the usee of the use [u].
606705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    See the method [llvm::Use::getUsedValue]. *)
607a156efdf71bc668093e31593713694cf076db895Torok Edwinval used_value : lluse -> llvalue
608705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
609705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [iter_uses f v] applies function [f] to each of the users of the value [v]
610705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    in order. Tail recursive. *)
611705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval iter_uses : (lluse -> unit) -> llvalue -> unit
612705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
613705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_left_uses f init v] is [f (... (f init u1) ...) uN] where
614705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Tail recursive. *)
615705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_left_uses : ('a -> lluse -> 'a) -> 'a -> llvalue -> 'a
616705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
617705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(** [fold_right_uses f v init] is [f u1 (... (f uN init) ...)] where
618705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    [u1,...,uN] are the users of the value [v]. Not tail recursive. *)
619705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarval fold_right_uses : (lluse -> 'a -> 'a) -> llvalue -> 'a -> 'a
620705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
621705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
622b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(* {6 Users} *)
623b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
624b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(** [operand v i] returns the operand at index [i] for the value [v]. See the
625b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar    method [llvm::User::getOperand]. *)
626a156efdf71bc668093e31593713694cf076db895Torok Edwinval operand : llvalue -> int -> llvalue
627b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
628f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [set_operand v i o] sets the operand of the value [v] at the index [i] to
629f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    the value [o].
630f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::setOperand]. *)
631a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_operand : llvalue -> int -> llvalue -> unit
632f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
633f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar(** [num_operands v] returns the number of operands for the value [v].
634f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar    See the method [llvm::User::getNumOperands]. *)
635a156efdf71bc668093e31593713694cf076db895Torok Edwinval num_operands : llvalue -> int
636b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
6373b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on constants of (mostly) any type} *)
6380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_constant v] returns [true] if the value [v] is a constant, [false]
6403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<Constant>]. *)
641a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_constant : llvalue -> bool
6420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_null ty] returns the constant null (zero) of the type [ty].
6443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::getNullValue]. *)
645a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_null : lltype -> llvalue
6460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_all_ones ty] returns the constant '-1' of the integer or vector type
6483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [ty]. See the method [llvm::Constant::getAllOnesValue]. *)
649a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_all_ones : (*int|vec*)lltype -> llvalue
6500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6515b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar(** [const_pointer_null ty] returns the constant null (zero) pointer of the type
6525b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar    [ty]. See the method [llvm::ConstantPointerNull::get]. *)
653a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointer_null : lltype -> llvalue
6545b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaar
6550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [undef ty] returns the undefined value of the type [ty].
6563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::UndefValue::get]. *)
657a156efdf71bc668093e31593713694cf076db895Torok Edwinval undef : lltype -> llvalue
6580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_null v] returns [true] if the value [v] is the null (zero) value.
6603b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Constant::isNullValue]. *)
661a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_null : llvalue -> bool
6620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
6630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_undef v] returns [true] if the value [v] is an undefined value, [false]
6643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    otherwise. Similar to [llvm::isa<UndefValue>]. *)
665a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_undef : llvalue -> bool
6668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6676563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval constexpr_opcode : llvalue -> Opcode.t
66846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on instructions} *)
66946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
67046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [has_metadata i] returns whether or not the instruction [i] has any
67146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    metadata attached to it. See the function
67246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::hasMetadata]. *)
673a156efdf71bc668093e31593713694cf076db895Torok Edwinval has_metadata : llvalue -> bool
67446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
67546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [metadata i kind] optionally returns the metadata associated with the
67646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    kind [kind] in the instruction [i] See the function
67746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [llvm::Instruction::getMetadata]. *)
678a156efdf71bc668093e31593713694cf076db895Torok Edwinval metadata : llvalue -> int -> llvalue option
67946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_metadata i kind md] sets the metadata [md] of kind [kind] in the
68146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
682a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_metadata : llvalue -> int -> llvalue -> unit
68346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_metadata i kind] clears the metadata of kind [kind] in the
68546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    instruction [i]. See the function [llvm::Instruction::setMetadata]. *)
686a156efdf71bc668093e31593713694cf076db895Torok Edwinval clear_metadata : llvalue -> int -> unit
68746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
68946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Operations on metadata} *)
69046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
69146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdstring c s] returns the MDString of the string [s] in the context [c].
69246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
693a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdstring : llcontext -> string -> llvalue
69446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
69546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [mdnode c elts] returns the MDNode containing the values [elts] in the
69646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    context [c].
69746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::MDNode::get]. *)
698a156efdf71bc668093e31593713694cf076db895Torok Edwinval mdnode : llcontext -> llvalue array -> llvalue
69946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
7004f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin(** [get_mdstring v] returns the MDString.
7014f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * See the method [llvm::MDString::getString] *)
7024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_mdstring : llvalue -> string option
7034f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
7044f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin(** [get_named_metadata m name] return all the MDNodes belonging to the named
7054f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * metadata (if any).
7064f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin * See the method [llvm::NamedMDNode::getOperand]. *)
7074f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinval get_named_metadata : llmodule -> string -> llvalue array
70846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
7093b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on scalar constants} *)
7100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_int ty i] returns the integer constant of type [ty] and value [i].
7123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantInt::get]. *)
713a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int : lltype -> int -> llvalue
7140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_of_int64 ty i] returns the integer constant of type [ty] and value
7163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [i]. See the method [llvm::ConstantInt::get]. *)
717a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_of_int64 : lltype -> Int64.t -> bool -> llvalue
718a156efdf71bc668093e31593713694cf076db895Torok Edwin
7196563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin(** [int64_of_const c] returns the int64 value of the [c] constant integer.
7206563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin * None is returned if this is not an integer constant, or bitwidth exceeds 64.
7216563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin * See the method [llvm::ConstantInt::getSExtValue].*)
7226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval int64_of_const : llvalue -> Int64.t option
7230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
72445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
72545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar * value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
726a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_int_of_string : lltype -> string -> int -> llvalue
727a156efdf71bc668093e31593713694cf076db895Torok Edwin
72845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
7290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_float ty n] returns the floating point constant of type [ty] and
7302b526fec6a03be58f56e885af6b53c197973e573Erick Tryzelaar    value [n]. See the method [llvm::ConstantFP::get]. *)
731a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float : lltype -> float -> llvalue
7328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
73345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar(** [const_float_of_string ty s] returns the floating point constant of type
73445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar    [ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
735a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_float_of_string : lltype -> string -> llvalue
736a156efdf71bc668093e31593713694cf076db895Torok Edwin
73745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar
7383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
7393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on composite constants} *)
7400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
741b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_string c s] returns the constant [i8] array with the values of the
742b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] in the context [c]. The array is not 
743b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    null-terminated (but see {!const_stringz}). This value can in turn be used
744b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    as the initializer for a global variable. See the method
745b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    [llvm::ConstantArray::get]. *)
746a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_string : llcontext -> string -> llvalue
7470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
748b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [const_stringz c s] returns the constant [i8] array with the values of the
749b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    characters in the string [s] and a null terminator in the context [c]. This
750b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    value can in turn be used as the initializer for a global variable.
7513b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
752a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_stringz : llcontext -> string -> llvalue
7530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_array ty elts] returns the constant array of type
7550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [array_type ty (Array.length elts)] and containing the values [elts].
7560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    This value can in turn be used as the initializer for a global variable.
7573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantArray::get]. *)
758a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_array : lltype -> llvalue array -> llvalue
7590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_struct context elts] returns the structured constant of type
7615371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [struct_type (Array.map type_of elts)] and containing the values [elts]
7625371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    in the context [context]. This value can in turn be used as the initializer
7636b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::getAnon]. *)
764a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_struct : llcontext -> llvalue array -> llvalue
765a156efdf71bc668093e31593713694cf076db895Torok Edwin
7666b228e506f42972c003599f4873a24910f8a530aTorok Edwin(** [const_named_struct namedty elts] returns the structured constant of type
7676b228e506f42972c003599f4873a24910f8a530aTorok Edwin    [namedty] (which must be a named structure type) and containing the values [elts].
7686b228e506f42972c003599f4873a24910f8a530aTorok Edwin    This value can in turn be used as the initializer
7696b228e506f42972c003599f4873a24910f8a530aTorok Edwin    for a global variable. See the method [llvm::ConstantStruct::get]. *)
7706b228e506f42972c003599f4873a24910f8a530aTorok Edwinval const_named_struct : lltype -> llvalue array -> llvalue
7715371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar
7725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [const_packed_struct context elts] returns the structured constant of
7735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    type {!packed_struct_type} [(Array.map type_of elts)] and containing the
7745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    values [elts] in the context [context]. This value can in turn be used as
7755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the initializer for a global variable. See the method
7765371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    [llvm::ConstantStruct::get]. *)
777a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_packed_struct : llcontext -> llvalue array -> llvalue
778a156efdf71bc668093e31593713694cf076db895Torok Edwin
7790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
7800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_vector elts] returns the vector constant of type
7810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [vector_type (type_of elts.(0)) (Array.length elts)] and containing the
7823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    values [elts]. See the method [llvm::ConstantVector::get]. *)
783a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_vector : llvalue array -> llvalue
7848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
7853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
7863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Constant expressions} *)
7870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
788ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands(** [align_of ty] returns the alignof constant for the type [ty]. This is
789ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type {i8,ty}))
790ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 0) (const_int i32_type 1)) i32_type], but considerably
791ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    more readable.  See the method [llvm::ConstantExpr::getAlignOf]. *)
792a156efdf71bc668093e31593713694cf076db895Torok Edwinval align_of : lltype -> llvalue
793ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
7940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [size_of ty] returns the sizeof constant for the type [ty]. This is
7950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    equivalent to [const_ptrtoint (const_gep (const_null (pointer_type ty))
796ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands    (const_int i32_type 1)) i64_type], but considerably more readable.
7973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSizeOf]. *)
798a156efdf71bc668093e31593713694cf076db895Torok Edwinval size_of : lltype -> llvalue
7990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_neg c] returns the arithmetic negation of the constant [c].
8013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNeg]. *)
802a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_neg : llvalue -> llvalue
8030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
80419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_neg c] returns the arithmetic negation of the constant [c] with
80519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the negation overflows.
80619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWNeg]. *)
807a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_neg : llvalue -> llvalue
80819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
80919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_neg c] returns the arithmetic negation of the constant [c] with
81019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the negation overflows.
81119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNUWNeg]. *)
812a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_neg : llvalue -> llvalue
81319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8141b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fneg c] returns the arithmetic negation of the constant float [c].
8151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFNeg]. *)
816a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fneg : llvalue -> llvalue
8171b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_not c] returns the bitwise inverse of the constant [c].
8193b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getNot]. *)
820a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_not : llvalue -> llvalue
8210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_add c1 c2] returns the constant sum of two constants.
8233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAdd]. *)
824a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_add : llvalue -> llvalue -> llvalue
8250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_nsw_add c1 c2] returns the constant sum of two constants with no
8271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed wrapping. The result is undefined if the sum overflows.
8281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
829a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_add : llvalue -> llvalue -> llvalue
8301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
83119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_add c1 c2] returns the constant sum of two constants with no
83219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    unsigned wrapping. The result is undefined if the sum overflows.
83319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWAdd]. *)
834a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_add : llvalue -> llvalue -> llvalue
83519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fadd c1 c2] returns the constant sum of two constant floats.
8371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFAdd]. *)
838a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fadd : llvalue -> llvalue -> llvalue
8391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sub c1 c2] returns the constant difference, [c1 - c2], of two
8413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    constants. See the method [llvm::ConstantExpr::getSub]. *)
842a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sub : llvalue -> llvalue -> llvalue
8430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
84419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_sub c1 c2] returns the constant difference of two constants with
84519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
84619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
847a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_sub : llvalue -> llvalue -> llvalue
84819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
84919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_sub c1 c2] returns the constant difference of two constants with
85019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
85119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWSub]. *)
852a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_sub : llvalue -> llvalue -> llvalue
85319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fsub c1 c2] returns the constant difference, [c1 - c2], of two
8551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant floats. See the method [llvm::ConstantExpr::getFSub]. *)
856a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fsub : llvalue -> llvalue -> llvalue
8571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_mul c1 c2] returns the constant product of two constants.
8593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getMul]. *)
860a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_mul : llvalue -> llvalue -> llvalue
8610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
86219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nsw_mul c1 c2] returns the constant product of two constants with
86319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no signed wrapping. The result is undefined if the sum overflows.
86419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
865a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nsw_mul : llvalue -> llvalue -> llvalue
86619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
86719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [const_nuw_mul c1 c2] returns the constant product of two constants with
86819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    no unsigned wrapping. The result is undefined if the sum overflows.
86919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::ConstantExpr::getNSWMul]. *)
870a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_nuw_mul : llvalue -> llvalue -> llvalue
87119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
8721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fmul c1 c2] returns the constant product of two constants floats.
8731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFMul]. *)
874a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fmul : llvalue -> llvalue -> llvalue
8751b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_udiv c1 c2] returns the constant quotient [c1 / c2] of two unsigned
8770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
8783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUDiv]. *)
879a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_udiv : llvalue -> llvalue -> llvalue
8800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sdiv c1 c2] returns the constant quotient [c1 / c2] of two signed
8820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constants.
8831b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSDiv]. *)
884a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sdiv : llvalue -> llvalue -> llvalue
8850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8861b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_exact_sdiv c1 c2] returns the constant quotient [c1 / c2] of two
8871b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    signed integer constants. The result is undefined if the result is rounded
8885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    or overflows. See the method [llvm::ConstantExpr::getExactSDiv]. *)
889a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_exact_sdiv : llvalue -> llvalue -> llvalue
8901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
8910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fdiv c1 c2] returns the constant quotient [c1 / c2] of two floating
8920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants.
8933b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFDiv]. *)
894a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fdiv : llvalue -> llvalue -> llvalue
8950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
8961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_urem c1 c2] returns the constant remainder [c1 MOD c2] of two
8970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constants.
8983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getURem]. *)
899a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_urem : llvalue -> llvalue -> llvalue
9000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_srem c1 c2] returns the constant remainder [c1 MOD c2] of two
9020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constants.
9033b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSRem]. *)
904a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_srem : llvalue -> llvalue -> llvalue
9050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_frem c1 c2] returns the constant remainder [c1 MOD c2] of two
9070465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed floating point constants.
9083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFRem]. *)
909a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_frem : llvalue -> llvalue -> llvalue
9100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_and c1 c2] returns the constant bitwise [AND] of two integer
9120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAnd]. *)
914a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_and : llvalue -> llvalue -> llvalue
9150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_or c1 c2] returns the constant bitwise [OR] of two integer
9170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9183b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getOr]. *)
919a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_or : llvalue -> llvalue -> llvalue
9200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_xor c1 c2] returns the constant bitwise [XOR] of two integer
9220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants.
9233b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getXor]. *)
924a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_xor : llvalue -> llvalue -> llvalue
9250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_icmp pred c1 c2] returns the constant comparison of two integer
9270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constants, [c1 pred c2].
9283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getICmp]. *)
929a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
930a156efdf71bc668093e31593713694cf076db895Torok Edwin
9310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fcmp pred c1 c2] returns the constant comparison of two floating
9330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    point constants, [c1 pred c2].
9343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFCmp]. *)
935a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
936a156efdf71bc668093e31593713694cf076db895Torok Edwin
9370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shl c1 c2] returns the constant integer [c1] left-shifted by the
9390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2].
9403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShl]. *)
941a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shl : llvalue -> llvalue -> llvalue
9420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_lshr c1 c2] returns the constant integer [c1] right-shifted by the
9440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with zero extension.
9453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getLShr]. *)
946a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_lshr : llvalue -> llvalue -> llvalue
9470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ashr c1 c2] returns the constant integer [c1] right-shifted by the
9490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integer [c2] with sign extension.
9503b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getAShr]. *)
951a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ashr : llvalue -> llvalue -> llvalue
9520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_gep pc indices] returns the constant [getElementPtr] of [p1] with the
9540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant integers indices from the array [indices].
9553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getGetElementPtr]. *)
956a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_gep : llvalue -> llvalue array -> llvalue
9570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_in_bounds_gep pc indices] returns the constant [getElementPtr] of [p1]
9591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    with the constant integers indices from the array [indices].
9601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getInBoundsGetElementPtr]. *)
961a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_in_bounds_gep : llvalue -> llvalue array -> llvalue
962a156efdf71bc668093e31593713694cf076db895Torok Edwin
9631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
9640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_trunc c ty] returns the constant truncation of integer constant [c]
9650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to the smaller integer type [ty].
9663b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getTrunc]. *)
967a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc : llvalue -> lltype -> llvalue
9680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sext c ty] returns the constant sign extension of integer constant
9700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
9713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSExt]. *)
972a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext : llvalue -> lltype -> llvalue
9730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_zext c ty] returns the constant zero extension of integer constant
9750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger integer type [ty].
9763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getZExt]. *)
977a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext : llvalue -> lltype -> llvalue
9780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptrunc c ty] returns the constant truncation of floating point
9800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [c] to the smaller floating point type [ty].
9813b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPTrunc]. *)
982a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptrunc : llvalue -> lltype -> llvalue
9830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fpext c ty] returns the constant extension of floating point constant
9850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] to the larger floating point type [ty].
9863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPExt]. *)
987a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpext : llvalue -> lltype -> llvalue
9880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_uitofp c ty] returns the constant floating point conversion of
9900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    unsigned integer constant [c] to the floating point type [ty].
9913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getUIToFP]. *)
992a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_uitofp : llvalue -> lltype -> llvalue
9930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_sitofp c ty] returns the constant floating point conversion of
9950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    signed integer constant [c] to the floating point type [ty].
9963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSIToFP]. *)
997a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sitofp : llvalue -> lltype -> llvalue
9980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
9990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
10000465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
10013b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToUI]. *)
1002a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptoui : llvalue -> lltype -> llvalue
10030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_fptoui c ty] returns the constant unsigned integer conversion of
10050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    floating point constant [c] to integer type [ty].
10063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getFPToSI]. *)
1007a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fptosi : llvalue -> lltype -> llvalue
10080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_ptrtoint c ty] returns the constant integer conversion of
10100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    pointer constant [c] to integer type [ty].
10113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getPtrToInt]. *)
1012a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_ptrtoint : llvalue -> lltype -> llvalue
10130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_inttoptr c ty] returns the constant pointer conversion of
10150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    integer constant [c] to pointer type [ty].
10163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getIntToPtr]. *)
1017a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_inttoptr : llvalue -> lltype -> llvalue
10180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_bitcast c ty] returns the constant bitwise conversion of constant [c]
10200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    to type [ty] of equal size.
10213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getBitCast]. *)
1022a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_bitcast : llvalue -> lltype -> llvalue
10230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10241b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_zext_or_bitcast c ty] returns a constant zext or bitwise cast
10251b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getZExtOrBitCast]. *)
1027a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_zext_or_bitcast : llvalue -> lltype -> llvalue
1028a156efdf71bc668093e31593713694cf076db895Torok Edwin
10291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_sext_or_bitcast c ty] returns a constant sext or bitwise cast
10311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getSExtOrBitCast]. *)
1033a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_sext_or_bitcast : llvalue -> lltype -> llvalue
1034a156efdf71bc668093e31593713694cf076db895Torok Edwin
10351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_trunc_or_bitcast c ty] returns a constant trunc or bitwise cast
10371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    conversion of constant [c] to type [ty].
10381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getTruncOrBitCast]. *)
1039a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_trunc_or_bitcast : llvalue -> lltype -> llvalue
1040a156efdf71bc668093e31593713694cf076db895Torok Edwin
10411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_pointercast c ty] returns a constant bitcast or a pointer-to-int
10431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    cast conversion of constant [c] to type [ty] of equal size.
10441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getPointerCast]. *)
1045a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_pointercast : llvalue -> lltype -> llvalue
1046a156efdf71bc668093e31593713694cf076db895Torok Edwin
10471b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10481b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_intcast c ty] returns a constant zext, bitcast, or trunc for integer
10491b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    -> integer casts of constant [c] to type [ty].
10501b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getIntCast]. *)
1051a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_intcast : llvalue -> lltype -> llvalue
1052a156efdf71bc668093e31593713694cf076db895Torok Edwin
10531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_fpcast c ty] returns a constant fpext, bitcast, or fptrunc for fp ->
10555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    fp casts of constant [c] to type [ty].
10561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    See the method [llvm::ConstantExpr::getFPCast]. *)
1057a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_fpcast : llvalue -> lltype -> llvalue
1058a156efdf71bc668093e31593713694cf076db895Torok Edwin
10591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_select cond t f] returns the constant conditional which returns value
10610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [t] if the boolean constant [cond] is true and the value [f] otherwise.
10623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getSelect]. *)
1063a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_select : llvalue -> llvalue -> llvalue -> llvalue
1064a156efdf71bc668093e31593713694cf076db895Torok Edwin
10650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_extractelement vec i] returns the constant [i]th element of
10670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant vector [vec]. [i] must be a constant [i32] value unsigned less than
10680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    the size of the vector.
10693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getExtractElement]. *)
1070a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractelement : llvalue -> llvalue -> llvalue
1071a156efdf71bc668093e31593713694cf076db895Torok Edwin
10720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_insertelement vec v i] returns the constant vector with the same
10740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements as constant vector [v] but the [i]th element replaced by the
10750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant [v]. [v] must be a constant value with the type of the vector
10760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    elements. [i] must be a constant [i32] value unsigned less than the size
10770465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    of the vector.
10783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getInsertElement]. *)
1079a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
1080a156efdf71bc668093e31593713694cf076db895Torok Edwin
10810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
10820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [const_shufflevector a b mask] returns a constant [shufflevector].
1083d6850b0f37e2bfdb189452562c00faa24dc32574Bob Wilson    See the LLVM Language Reference for details on the [shufflevector]
10840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction.
10853b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::ConstantExpr::getShuffleVector]. *)
1086a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
1087a156efdf71bc668093e31593713694cf076db895Torok Edwin
10884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_extractvalue agg idxs] returns the constant [idxs]th value of
10901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    constant aggregate [agg]. Each [idxs] must be less than the size of the
10911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    aggregate.  See the method [llvm::ConstantExpr::getExtractValue]. *)
1092a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_extractvalue : llvalue -> int array -> llvalue
1093a156efdf71bc668093e31593713694cf076db895Torok Edwin
10941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
10951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar(** [const_insertvalue agg val idxs] inserts the value [val] in the specified
10961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    indexs [idxs] in the aggegate [agg]. Each [idxs] must be less than the size
10971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar    of the aggregate. See the method [llvm::ConstantExpr::getInsertValue]. *)
1098a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_insertvalue : llvalue -> llvalue -> int array -> llvalue
1099a156efdf71bc668093e31593713694cf076db895Torok Edwin
11001b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar
1101ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar(** [const_inline_asm ty asm con side align] inserts a inline assembly string.
1102ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar    See the method [llvm::InlineAsm::get]. *)
1103a156efdf71bc668093e31593713694cf076db895Torok Edwinval const_inline_asm : lltype -> string -> string -> bool -> bool ->
1104ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                            llvalue
1105a156efdf71bc668093e31593713694cf076db895Torok Edwin
1106ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar
1107c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [block_address f bb] returns the address of the basic block [bb] in the
1108c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    function [f]. See the method [llvm::BasicBlock::get]. *)
1109a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_address : llvalue -> llbasicblock -> llvalue
1110c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
11113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
11123b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables, functions, and aliases (globals)} *)
11130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1114dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [global_parent g] is the enclosing module of the global value [g].
1115dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::GlobalValue::getParent]. *)
1116a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_parent : llvalue -> llmodule
1117dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
11180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_declaration g] returns [true] if the global value [g] is a declaration
11190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    only. Returns [false] otherwise.
11203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::isDeclaration]. *)
1121a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_declaration : llvalue -> bool
11220465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [linkage g] returns the linkage of the global value [g].
11243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getLinkage]. *)
1125a156efdf71bc668093e31593713694cf076db895Torok Edwinval linkage : llvalue -> Linkage.t
11260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_linkage l g] sets the linkage of the global value [g] to [l].
11283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setLinkage]. *)
1129a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_linkage : Linkage.t -> llvalue -> unit
11300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [section g] returns the linker section of the global value [g].
11323b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getSection]. *)
1133a156efdf71bc668093e31593713694cf076db895Torok Edwinval section : llvalue -> string
11340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_section s g] sets the linker section of the global value [g] to [s].
11363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::setSection]. *)
1137a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_section : string -> llvalue -> unit
11380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [visibility g] returns the linker visibility of the global value [g].
11403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getVisibility]. *)
1141a156efdf71bc668093e31593713694cf076db895Torok Edwinval visibility : llvalue -> Visibility.t
11420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_visibility v g] sets the linker visibility of the global value [g] to
11443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [v]. See the method [llvm::GlobalValue::setVisibility]. *)
1145a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_visibility : Visibility.t -> llvalue -> unit
1146a156efdf71bc668093e31593713694cf076db895Torok Edwin
11470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [alignment g] returns the required alignment of the global value [g].
11493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalValue::getAlignment]. *)
1150a156efdf71bc668093e31593713694cf076db895Torok Edwinval alignment : llvalue -> int
11510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_alignment n g] sets the required alignment of the global value [g] to
11533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [n] bytes. See the method [llvm::GlobalValue::setAlignment]. *)
1154a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_alignment : int -> llvalue -> unit
11558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
11563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
11573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on global variables} *)
11580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_global ty name m] returns a new global variable of type [ty] and
11608e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    with name [name] in module [m] in the default address space (0). If such a
11618e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global variable already exists, it is returned. If the type of the existing
11628e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    global differs, then a bitcast to [ty] is returned. *)
1163a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_global : lltype -> string -> llmodule -> llvalue
1164a156efdf71bc668093e31593713694cf076db895Torok Edwin
11650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1166df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [declare_qualified_global ty name addrspace m] returns a new global variable
1167df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    of type [ty] and with name [name] in module [m] in the address space
1168df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If such a global variable already exists, it is returned. If
1169df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    the type of the existing global differs, then a bitcast to [ty] is
1170df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    returned. *)
1171a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_qualified_global : lltype -> string -> int -> llmodule ->
11728e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                    llvalue
1173a156efdf71bc668093e31593713694cf076db895Torok Edwin
11748e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
11750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_global name init m] returns a new global with name [name] and
11768e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    initializer [init] in module [m] in the default address space (0). If the
11778e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    named global already exists, it is renamed.
11783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1179a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_global : string -> llvalue -> llmodule -> llvalue
1180a156efdf71bc668093e31593713694cf076db895Torok Edwin
11810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1182df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar(** [define_qualified_global name init addrspace m] returns a new global with
1183df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    name [name] and initializer [init] in module [m] in the address space
1184df75eb64a7e34083051315cfed02d1559084d4cfErick Tryzelaar    [addrspace]. If the named global already exists, it is renamed.
11858e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar    See the constructor of [llvm::GlobalVariable]. *)
1186a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_qualified_global : string -> llvalue -> int -> llmodule ->
11878e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                   llvalue
1188a156efdf71bc668093e31593713694cf076db895Torok Edwin
11898e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
11900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_global name m] returns [Some g] if a global variable with name
11910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such global exists, returns [None].
11923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the [llvm::GlobalVariable] constructor. *)
1193a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_global : string -> llmodule -> llvalue option
1194a156efdf71bc668093e31593713694cf076db895Torok Edwin
11950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
11960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_global gv] destroys the global variable [gv].
11973b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::eraseFromParent]. *)
1198a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_global : llvalue -> unit
11990465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_begin m] returns the first position in the global variable list of
12014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [global_begin] and [global_succ] can be used to iterate
12024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the global list in order.
12034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_begin]. *)
1204a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_begin : llmodule -> (llmodule, llvalue) llpos
1205a156efdf71bc668093e31593713694cf076db895Torok Edwin
12064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_succ gv] returns the global variable list position succeeding
12084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
12094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator++]. *)
1210a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_succ : llvalue -> (llmodule, llvalue) llpos
1211a156efdf71bc668093e31593713694cf076db895Torok Edwin
12124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_globals f m] applies function [f] to each of the global variables of
12144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in order. Tail recursive. *)
12154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_globals : (llvalue -> unit) -> llmodule -> unit
12164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_globals f init m] is [f (... (f init g1) ...) gN] where
12184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
12194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_globals : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
12204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_end m] returns the last position in the global variable list of the
12224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [global_end] and [global_pred] can be used to iterate over the
12234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    global list in reverse.
12244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_end]. *)
1225a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_end : llmodule -> (llmodule, llvalue) llrev_pos
1226a156efdf71bc668093e31593713694cf076db895Torok Edwin
12274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [global_pred gv] returns the global variable list position preceding
12294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [After gv].
12304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::global_iterator::operator--]. *)
1231a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_pred : llvalue -> (llmodule, llvalue) llrev_pos
1232a156efdf71bc668093e31593713694cf076db895Torok Edwin
12334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_globals f m] applies function [f] to each of the global variables
12354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of module [m] in reverse order. Tail recursive. *)
12364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_globals : (llvalue -> unit) -> llmodule -> unit
12374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_globals f m init] is [f g1 (... (f gN init) ...)] where
12394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [g1,...,gN] are the global variables of module [m]. Tail recursive. *)
12404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_globals : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
12414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_global_constant gv] returns [true] if the global variabile [gv] is a
12430465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    constant. Returns [false] otherwise.
12443b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isConstant]. *)
1245a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_global_constant : llvalue -> bool
12460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_global_constant c gv] sets the global variable [gv] to be a constant if
12480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not if [c] is [false].
12493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setConstant]. *)
1250a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_global_constant : bool -> llvalue -> unit
1251a156efdf71bc668093e31593713694cf076db895Torok Edwin
12520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [global_initializer gv] returns the initializer for the global variable
12543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [gv]. See the method [llvm::GlobalVariable::getInitializer]. *)
1255a156efdf71bc668093e31593713694cf076db895Torok Edwinval global_initializer : llvalue -> llvalue
12560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_initializer c gv] sets the initializer for the global variable
12580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv] to the constant [c].
12593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1260a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_initializer : llvalue -> llvalue -> unit
12610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [remove_initializer gv] unsets the initializer for the global variable
12630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [gv].
12643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setInitializer]. *)
1265a156efdf71bc668093e31593713694cf076db895Torok Edwinval remove_initializer : llvalue -> unit
12660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_thread_local gv] returns [true] if the global variable [gv] is
12680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    thread-local and [false] otherwise.
12693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::isThreadLocal]. *)
1270a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_thread_local : llvalue -> bool
12710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_thread_local c gv] sets the global variable [gv] to be thread local if
12730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [c] is [true] and not otherwise.
12743b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::GlobalVariable::setThreadLocal]. *)
1275a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_thread_local : bool -> llvalue -> unit
12768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
12773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
12786ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** {7 Operations on aliases} *)
12796ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12806ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(** [add_alias m t a n] inserts an alias in the module [m] with the type [t] and
12816ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    the aliasee [a] with the name [n].
12826ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar    See the constructor for [llvm::GlobalAlias]. *)
1283a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
1284a156efdf71bc668093e31593713694cf076db895Torok Edwin
12856ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12866ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
12873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on functions} *)
12880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [declare_function name ty m] returns a new function of type [ty] and
12900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    with name [name] in module [m]. If such a function already exists,
12910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    it is returned. If the type of the existing function differs, then a bitcast
12923b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    to [ty] is returned. *)
1293a156efdf71bc668093e31593713694cf076db895Torok Edwinval declare_function : string -> lltype -> llmodule -> llvalue
1294a156efdf71bc668093e31593713694cf076db895Torok Edwin
12950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
12960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [define_function name ty m] creates a new function with name [name] and
12970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    type [ty] in module [m]. If the named function already exists, it is
12980465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    renamed. An entry basic block is created in the function.
12993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::GlobalVariable]. *)
1300a156efdf71bc668093e31593713694cf076db895Torok Edwinval define_function : string -> lltype -> llmodule -> llvalue
1301a156efdf71bc668093e31593713694cf076db895Torok Edwin
13020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [lookup_function name m] returns [Some f] if a function with name
13040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [name] exists in module [m]. If no such function exists, returns [None].
13053b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Module] constructor. *)
1306a156efdf71bc668093e31593713694cf076db895Torok Edwinval lookup_function : string -> llmodule -> llvalue option
1307a156efdf71bc668093e31593713694cf076db895Torok Edwin
13080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_function f] destroys the function [f].
13103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::eraseFromParent]. *)
1311a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_function : llvalue -> unit
13120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_begin m] returns the first position in the function list of the
13144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m]. [function_begin] and [function_succ] can be used to iterate over
13154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function list in order.
13164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::begin]. *)
1317a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_begin : llmodule -> (llmodule, llvalue) llpos
1318a156efdf71bc668093e31593713694cf076db895Torok Edwin
13194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_succ gv] returns the function list position succeeding
13214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before gv].
13224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator++]. *)
1323a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_succ : llvalue -> (llmodule, llvalue) llpos
1324a156efdf71bc668093e31593713694cf076db895Torok Edwin
13254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_functions f m] applies function [f] to each of the functions of module
13274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [m] in order. Tail recursive. *)
13284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_functions : (llvalue -> unit) -> llmodule -> unit
13294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_function f init m] is [f (... (f init f1) ...) fN] where
13314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
13324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_functions : ('a -> llvalue -> 'a) -> 'a -> llmodule -> 'a
13334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_end m] returns the last position in the function list of
13354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the module [m]. [function_end] and [function_pred] can be used to iterate
13364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the function list in reverse.
13374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::end]. *)
1338a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_end : llmodule -> (llmodule, llvalue) llrev_pos
1339a156efdf71bc668093e31593713694cf076db895Torok Edwin
13404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [function_pred gv] returns the function list position preceding [After gv].
13424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Module::iterator::operator--]. *)
1343a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_pred : llvalue -> (llmodule, llvalue) llrev_pos
1344a156efdf71bc668093e31593713694cf076db895Torok Edwin
13454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_functions f fn] applies function [f] to each of the functions of
13474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    module [m] in reverse order. Tail recursive. *)
13484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_functions : (llvalue -> unit) -> llmodule -> unit
13494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_functions f m init] is [f (... (f init fN) ...) f1] where
13514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [f1,...,fN] are the functions of module [m]. Tail recursive. *)
13524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_functions : (llvalue -> 'a -> 'a) -> llmodule -> 'a -> 'a
13534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [is_intrinsic f] returns true if the function [f] is an intrinsic.
13553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::isIntrinsic]. *)
1356a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_intrinsic : llvalue -> bool
13570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [function_call_conv f] returns the calling convention of the function [f].
13593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getCallingConv]. *)
1360a156efdf71bc668093e31593713694cf076db895Torok Edwinval function_call_conv : llvalue -> int
13610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
13620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [set_function_call_conv cc f] sets the calling convention of the function
13630465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [f] to the calling convention numbered [cc].
13643b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::setCallingConv]. *)
1365a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_function_call_conv : int -> llvalue -> unit
1366a156efdf71bc668093e31593713694cf076db895Torok Edwin
136746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13685eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [gc f] returns [Some name] if the function [f] has a garbage
136980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen    collection algorithm specified and [None] otherwise.
13705eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    See the method [llvm::Function::getGC]. *)
1371a156efdf71bc668093e31593713694cf076db895Torok Edwinval gc : llvalue -> string option
137280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
13735eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen(** [set_gc gc f] sets the collection algorithm for the function [f] to
13745eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    [gc]. See the method [llvm::Function::setGC]. *)
1375a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_gc : string option -> llvalue -> unit
137680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1377e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_function_attr f a] adds attribute [a] to the return type of function
1378e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [f]. *)
13790941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_function_attr : llvalue -> Attribute.t -> unit
1380e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
13810be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [function_attr f] returns the function attribute for the function [f].
13820be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * See the method [llvm::Function::getAttributes] *)
13830be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval function_attr : llvalue -> Attribute.t list
13840be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1385e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_function_attr f a] removes attribute [a] from the return type of
1386e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    function [f]. *)
13870941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_function_attr : llvalue -> Attribute.t -> unit
13883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
1389dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on params} *)
1390dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1391dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [params f] returns the parameters of function [f].
1392dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1393a156efdf71bc668093e31593713694cf076db895Torok Edwinval params : llvalue -> llvalue array
1394dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1395dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param f n] returns the [n]th parameter of function [f].
1396dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Function::getArgumentList]. *)
1397a156efdf71bc668093e31593713694cf076db895Torok Edwinval param : llvalue -> int -> llvalue
1398dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13990be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin(** [param_attr p] returns the attributes of parameter [p].
14000be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * See the methods [llvm::Function::getAttributes] and
14010be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin * [llvm::Attributes::getParamAttributes] *)
14020be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinval param_attr : llvalue -> Attribute.t list
14030be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
1404dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [param_parent p] returns the parent function that owns the parameter.
1405dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Argument::getParent]. *)
1406a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_parent : llvalue -> llvalue
1407dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_begin f] returns the first position in the parameter list of the
14094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [param_begin] and [param_succ] can be used to iterate over
14104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the parameter list in order.
14114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_begin]. *)
1412a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_begin : llvalue -> (llvalue, llvalue) llpos
14134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_succ bb] returns the parameter list position succeeding
14154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
14164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator++]. *)
1417a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_succ : llvalue -> (llvalue, llvalue) llpos
14184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_params f fn] applies function [f] to each of the parameters
14204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
14214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_params : (llvalue -> unit) -> llvalue -> unit
14224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_params f init fn] is [f (... (f init b1) ...) bN] where
14244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
14254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_params : ('a -> llvalue -> 'a) -> 'a -> llvalue -> 'a
14264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_end f] returns the last position in the parameter list of
14284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [param_end] and [param_pred] can be used to iterate
14294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the parameter list in reverse.
14304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_end]. *)
1431a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_end : llvalue -> (llvalue, llvalue) llrev_pos
14324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [param_pred gv] returns the function list position preceding [After gv].
14344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::arg_iterator::operator--]. *)
1435a156efdf71bc668093e31593713694cf076db895Torok Edwinval param_pred : llvalue -> (llvalue, llvalue) llrev_pos
1436a156efdf71bc668093e31593713694cf076db895Torok Edwin
14374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_params f fn] applies function [f] to each of the parameters
14394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
14404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_params : (llvalue -> unit) -> llvalue -> unit
14414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_params f fn init] is [f (... (f init bN) ...) b1] where
14434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the parameters of function [fn]. Tail recursive. *)
14444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_params : (llvalue -> 'a -> 'a) -> llvalue -> 'a -> 'a
14454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
1446e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_param p a] adds attribute [a] to parameter [p]. *)
14470941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_param_attr : llvalue -> Attribute.t -> unit
1448e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1449e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_param_attr p a] removes attribute [a] from parameter [p]. *)
14500941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_param_attr : llvalue -> Attribute.t -> unit
1451e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1452e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [set_param_alignment p a] set the alignment of parameter [p] to [a]. *)
1453a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_param_alignment : llvalue -> int -> unit
1454a156efdf71bc668093e31593713694cf076db895Torok Edwin
1455dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on basic blocks} *)
14570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [basic_blocks fn] returns the basic blocks of the function [f].
14593b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getBasicBlockList]. *)
1460a156efdf71bc668093e31593713694cf076db895Torok Edwinval basic_blocks : llvalue -> llbasicblock array
14610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [entry_block fn] returns the entry basic block of the function [f].
14633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::Function::getEntryBlock]. *)
1464a156efdf71bc668093e31593713694cf076db895Torok Edwinval entry_block : llvalue -> llbasicblock
14650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
14660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [delete_block bb] deletes the basic block [bb].
14673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::BasicBlock::eraseFromParent]. *)
1468a156efdf71bc668093e31593713694cf076db895Torok Edwinval delete_block : llbasicblock -> unit
14690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1470b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [append_block c name f] creates a new basic block named [name] at the end of
1471b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    function [f] in the context [c].
14723b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1473a156efdf71bc668093e31593713694cf076db895Torok Edwinval append_block : llcontext -> string -> llvalue -> llbasicblock
1474a156efdf71bc668093e31593713694cf076db895Torok Edwin
14750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1476b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar(** [insert_block c name bb] creates a new basic block named [name] before the
1477b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar    basic block [bb] in the context [c].
14783b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the constructor of [llvm::BasicBlock]. *)
1479a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_block : llcontext -> string -> llbasicblock -> llbasicblock
1480a156efdf71bc668093e31593713694cf076db895Torok Edwin
14810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1482dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [block_parent bb] returns the parent function that owns the basic block.
1483dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::BasicBlock::getParent]. *)
1484a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_parent : llbasicblock -> llvalue
1485dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_begin f] returns the first position in the basic block list of the
14874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    function [f]. [block_begin] and [block_succ] can be used to iterate over
14884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the basic block list in order.
14894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::begin]. *)
1490a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_begin : llvalue -> (llvalue, llbasicblock) llpos
1491a156efdf71bc668093e31593713694cf076db895Torok Edwin
14924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_succ bb] returns the basic block list position succeeding
14944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [Before bb].
14954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator++]. *)
1496a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
1497a156efdf71bc668093e31593713694cf076db895Torok Edwin
14984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [iter_blocks f fn] applies function [f] to each of the basic blocks
15004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in order. Tail recursive. *)
15014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
15024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_left_blocks f init fn] is [f (... (f init b1) ...) bN] where
15044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
15054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_left_blocks : ('a -> llbasicblock -> 'a) -> 'a -> llvalue -> 'a
15064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_end f] returns the last position in the basic block list of
15084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    the function [f]. [block_end] and [block_pred] can be used to iterate
15094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    over the basic block list in reverse.
15104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::end]. *)
1511a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
1512a156efdf71bc668093e31593713694cf076db895Torok Edwin
15134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [block_pred gv] returns the function list position preceding [After gv].
15154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    See the method [llvm::Function::iterator::operator--]. *)
1516a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
1517a156efdf71bc668093e31593713694cf076db895Torok Edwin
1518ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval block_terminator : llbasicblock -> llvalue option
15194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [rev_iter_blocks f fn] applies function [f] to each of the basic blocks
15214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    of function [fn] in reverse order. Tail recursive. *)
15224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval rev_iter_blocks : (llbasicblock -> unit) -> llvalue -> unit
15234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen(** [fold_right_blocks f fn init] is [f (... (f init bN) ...) b1] where
15254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    [b1,...,bN] are the basic blocks of function [fn]. Tail recursive. *)
15264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenval fold_right_blocks : (llbasicblock -> 'a -> 'a) -> llvalue -> 'a -> 'a
15274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
15283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [value_of_block bb] losslessly casts [bb] to an [llvalue]. *)
1529a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_of_block : llbasicblock -> llvalue
15300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [value_is_block v] returns [true] if the value [v] is a basic block and
15320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [false] otherwise.
15333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    Similar to [llvm::isa<BasicBlock>]. *)
1534a156efdf71bc668093e31593713694cf076db895Torok Edwinval value_is_block : llvalue -> bool
15350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
15363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. *)
1537a156efdf71bc668093e31593713694cf076db895Torok Edwinval block_of_value : llvalue -> llbasicblock
153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1539cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1540dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** {7 Operations on instructions} *)
1541dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1542dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [instr_parent i] is the enclosing basic block of the instruction [i].
1543dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::Instruction::getParent]. *)
1544a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_parent : llvalue -> llbasicblock
1545dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1546033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_begin bb] returns the first position in the instruction list of the
1547033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_begin] and [instr_succ] can be used to iterate over
1548033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in order.
1549033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::begin]. *)
1550a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
1551a156efdf71bc668093e31593713694cf076db895Torok Edwin
1552033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1553033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_succ i] returns the instruction list position succeeding [Before i].
1554033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator++]. *)
1555a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_succ : llvalue -> (llbasicblock, llvalue) llpos
1556a156efdf71bc668093e31593713694cf076db895Torok Edwin
1557033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1558033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [iter_instrs f bb] applies function [f] to each of the instructions of basic
1559033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    block [bb] in order. Tail recursive. *)
1560033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval iter_instrs: (llvalue -> unit) -> llbasicblock -> unit
1561033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1562033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_left_instrs f init bb] is [f (... (f init g1) ...) gN] where
1563033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [g1,...,gN] are the instructions of basic block [bb]. Tail recursive. *)
1564033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_left_instrs: ('a -> llvalue -> 'a) -> 'a -> llbasicblock -> 'a
1565033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1566033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_end bb] returns the last position in the instruction list of the
1567033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    basic block [bb]. [instr_end] and [instr_pred] can be used to iterate over
1568033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    the instruction list in reverse.
1569033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::end]. *)
1570a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
1571a156efdf71bc668093e31593713694cf076db895Torok Edwin
1572033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1573033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [instr_pred i] returns the instruction list position preceding [After i].
1574033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the method [llvm::BasicBlock::iterator::operator--]. *)
1575a156efdf71bc668093e31593713694cf076db895Torok Edwinval instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
1576a156efdf71bc668093e31593713694cf076db895Torok Edwin
1577033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1578033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [fold_right_instrs f bb init] is [f (... (f init fN) ...) f1] where
1579033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [f1,...,fN] are the instructions of basic block [bb]. Tail recursive. *)
1580033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval fold_right_instrs: (llvalue -> 'a -> 'a) -> llbasicblock -> 'a -> 'a
1581033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
15826563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinval instr_opcode : llvalue -> Opcode.t
1583dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
15844917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwinval icmp_predicate : llvalue -> Icmp.t option
15854917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
15863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on call sites} *)
15873b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
15883b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** [instruction_call_conv ci] is the calling convention for the call or invoke
15893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [ci], which may be one of the values from the module
15903b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    {!CallConv}. See the method [llvm::CallInst::getCallingConv] and
15913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    [llvm::InvokeInst::getCallingConv]. *)
1592a156efdf71bc668093e31593713694cf076db895Torok Edwinval instruction_call_conv: llvalue -> int
1593a156efdf71bc668093e31593713694cf076db895Torok Edwin
1594cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1595dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [set_instruction_call_conv cc ci] sets the calling convention for the call
1596dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    or invoke instruction [ci] to the integer [cc], which can be one of the
1597dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    values from the module {!CallConv}.
1598dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::CallInst::setCallingConv]
15993b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    and [llvm::InvokeInst::setCallingConv]. *)
1600a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_instruction_call_conv: int -> llvalue -> unit
1601a156efdf71bc668093e31593713694cf076db895Torok Edwin
1602cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
1603e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [add_instruction_param_attr ci i a] adds attribute [a] to the [i]th
1604e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    parameter of the call or invoke instruction [ci]. [i]=0 denotes the return
1605e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    value. *)
16060941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval add_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1607e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1608e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands(** [remove_instruction_param_attr ci i a] removes attribute [a] from the
1609e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    [i]th parameter of the call or invoke instruction [ci]. [i]=0 denotes the
1610e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands    return value. *)
16110941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerval remove_instruction_param_attr : llvalue -> int -> Attribute.t -> unit
1612e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
161307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** {Operations on call instructions (only)} *)
161407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
161507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [is_tail_call ci] is [true] if the call instruction [ci] is flagged as
161607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    eligible for tail call optimization, [false] otherwise.
161707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::isTailCall]. *)
1618a156efdf71bc668093e31593713694cf076db895Torok Edwinval is_tail_call : llvalue -> bool
161907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
162007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(** [set_tail_call tc ci] flags the call instruction [ci] as eligible for tail
162107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    call optimization if [tc] is [true], clears otherwise.
162207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen    See the method [llvm::CallInst::setTailCall]. *)
1623a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_tail_call : bool -> llvalue -> unit
16243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Operations on phi nodes} *)
16260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
16283b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    with branches from [bb]. See the method [llvm::PHINode::addIncoming]. *)
1629a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
1630a156efdf71bc668093e31593713694cf076db895Torok Edwin
16310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [incoming pn] returns the list of value-block pairs for phi node [pn].
16333b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::PHINode::getIncomingValue]. *)
1634a156efdf71bc668093e31593713694cf076db895Torok Edwinval incoming : llvalue -> (llvalue * llbasicblock) list
16352618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
1636ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [delete_instruction i] deletes the instruction [i].
1637ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::Instruction::eraseFromParent]. *)
1638ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval delete_instruction : llvalue -> unit
16393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
16403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Instruction builders} *)
16410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16425371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(** [builder context] creates an instruction builder with no position in
16435371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    the context [context]. It is invalid to use this builder until its position
16445371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    is set with {!position_before} or {!position_at_end}. See the constructor
16455371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    for [llvm::LLVMBuilder]. *)
1646a156efdf71bc668093e31593713694cf076db895Torok Edwinval builder : llcontext -> llbuilder
1647033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1648033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [builder_at ip] creates an instruction builder positioned at [ip].
1649033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
16505371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at : llcontext -> (llbasicblock, llvalue) llpos -> llbuilder
1651a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen
16520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_before ins] creates an instruction builder positioned before the
16533b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the constructor for [llvm::LLVMBuilder]. *)
16545371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_before : llcontext -> llvalue -> llbuilder
16550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [builder_at_end bb] creates an instruction builder positioned at the end of
16573b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    the basic block [bb]. See the constructor for [llvm::LLVMBuilder]. *)
16585371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarval builder_at_end : llcontext -> llbasicblock -> llbuilder
1659033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1660033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen(** [position_builder ip bb] moves the instruction builder [bb] to the position
1661033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    [ip].
1662033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen    See the constructor for [llvm::LLVMBuilder]. *)
1663a156efdf71bc668093e31593713694cf076db895Torok Edwinval position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1664a156efdf71bc668093e31593713694cf076db895Torok Edwin
16650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_before ins b] moves the instruction builder [b] to before the
16673b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    instruction [isn]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1668033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_before : llvalue -> llbuilder -> unit
16690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
16700465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [position_at_end bb b] moves the instruction builder [b] to the end of the
16713b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    basic block [bb]. See the method [llvm::LLVMBuilder::SetInsertPoint]. *)
1672033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenval position_at_end : llbasicblock -> llbuilder -> unit
167346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1674dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(** [insertion_block b] returns the basic block that the builder [b] is
1675dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    positioned to insert into. Raises [Not_Found] if the instruction builder is
1676dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    uninitialized.
1677dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    See the method [llvm::LLVMBuilder::GetInsertBlock]. *)
1678a156efdf71bc668093e31593713694cf076db895Torok Edwinval insertion_block : llbuilder -> llbasicblock
1679dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
16805c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar(** [insert_into_builder i name b] inserts the specified instruction [i] at the
16815c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    position specified by the instruction builder [b].
16825c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar    See the method [llvm::LLVMBuilder::Insert]. *)
1683a156efdf71bc668093e31593713694cf076db895Torok Edwinval insert_into_builder : llvalue -> string -> llbuilder -> unit
1684a156efdf71bc668093e31593713694cf076db895Torok Edwin
16855c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
168646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** {7 Metadata} *)
168746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
168846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_current_debug_location b md] sets the current debug location [md] in
168946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    the builder [b].
169046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetDebugLocation]. *)
1691a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_current_debug_location : llbuilder -> llvalue -> unit
1692a156efdf71bc668093e31593713694cf076db895Torok Edwin
169346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
169446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [clear_current_debug_location b] clears the current debug location in the
169546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    builder [b]. *)
1696a156efdf71bc668093e31593713694cf076db895Torok Edwinval clear_current_debug_location : llbuilder -> unit
1697a156efdf71bc668093e31593713694cf076db895Torok Edwin
169846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
169946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [current_debug_location b] returns the current debug location, or None
170046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    if none is currently set.
170146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::GetDebugLocation]. *)
1702a156efdf71bc668093e31593713694cf076db895Torok Edwinval current_debug_location : llbuilder -> llvalue option
1703a156efdf71bc668093e31593713694cf076db895Torok Edwin
170446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
170546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(** [set_inst_debug_location b i] sets the current debug location of the builder
170646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    [b] to the instruction [i].
170746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar    See the method [llvm::IRBuilder::SetInstDebugLocation]. *)
1708a156efdf71bc668093e31593713694cf076db895Torok Edwinval set_inst_debug_location : llbuilder -> llvalue -> unit
1709a156efdf71bc668093e31593713694cf076db895Torok Edwin
17103b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
17113b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Terminators} *)
17120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret_void b] creates a
17140465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret void]
17150465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17163b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRetVoid]. *)
1717a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret_void : llbuilder -> llvalue
17180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ret v b] creates a
17200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [ret %v]
17210465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17223b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateRet]. *)
1723a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ret : llvalue -> llbuilder -> llvalue
17240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1725e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_aggregate_ret vs b] creates a
1726e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [ret {...} { %v1, %v2, ... } ]
1727e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1728e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateAggregateRet]. *)
1729a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1730a156efdf71bc668093e31593713694cf076db895Torok Edwin
1731e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
17320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_br bb b] creates a
17331430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %bb]
17340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateBr]. *)
1736a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_br : llbasicblock -> llbuilder -> llvalue
17370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
17380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_cond_br cond tbb fbb b] creates a
17391430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar    [br %cond, %tbb, %fbb]
17400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCondBr]. *)
1742a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
1743a156efdf71bc668093e31593713694cf076db895Torok Edwin                         llvalue
17440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
174521491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [build_switch case elsebb count b] creates an empty
17460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [switch %case, %elsebb]
174721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    instruction at the position specified by the instruction builder [b] with
174821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    space reserved for [count] cases.
17493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSwitch]. *)
1750a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
1751a156efdf71bc668093e31593713694cf076db895Torok Edwin
1752ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_malloc ty name b] creates an [malloc]
1753ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1754ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateMalloc]. *)
1755ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_malloc : lltype -> string -> llbuilder -> llvalue
1756ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1757ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_array_malloc ty val name b] creates an [array malloc]
1758ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1759ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::CallInst::CreateArrayMalloc]. *)
1760ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_array_malloc : lltype -> llvalue -> string -> llbuilder -> llvalue
1761ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1762ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [build_free p b] creates a [free]
1763ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    instruction at the position specified by the instruction builder [b].
1764ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LLVMBuilder::CreateFree]. *)
1765ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_free : llvalue -> llbuilder -> llvalue
17660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
176721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen(** [add_case sw onval bb] causes switch instruction [sw] to branch to [bb]
176821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    when its input matches the constant [onval].
176921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen    See the method [llvm::SwitchInst::addCase]. **)
1770a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_case : llvalue -> llvalue -> llbasicblock -> unit
1771a156efdf71bc668093e31593713694cf076db895Torok Edwin
1772ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [switch_default_dest sw] returns the default destination of the [switch]
1773ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * instruction.
1774ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm:;SwitchInst::getDefaultDest]. **)
1775ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval switch_default_dest : llvalue -> llbasicblock
177621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen
1777c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [build_indirect_br addr count b] creates a
1778c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    [indirectbr %addr]
1779c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    instruction at the position specified by the instruction builder [b] with
1780c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    space reserved for [count] destinations.
1781c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIndirectBr]. *)
1782a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_indirect_br : llvalue -> int -> llbuilder -> llvalue
1783a156efdf71bc668093e31593713694cf076db895Torok Edwin
1784c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
1785c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar(** [add_destination br bb] adds the basic block [bb] as a possible branch
1786c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    location for the indirectbr instruction [br].
1787c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar    See the method [llvm::IndirectBrInst::addDestination]. **)
1788a156efdf71bc668093e31593713694cf076db895Torok Edwinval add_destination : llvalue -> llbasicblock -> unit
1789a156efdf71bc668093e31593713694cf076db895Torok Edwin
1790c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
17910465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_invoke fn args tobb unwindbb name b] creates an
17920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = invoke %fn(args) to %tobb unwind %unwindbb]
17930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
17943b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInvoke]. *)
1795a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_invoke : llvalue -> llvalue array -> llbasicblock ->
179646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
1797a156efdf71bc668093e31593713694cf076db895Torok Edwin
179848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [build_landingpad ty persfn numclauses name b] creates an
179948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    [landingpad]
180048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    instruction at the position specified by the instruction builder [b].
180148488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LLVMBuilder::CreateLandingPad]. *)
180248488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval build_landingpad : lltype -> llvalue -> int -> string -> llbuilder ->
180348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin                         llvalue
180448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin
180548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin(** [set_cleanup lp] sets the cleanup flag in the [landingpad]instruction.
180648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin    See the method [llvm::LandingPadInst::setCleanup]. *)
180748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinval set_cleanup : llvalue -> bool -> unit
18080465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1809ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(** [add_clause lp clause] adds the clause to the [landingpad]instruction.
1810ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    See the method [llvm::LandingPadInst::addClause]. *)
1811ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval add_clause : llvalue -> llvalue -> unit
1812ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
1813ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin(* [build_resume exn b] builds a [resume exn] instruction
1814ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * at the position specified by the instruction builder [b].
1815ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin * See the method [llvm::LLVMBuilder::CreateResume] *)
1816ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinval build_resume : llvalue -> llbuilder -> llvalue
1817ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin
18180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_unreachable b] creates an
18190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [unreachable]
18200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUnwind]. *)
1822a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_unreachable : llbuilder -> llvalue
182346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
18243b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
18253b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Arithmetic} *)
18260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18270465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_add x y name b] creates a
18280465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = add %x, %y]
18290465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAdd]. *)
1831a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1832a156efdf71bc668093e31593713694cf076db895Torok Edwin
18330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
18341430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar(** [build_nsw_add x y name b] creates a
1835e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = nsw add %x, %y]
1836e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1837e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWAdd]. *)
1838a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1839a156efdf71bc668093e31593713694cf076db895Torok Edwin
1840e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
184119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_add x y name b] creates a
184219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw add %x, %y]
184319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
184419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWAdd]. *)
1845a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1846a156efdf71bc668093e31593713694cf076db895Torok Edwin
184719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1848e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fadd x y name b] creates a
1849e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fadd %x, %y]
1850e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1851e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFAdd]. *)
1852a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1853a156efdf71bc668093e31593713694cf076db895Torok Edwin
1854e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sub x y name b] creates a
18560465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub %x, %y]
18570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18583b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSub]. *)
1859a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1860a156efdf71bc668093e31593713694cf076db895Torok Edwin
18610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
186219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_sub x y name b] creates a
186319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub %x, %y]
186419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
186519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWSub]. *)
1866a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1867a156efdf71bc668093e31593713694cf076db895Torok Edwin
186819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
186919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_sub x y name b] creates a
187019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub %x, %y]
187119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
187219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWSub]. *)
1873a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1874a156efdf71bc668093e31593713694cf076db895Torok Edwin
187519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1876e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fsub x y name b] creates a
1877e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fsub %x, %y]
1878e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1879e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFSub]. *)
1880a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1881a156efdf71bc668093e31593713694cf076db895Torok Edwin
1882e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
18830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_mul x y name b] creates a
18840465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = mul %x, %y]
18850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
18863b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateMul]. *)
1887a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1888a156efdf71bc668093e31593713694cf076db895Torok Edwin
18890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
189019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_mul x y name b] creates a
189119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw mul %x, %y]
189219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
189319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNSWMul]. *)
1894a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1895a156efdf71bc668093e31593713694cf076db895Torok Edwin
189619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
189719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_mul x y name b] creates a
189819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw mul %x, %y]
189919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
190019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNUWMul]. *)
1901a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1902a156efdf71bc668093e31593713694cf076db895Torok Edwin
190319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1904e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fmul x y name b] creates a
1905e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = fmul %x, %y]
1906e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1907e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFMul]. *)
1908a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1909a156efdf71bc668093e31593713694cf076db895Torok Edwin
1910e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
19110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_udiv x y name b] creates a
19120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = udiv %x, %y]
19130465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19143b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUDiv]. *)
1915a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1916a156efdf71bc668093e31593713694cf076db895Torok Edwin
19170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sdiv x y name b] creates a
19190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sdiv %x, %y]
19200465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19213b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSDiv]. *)
1922a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1923a156efdf71bc668093e31593713694cf076db895Torok Edwin
19240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
1925e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_exact_sdiv x y name b] creates a
1926e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = exact sdiv %x, %y]
1927e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
1928e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExactSDiv]. *)
1929a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1930a156efdf71bc668093e31593713694cf076db895Torok Edwin
1931e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
19320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fdiv x y name b] creates a
19330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fdiv %x, %y]
19340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFDiv]. *)
1936a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1937a156efdf71bc668093e31593713694cf076db895Torok Edwin
19380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_urem x y name b] creates a
19400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = urem %x, %y]
19410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateURem]. *)
1943a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1944a156efdf71bc668093e31593713694cf076db895Torok Edwin
19450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_SRem x y name b] creates a
19470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = srem %x, %y]
19480465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19493b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSRem]. *)
1950a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1951a156efdf71bc668093e31593713694cf076db895Torok Edwin
19520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_frem x y name b] creates a
19540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = frem %x, %y]
19550465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19563b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFRem]. *)
1957a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
1958a156efdf71bc668093e31593713694cf076db895Torok Edwin
19590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shl x y name b] creates a
19610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shl %x, %y]
19620465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19633b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShl]. *)
1964a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
1965a156efdf71bc668093e31593713694cf076db895Torok Edwin
19660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_lshr x y name b] creates a
19680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = lshr %x, %y]
19690465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19703b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLShr]. *)
1971a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
1972a156efdf71bc668093e31593713694cf076db895Torok Edwin
19730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ashr x y name b] creates a
19750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = ashr %x, %y]
19760465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19773b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAShr]. *)
1978a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
1979a156efdf71bc668093e31593713694cf076db895Torok Edwin
19800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_and x y name b] creates a
19820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = and %x, %y]
19830465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19843b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAnd]. *)
1985a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
1986a156efdf71bc668093e31593713694cf076db895Torok Edwin
19870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_or x y name b] creates a
19890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = or %x, %y]
19900465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19913b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateOr]. *)
1992a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
1993a156efdf71bc668093e31593713694cf076db895Torok Edwin
19940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
19950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x y name b] creates a
19960465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, %y]
19970465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
19983b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
1999a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
2000a156efdf71bc668093e31593713694cf076db895Torok Edwin
20010465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20020465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_neg x name b] creates a
20030465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sub 0, %x]
20040465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20050465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-0.0] is used for floating point types to compute the correct sign.
20063b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2007a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_neg : llvalue -> string -> llbuilder -> llvalue
2008a156efdf71bc668093e31593713694cf076db895Torok Edwin
20090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
201019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nsw_neg x name b] creates a
201119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nsw sub 0, %x]
201219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
201319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
201419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2015a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
2016a156efdf71bc668093e31593713694cf076db895Torok Edwin
201719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
201819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_nuw_neg x name b] creates a
201919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = nuw sub 0, %x]
202019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
202119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
202219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateNeg]. *)
2023a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
2024a156efdf71bc668093e31593713694cf076db895Torok Edwin
202519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
202619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar(** [build_fneg x name b] creates a
202719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [%name = fsub 0, %x]
202819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    instruction at the position specified by the instruction builder [b].
202919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    [-0.0] is used for floating point types to compute the correct sign.
203019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFNeg]. *)
2031a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fneg : llvalue -> string -> llbuilder -> llvalue
2032a156efdf71bc668093e31593713694cf076db895Torok Edwin
203319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
20340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_xor x name b] creates a
20350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = xor %x, -1]
20360465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [-1] is the correct "all ones" value for the type of [x].
20383b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateXor]. *)
2039a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_not : llvalue -> string -> llbuilder -> llvalue
2040a156efdf71bc668093e31593713694cf076db895Torok Edwin
204146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
20423b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
20433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Memory} *)
20440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_alloca ty name b] creates a
20460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty]
20470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2049a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_alloca : lltype -> string -> llbuilder -> llvalue
2050a156efdf71bc668093e31593713694cf076db895Torok Edwin
20510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_array_alloca ty n name b] creates a
20530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = alloca %ty, %n]
20540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateAlloca]. *)
2056a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
2057a156efdf71bc668093e31593713694cf076db895Torok Edwin                              llvalue
20580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_load v name b] creates a
20600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = load %v]
20610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateLoad]. *)
2063a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_load : llvalue -> string -> llbuilder -> llvalue
2064a156efdf71bc668093e31593713694cf076db895Torok Edwin
20650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
20660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_store v p b] creates a
20670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [store %v, %p]
20680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateStore]. *)
2070a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_store : llvalue -> llvalue -> llbuilder -> llvalue
2071a156efdf71bc668093e31593713694cf076db895Torok Edwin
20720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
2073632146044083683a987260599fca3a717b7e38a4Gordon Henriksen(** [build_gep p indices name b] creates a
2074e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, indices...]
20750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
20763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateGetElementPtr]. *)
2077a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2078a156efdf71bc668093e31593713694cf076db895Torok Edwin
207946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2080e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_in_bounds_gep p indices name b] creates a
2081e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = gelementptr inbounds %p, indices...]
2082e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2083e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInBoundsGetElementPtr]. *)
2084a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_in_bounds_gep : llvalue -> llvalue array -> string -> llbuilder ->
2085a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llvalue
2086e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2087e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_struct_gep p idx name b] creates a
2088e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = getelementptr %p, 0, idx]
2089e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2090e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateStructGetElementPtr]. *)
2091a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_struct_gep : llvalue -> int -> string -> llbuilder ->
2092a156efdf71bc668093e31593713694cf076db895Torok Edwin                            llvalue
2093e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2094e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_string str name b] creates a series of instructions that adds
2095e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    a global string at the position specified by the instruction builder [b].
2096e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalString]. *)
2097a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_string : string -> string -> llbuilder -> llvalue
2098a156efdf71bc668093e31593713694cf076db895Torok Edwin
2099e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2100e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_global_stringptr str name b] creates a series of instructions that
2101e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    adds a global string pointer at the position specified by the instruction
21025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    builder [b].
2103e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateGlobalStringPtr]. *)
2104a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_global_stringptr : string -> string -> llbuilder -> llvalue
2105a156efdf71bc668093e31593713694cf076db895Torok Edwin
2106e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
21073b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
21083b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Casts} *)
21090465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21100465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_trunc v ty name b] creates a
21110465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = trunc %p to %ty]
21120465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21133b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateTrunc]. *)
2114a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2115a156efdf71bc668093e31593713694cf076db895Torok Edwin
21160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21170465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_zext v ty name b] creates a
21180465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = zext %p to %ty]
21190465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21203b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateZExt]. *)
2121a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
2122a156efdf71bc668093e31593713694cf076db895Torok Edwin
21230465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21240465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sext v ty name b] creates a
21250465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sext %p to %ty]
21260465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21273b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSExt]. *)
2128a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
2129a156efdf71bc668093e31593713694cf076db895Torok Edwin
21300465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21310465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptoui v ty name b] creates a
21320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptoui %p to %ty]
21330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21343b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToUI]. *)
2135a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
2136a156efdf71bc668093e31593713694cf076db895Torok Edwin
21370465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21380465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptosi v ty name b] creates a
21390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptosi %p to %ty]
21400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPToSI]. *)
2142a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
2143a156efdf71bc668093e31593713694cf076db895Torok Edwin
21440465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21450465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_uitofp v ty name b] creates a
21460465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = uitofp %p to %ty]
21470465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateUIToFP]. *)
2149a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2150a156efdf71bc668093e31593713694cf076db895Torok Edwin
21510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_sitofp v ty name b] creates a
21530465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = sitofp %p to %ty]
21540465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21553b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSIToFP]. *)
2156a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
2157a156efdf71bc668093e31593713694cf076db895Torok Edwin
21580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fptrunc v ty name b] creates a
21600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fptrunc %p to %ty]
21610465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21623b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPTrunc]. *)
2163a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
2164a156efdf71bc668093e31593713694cf076db895Torok Edwin
21650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fpext v ty name b] creates a
21670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fpext %p to %ty]
21680465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21693b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFPExt]. *)
2170a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
2171a156efdf71bc668093e31593713694cf076db895Torok Edwin
21720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_ptrtoint v ty name b] creates a
21740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = prtotint %p to %ty]
21750465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21763b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePtrToInt]. *)
2177a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
2178a156efdf71bc668093e31593713694cf076db895Torok Edwin
21790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_inttoptr v ty name b] creates a
21810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = inttoptr %p to %ty]
21820465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
21833b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateIntToPtr]. *)
2184a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
2185a156efdf71bc668093e31593713694cf076db895Torok Edwin
21860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
21870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_bitcast v ty name b] creates a
21880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = bitcast %p to %ty]
21890465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2190e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateBitCast]. *)
2191a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2192a156efdf71bc668093e31593713694cf076db895Torok Edwin
219346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2194e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_zext_or_bitcast v ty name b] creates a zext or bitcast
2195e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2196e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2197a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2198a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2199e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2200e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_sext_or_bitcast v ty name b] creates a sext or bitcast
2201e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2202e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateSExtOrBitCast]. *)
2203a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2204a156efdf71bc668093e31593713694cf076db895Torok Edwin                                 llvalue
2205e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2206e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_trunc_or_bitcast v ty name b] creates a trunc or bitcast
2207e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2208e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateZExtOrBitCast]. *)
2209a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
2210a156efdf71bc668093e31593713694cf076db895Torok Edwin                                  llvalue
2211e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2212e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_pointercast v ty name b] creates a bitcast or pointer-to-int
2213e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2214e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePointerCast]. *)
2215a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
2216a156efdf71bc668093e31593713694cf076db895Torok Edwin
2217e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2218e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_intcast v ty name b] creates a zext, bitcast, or trunc
2219e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2220e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIntCast]. *)
2221a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2222a156efdf71bc668093e31593713694cf076db895Torok Edwin
2223e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2224e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_fpcast v ty name b] creates a fpext, bitcast, or fptrunc
2225e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2226e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateFPCast]. *)
2227a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
2228a156efdf71bc668093e31593713694cf076db895Torok Edwin
2229e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
22303b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
22313b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Comparisons} *)
22320465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22330465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_icmp pred x y name b] creates a
22340465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = icmp %pred %x, %y]
22350465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateICmp]. *)
2237a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
2238a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
22390465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22400465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_fcmp pred x y name b] creates a
22410465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = fcmp %pred %x, %y]
22420465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22433b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateFCmp]. *)
2244a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
2245a156efdf71bc668093e31593713694cf076db895Torok Edwin                      llbuilder -> llvalue
224646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
22473b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
22483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {7 Miscellaneous instructions} *)
22490465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22500465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_phi incoming name b] creates a
22510465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = phi %incoming]
22520465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
2253a523380c6b5ad1d53dc7b38e9aee6bc9868d18c5Gordon Henriksen    [incoming] is a list of [(llvalue, llbasicblock)] tuples.
22543b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreatePHI]. *)
2255a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
2256a156efdf71bc668093e31593713694cf076db895Torok Edwin                     llvalue
22570465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22580465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_call fn args name b] creates a
22590465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = call %fn(args...)]
22600465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22613b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateCall]. *)
2262a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
2263a156efdf71bc668093e31593713694cf076db895Torok Edwin
22640465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22650465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_select cond thenv elsev name b] creates a
22660465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = select %cond, %thenv, %elsev]
22670465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22683b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateSelect]. *)
2269a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
2270a156efdf71bc668093e31593713694cf076db895Torok Edwin                        llvalue
22710465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22720465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_va_arg valist argty name b] creates a
22730465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = va_arg %valist, %argty]
22740465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22753b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateVAArg]. *)
2276a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
2277a156efdf71bc668093e31593713694cf076db895Torok Edwin
22780465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22790465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_extractelement vec i name b] creates a
22800465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = extractelement %vec, %i]
22810465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22823b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateExtractElement]. *)
2283a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
2284a156efdf71bc668093e31593713694cf076db895Torok Edwin                                llvalue
22850465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22860465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_insertelement vec elt i name b] creates a
22870465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = insertelement %vec, %elt, %i]
22880465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22893b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateInsertElement]. *)
2290a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertelement : llvalue -> llvalue -> llvalue -> string ->
2291a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
22920465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen
22930465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen(** [build_shufflevector veca vecb mask name b] creates a
22940465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    [%name = shufflevector %veca, %vecb, %mask]
22950465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen    instruction at the position specified by the instruction builder [b].
22963b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen    See the method [llvm::LLVMBuilder::CreateShuffleVector]. *)
2297a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
2298a156efdf71bc668093e31593713694cf076db895Torok Edwin                               llbuilder -> llvalue
22991ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2300e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg idx name b] creates a
2301e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = extractvalue %agg, %idx]
2302e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2303e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateExtractValue]. *)
2304a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
2305a156efdf71bc668093e31593713694cf076db895Torok Edwin
2306e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2307e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_insertvalue agg val idx name b] creates a
2308e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = insertvalue %agg, %val, %idx]
2309e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2310e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateInsertValue]. *)
2311a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
2312a156efdf71bc668093e31593713694cf076db895Torok Edwin                             llvalue
2313e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2314e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_null val name b] creates a
2315e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp eq %val, null]
2316e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2317e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNull]. *)
2318a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_null : llvalue -> string -> llbuilder -> llvalue
2319a156efdf71bc668093e31593713694cf076db895Torok Edwin
2320e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2321e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_is_not_null val name b] creates a
2322e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    [%name = icmp ne %val, null]
2323e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    instruction at the position specified by the instruction builder [b].
2324e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreateIsNotNull]. *)
2325a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_is_not_null : llvalue -> string -> llbuilder -> llvalue
2326a156efdf71bc668093e31593713694cf076db895Torok Edwin
2327e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
2328e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar(** [build_ptrdiff lhs rhs name b] creates a series of instructions that measure
2329e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    the difference between two pointer values at the position specified by the
23305371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar    instruction builder [b].
2331e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar    See the method [llvm::LLVMBuilder::CreatePtrDiff]. *)
2332a156efdf71bc668093e31593713694cf076db895Torok Edwinval build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
2333a156efdf71bc668093e31593713694cf076db895Torok Edwin
23341ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
23353b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen
23363b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen(** {6 Memory buffers} *)
2337da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2338da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer : sig
23393b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** [of_file p] is the memory buffer containing the contents of the file at
23403b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      path [p]. If the file could not be read, then [IoError msg] is
23413b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      raised. *)
2342a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_file : string -> llmemorybuffer
2343da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
2344da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  (** [stdin ()] is the memory buffer containing the contents of standard input.
23453b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen      If standard input is empty, then [IoError msg] is raised. *)
2346a156efdf71bc668093e31593713694cf076db895Torok Edwin  val of_stdin : unit -> llmemorybuffer
2347da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  
23483b646de03668fed630f4e3fa9df56a7332a905e4Gordon Henriksen  (** Disposes of a memory buffer. *)
2349a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : llmemorybuffer -> unit
2350da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
2351d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2352d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2353d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(** {6 Pass Managers} *)
2354d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2355d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager : sig
2356d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (**  *)
2357d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
2358d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
2359d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2360d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [PassManager.create ()] constructs a new whole-module pass pipeline. This
2361d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      type of pipeline is suitable for link-time optimization and whole-module
2362d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      transformations.
2363d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::PassManager]. *)
2364a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create : unit -> [ `Module ] t
2365d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
236616609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar  (** [PassManager.create_function m] constructs a new function-by-function
236716609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      pass pipeline over the module [m]. It does not take ownership of [m].
236816609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      This type of pipeline is suitable for code generation and JIT compilation
236916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      tasks.
2370d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the constructor of [llvm::FunctionPassManager]. *)
2371a156efdf71bc668093e31593713694cf076db895Torok Edwin  val create_function : llmodule -> [ `Function ] t
2372a156efdf71bc668093e31593713694cf076db895Torok Edwin
2373d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2374d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_module m pm] initializes, executes on the module [m], and finalizes
2375d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      all of the passes scheduled in the pass manager [pm]. Returns [true] if
2376d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      any of the passes modified the module, [false] otherwise.
2377d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::PassManager::run] method. *)
2378a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_module : llmodule -> [ `Module ] t -> bool
2379a156efdf71bc668093e31593713694cf076db895Torok Edwin
2380d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2381d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [initialize fpm] initializes all of the function passes scheduled in the
2382d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes modified
2383d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      the module, [false] otherwise.
2384d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doInitialization] method. *)
2385a156efdf71bc668093e31593713694cf076db895Torok Edwin  val initialize : [ `Function ] t -> bool
2386d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2387d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [run_function f fpm] executes all of the function passes scheduled in the
2388d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm] over the function [f]. Returns [true] if any
2389d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      of the passes modified [f], [false] otherwise.
2390d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::run] method. *)
2391a156efdf71bc668093e31593713694cf076db895Torok Edwin  val run_function : llvalue -> [ `Function ] t -> bool
2392a156efdf71bc668093e31593713694cf076db895Torok Edwin
2393d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2394d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** [finalize fpm] finalizes all of the function passes scheduled in in the
2395d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      function pass manager [fpm]. Returns [true] if any of the passes
2396d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      modified the module, [false] otherwise.
2397d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the [llvm::FunctionPassManager::doFinalization] method. *)
2398a156efdf71bc668093e31593713694cf076db895Torok Edwin  val finalize : [ `Function ] t -> bool
2399d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  
2400d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  (** Frees the memory of a pass pipeline. For function pipelines, does not free
240116609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar      the module.
2402d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen      See the destructor of [llvm::BasePassManager]. *)
2403a156efdf71bc668093e31593713694cf076db895Torok Edwin  val dispose : [< any ] t -> unit
2404d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
2405