137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(*===-- llvm/llvm.ml - 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
108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaartype llcontext
128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llmodule
138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype lltype
148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentype llvalue
15705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaartype lluse
160465fb5663a0108399df4c19db1afb4516328964Gordon Henriksentype llbasicblock
1746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentype llbuilder
18da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksentype llmemorybuffer
19c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinestype llmdkind
208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
21404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind = struct
22404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
23404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Void
24eaf0608891cff27fe4cf08d180a6baf49e00f8aeBob Wilson  | Half
25404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
26404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
27404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
28404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
29404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
30404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
31404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
32404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
33404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
34404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
35404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
36404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
3732eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
388a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | X86_mmx
39404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
40404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
41404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage = struct
42404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
43404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External
4414b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
45404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
464aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
478a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Link_once_odr_auto_hide
48404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
494aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
50404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
51404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
524aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
53404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
54404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
55404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
56404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
574aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
584aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
598a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Linker_private_weak
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility = struct
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
64404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Default
65404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
66404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
67404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesmodule DLLStorageClass = struct
7037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  type t =
7137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  | Default
7237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  | DLLImport
7337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  | DLLExport
7437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesend
7537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
761475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv = struct
771475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let c = 0
781475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let fast = 8
791475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let cold = 9
801475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let x86_stdcall = 64
811475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let x86_fastcall = 65
821475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
8346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
84e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute = struct
85e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
86e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
87e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
88e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
89e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
90e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
91e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
92e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
93e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
94e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
95e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
96e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
97f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
98f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
99f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
100f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
101f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
1020941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Alignment of int
103f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
104f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
105f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
106f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
107570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
1080941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Stackalignment of int
1090be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | ReturnsTwice
1100be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | UWTable
1110be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | NonLazyBind
112e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
113e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
114404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp = struct
115404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
116404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
117404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
118404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
119404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
120404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
121404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
122404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
123404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
124404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
125404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
126404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
127404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
128404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp = struct
129404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
130404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
131404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
132404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
133404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
134404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
135404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
136404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
137404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
138404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
139404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
140404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
141404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
142404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
143404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
144404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
145404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
146404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
14746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1486563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinmodule Opcode  = struct
1496563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  type t =
1506563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid (* not an instruction *)
1516563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Terminator Instructions *)
1526563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Ret
1536563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Br
1546563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Switch
1556563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IndirectBr
1566563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invoke
1576563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid2
1586563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unreachable
1596563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Standard Binary Operators *)
1606563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Add
1616563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FAdd
1626563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Sub
1636563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FSub
1646563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Mul
1656563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FMul
1666563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UDiv
1676563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SDiv
1686563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FDiv
1696563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | URem
1706563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SRem
1716563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FRem
1726563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Logical Operators *)
1736563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Shl
1746563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LShr
1756563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AShr
1766563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | And
1776563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Or
1786563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Xor
1796563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Memory Operators *)
1806563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Alloca
1816563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Load
1826563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Store
1836563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | GetElementPtr
1846563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Cast Operators *)
1856563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Trunc
1866563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ZExt
1876563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SExt
1886563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToUI
1896563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToSI
1906563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UIToFP
1916563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SIToFP
1926563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPTrunc
1936563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPExt
1946563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PtrToInt
1956563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IntToPtr
1966563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | BitCast
1976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Other Operators *)
1986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ICmp
1996563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FCmp
2006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PHI
2016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Call
2026563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Select
2036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp1
2046563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp2
2056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | VAArg
2066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractElement
2076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertElement
2086563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ShuffleVector
2096563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractValue
2106563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertValue
2116563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Fence
2126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicCmpXchg
2136563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicRMW
2146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Resume
2156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LandingPad
2168a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2178a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2188a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule LandingPadClauseTy = struct
2198a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2208a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Catch
2218a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Filter
2228a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2238a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2248a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule ThreadLocalMode = struct
2258a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2268a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | None
2278a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | GeneralDynamic
2288a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | LocalDynamic
2298a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | InitialExec
2308a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | LocalExec
2318a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2328a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2338a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule AtomicOrdering = struct
2348a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2358a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | NotAtomic
2368a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Unordered
2378a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Monotonic
2388a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Invalid
2398a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Acquire
2408a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Release
2418a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | AcqiureRelease
2428a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | SequentiallyConsistent
2438a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovend
2448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
2458a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovmodule AtomicRMWBinOp = struct
2468a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  type t =
2478a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Xchg
2488a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Add
2498a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Sub
2508a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | And
2518a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Nand
2528a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Or
2538a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Xor
2548a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Max
2558a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | Min
2568a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | UMax
2578a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  | UMin
2586563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinend
2596563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
2603dd16741864302af14b31b7f75375c09d8544a35Torok Edwinmodule ValueKind = struct
2613dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  type t =
2623dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | NullValue
2633dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Argument
2643dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BasicBlock
2653dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | InlineAsm
2663dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDNode
2673dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDString
2683dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BlockAddress
2693dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantAggregateZero
2703dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantArray
27134b4a8426131ec2deea45a1e0174f191c63295e2Peter Zotov  | ConstantDataArray
27234b4a8426131ec2deea45a1e0174f191c63295e2Peter Zotov  | ConstantDataVector
2733dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantExpr
2743dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantFP
2753dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantInt
2763dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantPointerNull
2773dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantStruct
2783dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantVector
2793dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Function
2803dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalAlias
2813dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalVariable
2823dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | UndefValue
2833dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Instruction of Opcode.t
2843dd16741864302af14b31b7f75375c09d8544a35Torok Edwinend
2853dd16741864302af14b31b7f75375c09d8544a35Torok Edwin
286de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarmodule DiagnosticSeverity = struct
287de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  type t =
288de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  | Error
289de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  | Warning
290de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  | Remark
291de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  | Note
292de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarend
293de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
294da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
295da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
29637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet () = Callback.register_exception "Llvm.IoError" (IoError "")
297da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
298a69773cead6dea09ade34342eafacf848ec41367Peter Zotovexternal install_fatal_error_handler : (string -> unit) -> unit
299a69773cead6dea09ade34342eafacf848ec41367Peter Zotov                                     = "llvm_install_fatal_error_handler"
300a69773cead6dea09ade34342eafacf848ec41367Peter Zotovexternal reset_fatal_error_handler : unit -> unit
301a69773cead6dea09ade34342eafacf848ec41367Peter Zotov                                   = "llvm_reset_fatal_error_handler"
302a69773cead6dea09ade34342eafacf848ec41367Peter Zotovexternal enable_pretty_stacktrace : unit -> unit
303a69773cead6dea09ade34342eafacf848ec41367Peter Zotov                                  = "llvm_enable_pretty_stacktrace"
30437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal parse_command_line_options : ?overview:string -> string array -> unit
30537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines                                    = "llvm_parse_command_line_options"
306a69773cead6dea09ade34342eafacf848ec41367Peter Zotov
3074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
3084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
3094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
3104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
3114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
3124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
3134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
3144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
315de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
316de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar(*===-- Context error handling --------------------------------------------===*)
317de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarmodule Diagnostic = struct
318de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  type t
319de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
320de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  external description : t -> string = "llvm_get_diagnostic_description"
321de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  external severity : t -> DiagnosticSeverity.t
322de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                    = "llvm_get_diagnostic_severity"
323de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarend
324de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
325de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarexternal set_diagnostic_handler
326de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  : llcontext -> (Diagnostic.t -> unit) option -> unit
327de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  = "llvm_set_diagnostic_handler"
328de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
3295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(*===-- Contexts ----------------------------------------------------------===*)
3305371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_context : unit -> llcontext = "llvm_create_context"
331dd7da4f368c7e1139ef78f36ef173a8b8f8f1c61Chris Lattnerexternal dispose_context : llcontext -> unit = "llvm_dispose_context"
3325371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal global_context : unit -> llcontext = "llvm_global_context"
333c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesexternal mdkind_id : llcontext -> string -> llmdkind = "llvm_mdkind_id"
3348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Modules -----------------------------------------------------------===*)
3365371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_module : llcontext -> string -> llmodule = "llvm_create_module"
3378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal dispose_module : llmodule -> unit = "llvm_dispose_module"
338a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal target_triple: llmodule -> string
339a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                      = "llvm_target_triple"
340a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_target_triple: string -> llmodule -> unit
341a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                          = "llvm_set_target_triple"
342a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal data_layout: llmodule -> string
343a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                    = "llvm_data_layout"
344a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_data_layout: string -> llmodule -> unit
345a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                        = "llvm_set_data_layout"
346af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenexternal dump_module : llmodule -> unit = "llvm_dump_module"
3478a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal print_module : string -> llmodule -> unit = "llvm_print_module"
3488a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal string_of_llmodule : llmodule -> string = "llvm_string_of_llmodule"
3490941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerexternal set_module_inline_asm : llmodule -> string -> unit
3500941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                               = "llvm_set_module_inline_asm"
351ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal module_context : llmodule -> llcontext = "LLVMGetModuleContext"
3528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Types -------------------------------------------------------------===*)
354404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal classify_type : lltype -> TypeKind.t = "llvm_classify_type"
3555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal type_context : lltype -> llcontext = "llvm_type_context"
356ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwinexternal type_is_sized : lltype -> bool = "llvm_type_is_sized"
3578a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal dump_type : lltype -> unit = "llvm_dump_type"
3588a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal string_of_lltype : lltype -> string = "llvm_string_of_lltype"
3598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on integer types ........................................--*)
361b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i1_type : llcontext -> lltype = "llvm_i1_type"
362b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i8_type : llcontext -> lltype = "llvm_i8_type"
363b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i16_type : llcontext -> lltype = "llvm_i16_type"
364b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i32_type : llcontext -> lltype = "llvm_i32_type"
365b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i64_type : llcontext -> lltype = "llvm_i64_type"
366b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar
367b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal integer_type : llcontext -> int -> lltype = "llvm_integer_type"
3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal integer_bitwidth : lltype -> int = "llvm_integer_bitwidth"
3698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on real types ...........................................--*)
371b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal float_type : llcontext -> lltype = "llvm_float_type"
372b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal double_type : llcontext -> lltype = "llvm_double_type"
373b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal x86fp80_type : llcontext -> lltype = "llvm_x86fp80_type"
374b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal fp128_type : llcontext -> lltype = "llvm_fp128_type"
375b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type"
3768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on function types .......................................--*)
378957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal function_type : lltype -> lltype array -> lltype = "llvm_function_type"
379957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal var_arg_function_type : lltype -> lltype array -> lltype
380957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen                               = "llvm_var_arg_function_type"
3818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_var_arg : lltype -> bool = "llvm_is_var_arg"
382d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal return_type : lltype -> lltype = "LLVMGetReturnType"
3838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal param_types : lltype -> lltype array = "llvm_param_types"
3848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on struct types .........................................--*)
3865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal struct_type : llcontext -> lltype array -> lltype = "llvm_struct_type"
3875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal packed_struct_type : llcontext -> lltype array -> lltype
3885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                            = "llvm_packed_struct_type"
389c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinexternal struct_name : lltype -> string option = "llvm_struct_name"
3906b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal named_struct_type : llcontext -> string -> lltype =
3916b228e506f42972c003599f4873a24910f8a530aTorok Edwin    "llvm_named_struct_type"
3926b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal struct_set_body : lltype -> lltype array -> bool -> unit =
3936b228e506f42972c003599f4873a24910f8a530aTorok Edwin    "llvm_struct_set_body"
3941940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal struct_element_types : lltype -> lltype array
3951940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                              = "llvm_struct_element_types"
3968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_packed : lltype -> bool = "llvm_is_packed"
3976b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal is_opaque : lltype -> bool = "llvm_is_opaque"
3988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on pointer, vector, and array types .....................--*)
400957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal array_type : lltype -> int -> lltype = "llvm_array_type"
40157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal pointer_type : lltype -> lltype = "llvm_pointer_type"
40257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal qualified_pointer_type : lltype -> int -> lltype
40357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen                                = "llvm_qualified_pointer_type"
404957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal vector_type : lltype -> int -> lltype = "llvm_vector_type"
4058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
406d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal element_type : lltype -> lltype = "LLVMGetElementType"
4078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal array_length : lltype -> int = "llvm_array_length"
40857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal address_space : lltype -> int = "llvm_address_space"
4098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal vector_size : lltype -> int = "llvm_vector_size"
4108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on other types ..........................................--*)
412b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal void_type : llcontext -> lltype = "llvm_void_type"
413b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal label_type : llcontext -> lltype = "llvm_label_type"
4148a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal x86_mmx_type : llcontext -> lltype = "llvm_x86_mmx_type"
415ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal type_by_name : llmodule -> string -> lltype option = "llvm_type_by_name"
4168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4173dd16741864302af14b31b7f75375c09d8544a35Torok Edwinexternal classify_value : llvalue -> ValueKind.t = "llvm_classify_value"
4188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Values ------------------------------------------------------------===*)
4198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal type_of : llvalue -> lltype = "llvm_type_of"
4208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal value_name : llvalue -> string = "llvm_value_name"
4218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_value_name : string -> llvalue -> unit = "llvm_set_value_name"
42288cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenexternal dump_value : llvalue -> unit = "llvm_dump_value"
423ba0c7cd012b064e2d8009480f9ae6f7d75e00e13Peter Zotovexternal string_of_llvalue : llvalue -> string = "llvm_string_of_llvalue"
42468bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaarexternal replace_all_uses_with : llvalue -> llvalue -> unit
42588d74c3093de563408ceb834d999613038195e98Peter Zotov                               = "llvm_replace_all_uses_with"
4268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
427705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(*--... Operations on uses .................................................--*)
428705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal use_begin : llvalue -> lluse option = "llvm_use_begin"
429705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal use_succ : lluse -> lluse option = "llvm_use_succ"
430705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal user : lluse -> llvalue = "llvm_user"
431705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal used_value : lluse -> llvalue = "llvm_used_value"
432705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
433705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet iter_uses f v =
434705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux = function
435705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> ()
436705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u ->
437705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar        f u;
438705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar        aux (use_succ u)
439705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
440705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux (use_begin v)
441705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
442705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet fold_left_uses f init v =
443705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux init u =
444705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    match u with
445705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> init
446705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u -> aux (f init u) (use_succ u)
447705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
448705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux init (use_begin v)
449705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
450705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet fold_right_uses f v init =
451705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux u init =
452705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    match u with
453705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> init
454705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u -> f u (aux (use_succ u) init)
455705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
456705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux (use_begin v) init
457705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
458705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
459b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(*--... Operations on users ................................................--*)
460b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaarexternal operand : llvalue -> int -> llvalue = "llvm_operand"
46137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal operand_use : llvalue -> int -> lluse = "llvm_operand_use"
462f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarexternal set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
463f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarexternal num_operands : llvalue -> int = "llvm_num_operands"
464b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
4658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on constants of (mostly) any type .......................--*)
466344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_constant : llvalue -> bool = "llvm_is_constant"
467e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_null : lltype -> llvalue = "LLVMConstNull"
468e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes"
4695b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaarexternal const_pointer_null : lltype -> llvalue = "LLVMConstPointerNull"
470e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal undef : lltype -> llvalue = "LLVMGetUndef"
4718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_null : llvalue -> bool = "llvm_is_null"
472344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_undef : llvalue -> bool = "llvm_is_undef"
4736563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal constexpr_opcode : llvalue -> Opcode.t = "llvm_constexpr_get_opcode"
4748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
47546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Operations on instructions .........................................--*)
47646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal has_metadata : llvalue -> bool = "llvm_has_metadata"
477c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesexternal metadata : llvalue -> llmdkind -> llvalue option = "llvm_metadata"
478c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesexternal set_metadata : llvalue -> llmdkind -> llvalue -> unit = "llvm_set_metadata"
479c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesexternal clear_metadata : llvalue -> llmdkind -> unit = "llvm_clear_metadata"
48046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
48146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Operations on metadata .......,.....................................--*)
48246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdstring : llcontext -> string -> llvalue = "llvm_mdstring"
48346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode"
484ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesexternal mdnull : llcontext -> llvalue = "llvm_mdnull"
4854f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinexternal get_mdstring : llvalue -> string option = "llvm_get_mdstring"
486de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarexternal get_mdnode_operands : llvalue -> llvalue array
487de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                            = "llvm_get_mdnode_operands"
4888a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal get_named_metadata : llmodule -> string -> llvalue array
4898a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                            = "llvm_get_namedmd"
4908a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal add_named_metadata_operand : llmodule -> string -> llvalue -> unit
4918a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                                    = "llvm_append_namedmd"
49246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
4938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on scalar constants .....................................--*)
494e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_int : lltype -> int -> llvalue = "llvm_const_int"
495e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_of_int64 : lltype -> Int64.t -> bool -> llvalue
496e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                        = "llvm_const_of_int64"
4976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal int64_of_const : llvalue -> Int64.t option
4986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin                        = "llvm_int64_of_const"
49945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_int_of_string : lltype -> string -> int -> llvalue
50045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                             = "llvm_const_int_of_string"
501e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_float : lltype -> float -> llvalue = "llvm_const_float"
50237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal float_of_const : llvalue -> float option
50337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines                        = "llvm_float_of_const"
50445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_float_of_string : lltype -> string -> llvalue
50545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                               = "llvm_const_float_of_string"
5068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on composite constants ..................................--*)
508b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_string : llcontext -> string -> llvalue = "llvm_const_string"
509b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_stringz : llcontext -> string -> llvalue = "llvm_const_stringz"
510e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
5115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_struct : llcontext -> llvalue array -> llvalue
5125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                      = "llvm_const_struct"
5136b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal const_named_struct : lltype -> llvalue array -> llvalue
5146b228e506f42972c003599f4873a24910f8a530aTorok Edwin                      = "llvm_const_named_struct"
5155371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_packed_struct : llcontext -> llvalue array -> llvalue
516e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                             = "llvm_const_packed_struct"
517e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_vector : llvalue array -> llvalue = "llvm_const_vector"
51837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal string_of_const : llvalue -> string option = "llvm_string_of_const"
51937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal const_element : llvalue -> int -> llvalue = "llvm_const_element"
5208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen(*--... Constant expressions ...............................................--*)
5222f82376c485f07dd9bfd6f563f6e194843c5060cDuncan Sandsexternal align_of : lltype -> llvalue = "LLVMAlignOf"
523e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal size_of : lltype -> llvalue = "LLVMSizeOf"
5244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_neg : llvalue -> llvalue = "LLVMConstNeg"
52519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_neg : llvalue -> llvalue = "LLVMConstNSWNeg"
52619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_neg : llvalue -> llvalue = "LLVMConstNUWNeg"
5271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fneg : llvalue -> llvalue = "LLVMConstFNeg"
5284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_not : llvalue -> llvalue = "LLVMConstNot"
5294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd"
5301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd"
53119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_add : llvalue -> llvalue -> llvalue = "LLVMConstNUWAdd"
5321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fadd : llvalue -> llvalue -> llvalue = "LLVMConstFAdd"
5334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub"
53419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNSWSub"
53519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNUWSub"
5361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fsub : llvalue -> llvalue -> llvalue = "LLVMConstFSub"
5374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul"
53819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNSWMul"
53919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNUWMul"
5401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fmul : llvalue -> llvalue -> llvalue = "LLVMConstFMul"
5414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv"
5424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv"
5431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_exact_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstExactSDiv"
5444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv"
5454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem"
5464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem"
5474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem"
5484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd"
5494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr"
5504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor"
551404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
5524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_icmp"
553404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
5544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_fcmp"
5554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl"
5564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
5574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
5584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep"
5591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_in_bounds_gep : llvalue -> llvalue array -> llvalue
5601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_in_bounds_gep"
5614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
5624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
5634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"
5644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc"
5654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt"
5664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP"
5674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP"
5684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI"
5694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI"
5704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt"
5714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr"
5724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast"
5731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_zext_or_bitcast : llvalue -> lltype -> llvalue
5741b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                             = "LLVMConstZExtOrBitCast"
5751b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_sext_or_bitcast : llvalue -> lltype -> llvalue
5761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                             = "LLVMConstSExtOrBitCast"
5771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_trunc_or_bitcast : llvalue -> lltype -> llvalue
5781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                              = "LLVMConstTruncOrBitCast"
5791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_pointercast : llvalue -> lltype -> llvalue
5801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "LLVMConstPointerCast"
581c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotovexternal const_intcast : llvalue -> lltype -> is_signed:bool -> llvalue
582c8ac229cc8349685117f68bc6f1da04f98015cd6Peter Zotov                       = "llvm_const_intcast"
5831b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fpcast : llvalue -> lltype -> llvalue = "LLVMConstFPCast"
5844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_select : llvalue -> llvalue -> llvalue -> llvalue
5854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                      = "LLVMConstSelect"
5864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_extractelement : llvalue -> llvalue -> llvalue
5874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                              = "LLVMConstExtractElement"
5884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
5894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstInsertElement"
5904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
5914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstShuffleVector"
5921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_extractvalue : llvalue -> int array -> llvalue
5931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_extractvalue"
5941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_insertvalue : llvalue -> llvalue -> int array -> llvalue
5951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "llvm_const_insertvalue"
596ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaarexternal const_inline_asm : lltype -> string -> string -> bool -> bool ->
597ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                            llvalue
598ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                          = "llvm_const_inline_asm"
599c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress"
6004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on global variables, functions, and aliases (globals) ...--*)
602dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal global_parent : llvalue -> llmodule = "LLVMGetGlobalParent"
6038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_declaration : llvalue -> bool = "llvm_is_declaration"
604404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal linkage : llvalue -> Linkage.t = "llvm_linkage"
605404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
606f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarexternal unnamed_addr : llvalue -> bool = "llvm_unnamed_addr"
607f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarexternal set_unnamed_addr : bool -> llvalue -> unit = "llvm_set_unnamed_addr"
6088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal section : llvalue -> string = "llvm_section"
6098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_section : string -> llvalue -> unit = "llvm_set_section"
610404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal visibility : llvalue -> Visibility.t = "llvm_visibility"
611404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_visibility : Visibility.t -> llvalue -> unit = "llvm_set_visibility"
61237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal dll_storage_class : llvalue -> DLLStorageClass.t = "llvm_dll_storage_class"
61337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal set_dll_storage_class : DLLStorageClass.t -> llvalue -> unit = "llvm_set_dll_storage_class"
6148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal alignment : llvalue -> int = "llvm_alignment"
6158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
616c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksenexternal is_global_constant : llvalue -> bool = "llvm_is_global_constant"
617c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksenexternal set_global_constant : bool -> llvalue -> unit
618c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen                             = "llvm_set_global_constant"
6198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on global variables .....................................--*)
6218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal declare_global : lltype -> string -> llmodule -> llvalue
6228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                        = "llvm_declare_global"
6238e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaarexternal declare_qualified_global : lltype -> string -> int -> llmodule ->
6248e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                    llvalue
6258e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                  = "llvm_declare_qualified_global"
6268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal define_global : string -> llvalue -> llmodule -> llvalue
6278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                       = "llvm_define_global"
6288e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaarexternal define_qualified_global : string -> llvalue -> int -> llmodule ->
6298e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                   llvalue
6308e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                 = "llvm_define_qualified_global"
6316d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_global : string -> llmodule -> llvalue option
6326d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                       = "llvm_lookup_global"
6338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal delete_global : llvalue -> unit = "llvm_delete_global"
63446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal global_initializer : llvalue -> llvalue = "LLVMGetInitializer"
6358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer"
6368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal remove_initializer : llvalue -> unit = "llvm_remove_initializer"
6378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_thread_local : llvalue -> bool = "llvm_is_thread_local"
6388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
6398a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal thread_local_mode : llvalue -> ThreadLocalMode.t
6408a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                           = "llvm_thread_local_mode"
6418a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal set_thread_local_mode : ThreadLocalMode.t -> llvalue -> unit
6428a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                               = "llvm_set_thread_local_mode"
6438a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal is_externally_initialized : llvalue -> bool
6448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                                   = "llvm_is_externally_initialized"
6458a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal set_externally_initialized : bool -> llvalue -> unit
6468a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                                    = "llvm_set_externally_initialized"
6474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_begin : llmodule -> (llmodule, llvalue) llpos
6484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_global_begin"
6494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_succ : llvalue -> (llmodule, llvalue) llpos
6504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_succ"
6514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_end : llmodule -> (llmodule, llvalue) llrev_pos
6524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_global_end"
6534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_pred : llvalue -> (llmodule, llvalue) llrev_pos
6544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_pred"
6554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_global_range f i e =
6574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
6584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid global variable range.")
6604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb ->
6614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
6624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_global_range f (global_succ bb) e
6634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_globals f m =
6654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_global_range f (global_begin m) (At_end m)
6664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_global_range f init i e =
6684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
6694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid global variable range.")
6714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb -> fold_left_global_range f (f init bb) (global_succ bb) e
6724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_globals f init m =
6744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_global_range f init (global_begin m) (At_end m)
6754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_global_range f i e =
6774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
6784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid global variable range.")
6804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb ->
6814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
6824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_global_range f (global_pred bb) e
6834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_globals f m =
6854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_global_range f (global_end m) (At_start m)
6864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_global_range f i e init =
6884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
6894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid global variable range.")
6914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb -> fold_right_global_range f (global_pred bb) e (f bb init)
6924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_globals f m init =
6944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_global_range f (global_end m) (At_start m) init
6958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
6966ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(*--... Operations on aliases ..............................................--*)
6976ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaarexternal add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
6986ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar                   = "llvm_add_alias"
6996ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
70046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Operations on functions ............................................--*)
70146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal declare_function : string -> lltype -> llmodule -> llvalue
70246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_declare_function"
70346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_function : string -> lltype -> llmodule -> llvalue
70446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         = "llvm_define_function"
7056d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_function : string -> llmodule -> llvalue option
7066d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                         = "llvm_lookup_function"
70746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_function : llvalue -> unit = "llvm_delete_function"
70846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal is_intrinsic : llvalue -> bool = "llvm_is_intrinsic"
70946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal function_call_conv : llvalue -> int = "llvm_function_call_conv"
71046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal set_function_call_conv : int -> llvalue -> unit
71146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                = "llvm_set_function_call_conv"
7125eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal gc : llvalue -> string option = "llvm_gc"
7135eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal set_gc : string option -> llvalue -> unit = "llvm_set_gc"
7144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_begin : llmodule -> (llmodule, llvalue) llpos
7154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                        = "llvm_function_begin"
7164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_succ : llvalue -> (llmodule, llvalue) llpos
7174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_succ"
7184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_end : llmodule -> (llmodule, llvalue) llrev_pos
7194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_function_end"
7204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_pred : llvalue -> (llmodule, llvalue) llrev_pos
7214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_pred"
7224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_function_range f i e =
7244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
7254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid function range.")
7274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before fn ->
7284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f fn;
7294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_function_range f (function_succ fn) e
7304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_functions f m =
7324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_function_range f (function_begin m) (At_end m)
7334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_function_range f init i e =
7354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
7364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid function range.")
7384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before fn -> fold_left_function_range f (f init fn) (function_succ fn) e
7394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_functions f init m =
7414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_function_range f init (function_begin m) (At_end m)
7424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_function_range f i e =
7444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
7454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid function range.")
7474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After fn ->
7484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f fn;
7494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_function_range f (function_pred fn) e
7504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_functions f m =
7524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_function_range f (function_end m) (At_start m)
7534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_function_range f i e init =
7554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
7564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid function range.")
7584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After fn -> fold_right_function_range f (function_pred fn) e (f fn init)
7594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_functions f m init =
7614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_function_range f (function_end m) (At_start m) init
76246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
7630be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_function_attr : llvalue -> int32 -> unit
7640941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_add_function_attr"
7650be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_function_attr : llvalue -> int32 -> unit
7660941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                   = "llvm_remove_function_attr"
7670be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_function_attr : llvalue -> int32 = "llvm_function_attr"
7680941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
7690be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet pack_attr (attr:Attribute.t) : int32 =
7700941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  match attr with
7710be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  Attribute.Zext                  -> Int32.shift_left 1l 0
7720be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Sext              -> Int32.shift_left 1l 1
7730be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noreturn          -> Int32.shift_left 1l 2
7740be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Inreg             -> Int32.shift_left 1l 3
7750be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Structret         -> Int32.shift_left 1l 4
7760be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nounwind          -> Int32.shift_left 1l 5
7770be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noalias           -> Int32.shift_left 1l 6
7780be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Byval             -> Int32.shift_left 1l 7
7790be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nest              -> Int32.shift_left 1l 8
7800be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Readnone          -> Int32.shift_left 1l 9
7810be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Readonly          -> Int32.shift_left 1l 10
7820be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noinline          -> Int32.shift_left 1l 11
7830be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Alwaysinline      -> Int32.shift_left 1l 12
7840be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Optsize           -> Int32.shift_left 1l 13
7850be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Ssp               -> Int32.shift_left 1l 14
7860be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Sspreq            -> Int32.shift_left 1l 15
7870be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Alignment n       -> Int32.shift_left (Int32.of_int n) 16
7880be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nocapture         -> Int32.shift_left 1l 21
7890be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noredzone         -> Int32.shift_left 1l 22
7900be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noimplicitfloat   -> Int32.shift_left 1l 23
7910be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Naked             -> Int32.shift_left 1l 24
7920be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Inlinehint        -> Int32.shift_left 1l 25
7930be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Stackalignment n  -> Int32.shift_left (Int32.of_int n) 26
7940be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.ReturnsTwice      -> Int32.shift_left 1l 29
7950be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.UWTable           -> Int32.shift_left 1l 30
7960be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.NonLazyBind       -> Int32.shift_left 1l 31
7970be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
7980be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet unpack_attr (a : int32) : Attribute.t list =
7990be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let l = ref [] in
8000be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let check attr =
8010be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      Int32.logand (pack_attr attr) a in
8020be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let checkattr attr =
8030be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      if (check attr) <> 0l then begin
8040be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin          l := attr :: !l
8050be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      end
8060be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  in
8070be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Zext;
8080be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Sext;
8090be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noreturn;
8100be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Inreg;
8110be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Structret;
8120be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nounwind;
8130be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noalias;
8140be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Byval;
8150be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nest;
8160be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Readnone;
8170be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Readonly;
8180be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noinline;
8190be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Alwaysinline;
8200be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Optsize;
8210be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Ssp;
8220be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Sspreq;
8230be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let align = Int32.logand (Int32.shift_right_logical a 16) 31l in
8240be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  if align <> 0l then
8250be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      l := Attribute.Alignment (Int32.to_int align) :: !l;
8260be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nocapture;
8270be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noredzone;
8280be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noimplicitfloat;
8290be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Naked;
8300be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Inlinehint;
8310be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let stackalign = Int32.logand (Int32.shift_right_logical a 26) 7l in
8320be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  if stackalign <> 0l then
8330be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      l := Attribute.Stackalignment (Int32.to_int stackalign) :: !l;
8340be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.ReturnsTwice;
8350be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.UWTable;
8360be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.NonLazyBind;
8370be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  !l;;
8380941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
8390941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_function_attr llval attr =
8400941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_function_attr llval (pack_attr attr)
8410941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
8428a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal add_target_dependent_function_attr
8438a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    : llvalue -> string -> string -> unit
8448a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov    = "llvm_add_target_dependent_function_attr"
8458a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
8460941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_function_attr llval attr =
8470941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_function_attr llval (pack_attr attr)
84846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
8490be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet function_attr f = unpack_attr (llvm_function_attr f)
8500be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
851dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(*--... Operations on params ...............................................--*)
852dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal params : llvalue -> llvalue array = "llvm_params"
853dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param : llvalue -> int -> llvalue = "llvm_param"
8540be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_param_attr : llvalue -> int32 = "llvm_param_attr"
8550be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet param_attr p = unpack_attr (llvm_param_attr p)
856dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param_parent : llvalue -> llvalue = "LLVMGetParamParent"
8574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin"
8584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ"
8594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end"
8604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_pred : llvalue -> (llvalue, llvalue) llrev_pos ="llvm_param_pred"
8614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_param_range f i e =
8634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
8644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid parameter range.")
8664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before p ->
8674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f p;
8684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_param_range f (param_succ p) e
8694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_params f fn =
8714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_param_range f (param_begin fn) (At_end fn)
8724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_param_range f init i e =
8744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
8754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid parameter range.")
8774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before p -> fold_left_param_range f (f init p) (param_succ p) e
8784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_params f init fn =
8804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_param_range f init (param_begin fn) (At_end fn)
8814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_param_range f i e =
8834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
8844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid parameter range.")
8864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After p ->
8874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f p;
8884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_param_range f (param_pred p) e
8894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_params f fn =
8914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_param_range f (param_end fn) (At_start fn)
8924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_param_range f init i e =
8944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
8954733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8964733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid parameter range.")
8974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After p -> fold_right_param_range f (f p init) (param_pred p) e
8984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8994733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_params f fn init =
9004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_param_range f init (param_end fn) (At_start fn)
901dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
9020be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_param_attr : llvalue -> int32 -> unit
9030941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_add_param_attr"
9040be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_param_attr : llvalue -> int32 -> unit
9050941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_remove_param_attr"
9060941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
9070941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_param_attr llval attr =
9080941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_param_attr llval (pack_attr attr)
9090941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
9100941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_param_attr llval attr =
9110941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_param_attr llval (pack_attr attr)
9120941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
913e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal set_param_alignment : llvalue -> int -> unit
914e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                             = "llvm_set_param_alignment"
915e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
91646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Operations on basic blocks .........................................--*)
917dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
918dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal value_is_block : llvalue -> bool = "llvm_value_is_block"
919dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
920dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent"
92146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks"
92246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock"
92346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_block : llbasicblock -> unit = "llvm_delete_block"
9248a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal remove_block : llbasicblock -> unit = "llvm_remove_block"
9258a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal move_block_before : llbasicblock -> llbasicblock -> unit
9268a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                           = "llvm_move_block_before"
9278a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal move_block_after : llbasicblock -> llbasicblock -> unit
9288a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                          = "llvm_move_block_after"
929b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal append_block : llcontext -> string -> llvalue -> llbasicblock
930b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar                      = "llvm_append_block"
931b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal insert_block : llcontext -> string -> llbasicblock -> llbasicblock
93246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_insert_block"
9334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_begin : llvalue -> (llvalue, llbasicblock) llpos
9344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_block_begin"
9354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
9364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_succ"
9374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
9384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                   = "llvm_block_end"
9394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
9404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_pred"
941ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal block_terminator : llbasicblock -> llvalue option =
942ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "llvm_block_terminator"
9434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_block_range f i e =
9454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
9464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
9474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid block range.")
9484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb ->
9494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
9504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_block_range f (block_succ bb) e
9514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_blocks f fn =
9534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_block_range f (block_begin fn) (At_end fn)
9544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_block_range f init i e =
9564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
9574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
9584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid block range.")
9594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb -> fold_left_block_range f (f init bb) (block_succ bb) e
9604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_blocks f init fn =
9624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_block_range f init (block_begin fn) (At_end fn)
9634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_block_range f i e =
9654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
9664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
9674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid block range.")
9684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb ->
9694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
9704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_block_range f (block_pred bb) e
9714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_blocks f fn =
9734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_block_range f (block_end fn) (At_start fn)
9744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_block_range f init i e =
9764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
9774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
9784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid block range.")
9794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb -> fold_right_block_range f (f bb init) (block_pred bb) e
9804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
9814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_blocks f fn init =
9824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_block_range f init (block_end fn) (At_start fn)
983dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
984dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(*--... Operations on instructions .........................................--*)
985dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent"
986033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
987033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_begin"
988033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_succ : llvalue -> (llbasicblock, llvalue) llpos
989033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_succ"
990033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
991033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_end"
992033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
993033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_pred"
994033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
9956563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal instr_opcode : llvalue -> Opcode.t = "llvm_instr_get_opcode"
9964917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwinexternal icmp_predicate : llvalue -> Icmp.t option = "llvm_instr_icmp_predicate"
99737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal fcmp_predicate : llvalue -> Fcmp.t option = "llvm_instr_fcmp_predicate"
99837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal instr_clone : llvalue -> llvalue = "llvm_instr_clone"
9994917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
1000033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec iter_instrs_range f i e =
1001033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then () else
1002033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
1003033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid instruction range.")
1004033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | Before i ->
1005033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      f i;
1006033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      iter_instrs_range f (instr_succ i) e
1007033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1008033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet iter_instrs f bb =
1009033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  iter_instrs_range f (instr_begin bb) (At_end bb)
1010033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1011033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec fold_left_instrs_range f init i e =
1012033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then init else
1013033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
1014033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid instruction range.")
1015033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | Before i -> fold_left_instrs_range f (f init i) (instr_succ i) e
1016033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1017033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet fold_left_instrs f init bb =
1018033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  fold_left_instrs_range f init (instr_begin bb) (At_end bb)
1019033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1020033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec rev_iter_instrs_range f i e =
1021033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then () else
1022033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
1023033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid instruction range.")
1024033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | After i ->
1025033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      f i;
1026033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      rev_iter_instrs_range f (instr_pred i) e
1027033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1028033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rev_iter_instrs f bb =
1029033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  rev_iter_instrs_range f (instr_end bb) (At_start bb)
1030033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1031033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec fold_right_instr_range f i e init =
1032033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then init else
1033033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
1034033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid instruction range.")
1035033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | After i -> fold_right_instr_range f (instr_pred i) e (f i init)
1036033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1037033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet fold_right_instrs f bb init =
1038033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  fold_right_instr_range f (instr_end bb) (At_start bb) init
1039033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
104046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1041cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen(*--... Operations on call sites ...........................................--*)
1042cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal instruction_call_conv: llvalue -> int
1043cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                              = "llvm_instruction_call_conv"
1044cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal set_instruction_call_conv: int -> llvalue -> unit
1045cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                                  = "llvm_set_instruction_call_conv"
10460941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
10470be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_instruction_param_attr : llvalue -> int -> int32 -> unit
10480941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                         = "llvm_add_instruction_param_attr"
10490be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_instruction_param_attr : llvalue -> int -> int32 -> unit
10500941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                         = "llvm_remove_instruction_param_attr"
10510941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
10520941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_instruction_param_attr llval i attr =
10530941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_instruction_param_attr llval i (pack_attr attr)
10540941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
10550941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_instruction_param_attr llval i attr =
10560941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_instruction_param_attr llval i (pack_attr attr)
1057cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
105807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(*--... Operations on call instructions (only) .............................--*)
105907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal is_tail_call : llvalue -> bool = "llvm_is_tail_call"
106007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call"
106107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
10628a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov(*--... Operations on load/store instructions (only) .......................--*)
10638a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal is_volatile : llvalue -> bool = "llvm_is_volatile"
10648a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal set_volatile : bool -> llvalue -> unit = "llvm_set_volatile"
10658a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov
106637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(*--... Operations on terminators ..........................................--*)
106737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
106837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet is_terminator llv =
106937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  let open ValueKind in
107037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  let open Opcode in
107137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  match classify_value llv with
107237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    | Instruction (Br | IndirectBr | Invoke | Resume | Ret | Switch | Unreachable)
107337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      -> true
107437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    | _ -> false
107537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
107637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal successor : llvalue -> int -> llbasicblock = "llvm_successor"
107737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal set_successor : llvalue -> int -> llbasicblock -> unit
107837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines                       = "llvm_set_successor"
107937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal num_successors : llvalue -> int = "llvm_num_successors"
108037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
108137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet successors llv =
108237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  if not (is_terminator llv) then
108337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    raise (Invalid_argument "Llvm.successors can only be used on terminators")
108437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  else
108537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    Array.init (num_successors llv) (successor llv)
108637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
108737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet iter_successors f llv =
108837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  if not (is_terminator llv) then
108937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    raise (Invalid_argument "Llvm.iter_successors can only be used on terminators")
109037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  else
109137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    for i = 0 to num_successors llv - 1 do
109237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      f (successor llv i)
109337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    done
109437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
109537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet fold_successors f llv z =
109637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  if not (is_terminator llv) then
109737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    raise (Invalid_argument "Llvm.fold_successors can only be used on terminators")
109837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  else
109937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    let n = num_successors llv in
110037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    let rec aux i acc =
110137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      if i >= n then acc
110237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      else begin
110337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines        let llb = successor llv i in
110437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines        aux (i+1) (f llb acc)
110537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      end
110637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    in aux 0 z
110737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
110837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
110937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(*--... Operations on branches .............................................--*)
111037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal condition : llvalue -> llvalue = "llvm_condition"
111137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal set_condition : llvalue -> llvalue -> unit
111237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines                       = "llvm_set_condition"
111337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesexternal is_conditional : llvalue -> bool = "llvm_is_conditional"
111437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
111537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hineslet get_branch llv =
111637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  if classify_value llv <> ValueKind.Instruction Opcode.Br then
111737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    None
111837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  else if is_conditional llv then
111937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    Some (`Conditional (condition llv, successor llv 0, successor llv 1))
112037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  else
112137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    Some (`Unconditional (successor llv 0))
112237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
11232618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen(*--... Operations on phi nodes ............................................--*)
11242618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
11252618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                      = "llvm_add_incoming"
11262618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
11272618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
1128ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal delete_instruction : llvalue -> unit = "llvm_delete_instruction"
112946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
113046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*===-- Instruction builders ----------------------------------------------===*)
11315371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal builder : llcontext -> llbuilder = "llvm_builder"
1132033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
1133033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                          = "llvm_position_builder"
1134dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal insertion_block : llbuilder -> llbasicblock = "llvm_insertion_block"
11355c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarexternal insert_into_builder : llvalue -> string -> llbuilder -> unit
11365c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                             = "llvm_insert_into_builder"
113746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
11385371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_at context ip =
11395371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar  let b = builder context in
1140033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  position_builder ip b;
1141033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  b
1142033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
11435371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_before context i = builder_at context (Before i)
11445371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_at_end context bb = builder_at context (At_end bb)
1145033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1146033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet position_before i = position_builder (Before i)
1147033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet position_at_end bb = position_builder (At_end bb)
1148033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
1149033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
115046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Metadata ...........................................................--*)
115146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_current_debug_location : llbuilder -> llvalue -> unit
115246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                    = "llvm_set_current_debug_location"
115346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal clear_current_debug_location : llbuilder -> unit
115446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                      = "llvm_clear_current_debug_location"
115546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal current_debug_location : llbuilder -> llvalue option
115646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                    = "llvm_current_debug_location"
115746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_inst_debug_location : llbuilder -> llvalue -> unit
115846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                 = "llvm_set_inst_debug_location"
115946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
116046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
116146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Terminators ........................................................--*)
116246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret_void : llbuilder -> llvalue = "llvm_build_ret_void"
116346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret : llvalue -> llbuilder -> llvalue = "llvm_build_ret"
1164e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_aggregate_ret : llvalue array -> llbuilder -> llvalue
1165e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_aggregate_ret"
116646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_br : llbasicblock -> llbuilder -> llvalue = "llvm_build_br"
116746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
116846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         llvalue = "llvm_build_cond_br"
116946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
117046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_switch"
1171ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_malloc : lltype -> string -> llbuilder -> llvalue =
1172ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "llvm_build_malloc"
1173ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_array_malloc : lltype -> llvalue -> string -> llbuilder ->
1174ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    llvalue = "llvm_build_array_malloc"
1175ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_free : llvalue -> llbuilder -> llvalue = "llvm_build_free"
117621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksenexternal add_case : llvalue -> llvalue -> llbasicblock -> unit
117721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen                  = "llvm_add_case"
1178ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal switch_default_dest : llvalue -> llbasicblock =
1179ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "LLVMGetSwitchDefaultDest"
1180c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal build_indirect_br : llvalue -> int -> llbuilder -> llvalue
1181c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                           = "llvm_build_indirect_br"
1182c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal add_destination : llvalue -> llbasicblock -> unit
1183c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                         = "llvm_add_destination"
118446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_invoke : llvalue -> llvalue array -> llbasicblock ->
118546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
118646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
118748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinexternal build_landingpad : lltype -> llvalue -> int -> string -> llbuilder ->
118848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin                            llvalue = "llvm_build_landingpad"
118948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinexternal set_cleanup : llvalue -> bool -> unit = "llvm_set_cleanup"
1190ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal add_clause : llvalue -> llvalue -> unit = "llvm_add_clause"
1191ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_resume : llvalue -> llbuilder -> llvalue = "llvm_build_resume"
119246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unreachable : llbuilder -> llvalue = "llvm_build_unreachable"
119346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
119446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Arithmetic .........................................................--*)
119546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
119646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_add"
1197e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1198e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_nsw_add"
119919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
120019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_add"
1201e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1202e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fadd"
120346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
120446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_sub"
120519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
120619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_sub"
120719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
120819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_sub"
1209e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1210e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fsub"
121146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
121246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_mul"
121319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
121419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_mul"
121519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
121619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_mul"
1217e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1218e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fmul"
121946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
122046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_udiv"
122146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
122246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sdiv"
1223e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1224e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                          = "llvm_build_exact_sdiv"
122546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
122646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_fdiv"
122746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
122846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_urem"
122946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
123046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_srem"
123146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
123246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_frem"
123346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
123446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_shl"
123546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
123646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_lshr"
123746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
123846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_ashr"
123946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
124046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_and"
124146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
124246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                  = "llvm_build_or"
124346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
124446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_xor"
124546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_neg : llvalue -> string -> llbuilder -> llvalue
124646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_neg"
124719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
124819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_neg"
124919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
125019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_neg"
125119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_fneg : llvalue -> string -> llbuilder -> llvalue
125219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                    = "llvm_build_fneg"
125346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_not : llvalue -> string -> llbuilder -> llvalue
125446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_not"
125546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
125646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Memory .............................................................--*)
125746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_alloca : lltype -> string -> llbuilder -> llvalue
125846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_alloca"
125946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
126046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_alloca"
126146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_load : llvalue -> string -> llbuilder -> llvalue
126246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_load"
126346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_store : llvalue -> llvalue -> llbuilder -> llvalue
126446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_store"
12658a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotovexternal build_atomicrmw : AtomicRMWBinOp.t -> llvalue -> llvalue ->
12668a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                           AtomicOrdering.t -> bool -> string -> llbuilder ->
12678a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                           llvalue
12688a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                         = "llvm_build_atomicrmw_bytecode"
12698a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                           "llvm_build_atomicrmw_native"
127046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
127146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_gep"
1272e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_in_bounds_gep : llvalue -> llvalue array -> string ->
1273e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llbuilder -> llvalue = "llvm_build_in_bounds_gep"
1274e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_struct_gep : llvalue -> int -> string -> llbuilder -> llvalue
1275e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                         = "llvm_build_struct_gep"
1276e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1277e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_string : string -> string -> llbuilder -> llvalue
1278e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_global_string"
1279e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_stringptr  : string -> string -> llbuilder -> llvalue
1280e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 = "llvm_build_global_stringptr"
128146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
128246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Casts ..............................................................--*)
128346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
128446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_trunc"
128546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
128646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_zext"
128746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
128846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sext"
128946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
129046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptoui"
129146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
129246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptosi"
129346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
129446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_uitofp"
129546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
129646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_sitofp"
129746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
129846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_fptrunc"
129946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
130046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_fpext"
130146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
130246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_prttoint"
130346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
130446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_inttoptr"
130546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
130646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_bitcast"
1307e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1308e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_zext_or_bitcast"
1309e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1310e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_sext_or_bitcast"
1311e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1312e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                  llvalue = "llvm_build_trunc_or_bitcast"
1313e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
1314e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_pointercast"
1315e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1316e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_intcast"
1317e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1318e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_fpcast"
131946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
132046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Comparisons ........................................................--*)
1321404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
132246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_icmp"
1323404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
132446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_fcmp"
132546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
132646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Miscellaneous instructions .........................................--*)
13272618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
13282618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     llvalue = "llvm_build_phi"
1329ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesexternal build_empty_phi : lltype -> string -> llbuilder -> llvalue
1330ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                         = "llvm_build_empty_phi"
133146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
133246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_call"
133346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
133446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llvalue = "llvm_build_select"
133546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
133646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_va_arg"
133746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
133846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                llvalue = "llvm_build_extractelement"
133946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_insertelement : llvalue -> llvalue -> llvalue -> string ->
134046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_insertelement"
134146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_shufflevector"
1343e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
1344e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            = "llvm_build_extractvalue"
1345e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
1346e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llvalue = "llvm_build_insertvalue"
1347e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1348e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_null : llvalue -> string -> llbuilder -> llvalue
1349e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_is_null"
1350e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_not_null : llvalue -> string -> llbuilder -> llvalue
1351e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_is_not_null"
1352e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
1353e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_ptrdiff"
13548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1355da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1356da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(*===-- Memory buffers ----------------------------------------------------===*)
1357da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1358da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer = struct
1359da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
1360da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
13618a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov  external of_string : ?name:string -> string -> llmemorybuffer
13628a3bdd6a3fa8312809a432579a5685d431ca8410Peter Zotov                     = "llvm_memorybuffer_of_string"
1363f00a9e0f79541538df7e3af2e83de37f40d904ccPeter Zotov  external as_string : llmemorybuffer -> string = "llvm_memorybuffer_as_string"
1364da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
1365da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
13661ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
13671ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1368d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(*===-- Pass Manager ------------------------------------------------------===*)
1369d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1370d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager = struct
1371d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
1372d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
1373d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create : unit -> [ `Module ] t = "llvm_passmanager_create"
137416609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar  external create_function : llmodule -> [ `Function ] t
1375d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                           = "LLVMCreateFunctionPassManager"
1376d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_module : llmodule -> [ `Module ] t -> bool
1377d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                      = "llvm_passmanager_run_module"
1378d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize"
1379d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_function : llvalue -> [ `Function ] t -> bool
1380d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                        = "llvm_passmanager_run_function"
1381d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize"
1382d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external dispose : [< any ] t -> unit = "llvm_passmanager_dispose"
1383d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
1384