1bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen(*===-- 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
198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
20404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule TypeKind = struct
21404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
22404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Void
23eaf0608891cff27fe4cf08d180a6baf49e00f8aeBob Wilson  | Half
24404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Float
25404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Double
26404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | X86fp80
27404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Fp128
28404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ppc_fp128
29404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Label
30404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Integer
31404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Function
32404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Struct
33404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Array
34404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Pointer
35404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Vector
3632eaeca34fe1e6080a2916e04c89874f0b273e31Bob Wilson  | Metadata
37404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
38404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
39404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Linkage = struct
40404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
41404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External
4214b9ed13e79d4b8fe97e2215e7ccf095a40463fdNick Lewycky  | Available_externally
43404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Link_once
444aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Link_once_odr
45404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Weak
464aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Weak_odr
47404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Appending
48404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Internal
494aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Private
50404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllimport
51404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Dllexport
52404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | External_weak
53404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ghost
544aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Common
554aee0410003d873db0d5f76c34ccba7d2d828799Erick Tryzelaar  | Linker_private
56404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
57404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
58404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Visibility = struct
59404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
60404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Default
61404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Hidden
62404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Protected
63404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
651475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenmodule CallConv = struct
661475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let c = 0
671475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let fast = 8
681475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let cold = 9
691475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let x86_stdcall = 64
701475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksen  let x86_fastcall = 65
711475142b93a618da72ec471e5ad7c1510c2feb37Gordon Henriksenend
7246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
73e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsmodule Attribute = struct
74e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  type t =
75e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Zext
76e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Sext
77e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noreturn
78e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Inreg
79e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Structret
80e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nounwind
81e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Noalias
82e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Byval
83e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Nest
84e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readnone
85e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  | Readonly
86f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noinline
87f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Alwaysinline
88f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Optsize
89f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Ssp
90f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Sspreq
910941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Alignment of int
92f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Nocapture
93f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noredzone
94f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Noimplicitfloat
95f24bfa7f794300e6889191e18d79f27db2829421Erick Tryzelaar  | Naked
96570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen  | Inlinehint
970941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  | Stackalignment of int
980be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | ReturnsTwice
990be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | UWTable
1000be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  | NonLazyBind
101e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsend
102e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
103404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Icmp = struct
104404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
105404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Eq
106404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ne
107404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
108404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
109404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
110404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
111404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sgt
112404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sge
113404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Slt
114404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Sle
115404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
116404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen
117404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenmodule Fcmp = struct
118404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  type t =
119404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | False
120404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oeq
121404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ogt
122404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Oge
123404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Olt
124404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ole
125404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | One
126404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ord
127404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uno
128404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ueq
129404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ugt
130404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Uge
131404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ult
132404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Ule
133404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | Une
134404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | True
135404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenend
13646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1376563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinmodule Opcode  = struct
1386563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  type t =
1396563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid (* not an instruction *)
1406563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Terminator Instructions *)
1416563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Ret
1426563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Br
1436563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Switch
1446563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IndirectBr
1456563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invoke
1466563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Invalid2
1476563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unreachable
1486563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Standard Binary Operators *)
1496563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Add
1506563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FAdd
1516563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Sub
1526563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FSub
1536563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Mul
1546563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FMul
1556563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UDiv
1566563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SDiv
1576563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FDiv
1586563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | URem
1596563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SRem
1606563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FRem
1616563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Logical Operators *)
1626563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Shl
1636563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LShr
1646563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AShr
1656563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | And
1666563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Or
1676563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Xor
1686563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Memory Operators *)
1696563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Alloca
1706563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Load
1716563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Store
1726563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | GetElementPtr
1736563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Cast Operators *)
1746563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Trunc
1756563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ZExt
1766563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SExt
1776563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToUI
1786563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPToSI
1796563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UIToFP
1806563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | SIToFP
1816563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPTrunc
1826563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FPExt
1836563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PtrToInt
1846563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | IntToPtr
1856563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | BitCast
1866563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  (* Other Operators *)
1876563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ICmp
1886563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | FCmp
1896563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | PHI
1906563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Call
1916563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Select
1926563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp1
1936563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | UserOp2
1946563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | VAArg
1956563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractElement
1966563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertElement
1976563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ShuffleVector
1986563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | ExtractValue
1996563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | InsertValue
2006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Fence
2016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicCmpXchg
2026563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | AtomicRMW
2036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Resume
2046563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | LandingPad
2056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  | Unwind
2066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinend
2076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
2083dd16741864302af14b31b7f75375c09d8544a35Torok Edwinmodule ValueKind = struct
2093dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  type t =
2103dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | NullValue
2113dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Argument
2123dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BasicBlock
2133dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | InlineAsm
2143dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDNode
2153dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | MDString
2163dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | BlockAddress
2173dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantAggregateZero
2183dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantArray
2193dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantExpr
2203dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantFP
2213dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantInt
2223dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantPointerNull
2233dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantStruct
2243dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | ConstantVector
2253dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Function
2263dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalAlias
2273dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | GlobalVariable
2283dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | UndefValue
2293dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  | Instruction of Opcode.t
2303dd16741864302af14b31b7f75375c09d8544a35Torok Edwinend
2313dd16741864302af14b31b7f75375c09d8544a35Torok Edwin
232da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexception IoError of string
233da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
234da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenexternal register_exns : exn -> unit = "llvm_register_core_exns"
235da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenlet _ = register_exns (IoError "")
236da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llpos =
2384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_end of 'a
2394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| Before of 'b
2404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksentype ('a, 'b) llrev_pos =
2424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| At_start of 'a
2434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen| After of 'b
2444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
2455371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar(*===-- Contexts ----------------------------------------------------------===*)
2465371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_context : unit -> llcontext = "llvm_create_context"
247dd7da4f368c7e1139ef78f36ef173a8b8f8f1c61Chris Lattnerexternal dispose_context : llcontext -> unit = "llvm_dispose_context"
2485371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal global_context : unit -> llcontext = "llvm_global_context"
24946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdkind_id : llcontext -> string -> int = "llvm_mdkind_id"
2508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Modules -----------------------------------------------------------===*)
2525371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal create_module : llcontext -> string -> llmodule = "llvm_create_module"
2538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal dispose_module : llmodule -> unit = "llvm_dispose_module"
254a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal target_triple: llmodule -> string
255a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                      = "llvm_target_triple"
256a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_target_triple: string -> llmodule -> unit
257a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                          = "llvm_set_target_triple"
258a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal data_layout: llmodule -> string
259a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                    = "llvm_data_layout"
260a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenexternal set_data_layout: string -> llmodule -> unit
261a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen                        = "llvm_set_data_layout"
262af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenexternal dump_module : llmodule -> unit = "llvm_dump_module"
2630941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerexternal set_module_inline_asm : llmodule -> string -> unit
2640941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                               = "llvm_set_module_inline_asm"
265ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal module_context : llmodule -> llcontext = "LLVMGetModuleContext"
2668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Types -------------------------------------------------------------===*)
268404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal classify_type : lltype -> TypeKind.t = "llvm_classify_type"
2695371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal type_context : lltype -> llcontext = "llvm_type_context"
270ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwinexternal type_is_sized : lltype -> bool = "llvm_type_is_sized"
2718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on integer types ........................................--*)
273b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i1_type : llcontext -> lltype = "llvm_i1_type"
274b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i8_type : llcontext -> lltype = "llvm_i8_type"
275b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i16_type : llcontext -> lltype = "llvm_i16_type"
276b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i32_type : llcontext -> lltype = "llvm_i32_type"
277b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal i64_type : llcontext -> lltype = "llvm_i64_type"
278b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar
279b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal integer_type : llcontext -> int -> lltype = "llvm_integer_type"
2808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal integer_bitwidth : lltype -> int = "llvm_integer_bitwidth"
2818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2828ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on real types ...........................................--*)
283b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal float_type : llcontext -> lltype = "llvm_float_type"
284b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal double_type : llcontext -> lltype = "llvm_double_type"
285b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal x86fp80_type : llcontext -> lltype = "llvm_x86fp80_type"
286b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal fp128_type : llcontext -> lltype = "llvm_fp128_type"
287b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type"
2888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on function types .......................................--*)
290957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal function_type : lltype -> lltype array -> lltype = "llvm_function_type"
291957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal var_arg_function_type : lltype -> lltype array -> lltype
292957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen                               = "llvm_var_arg_function_type"
2938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_var_arg : lltype -> bool = "llvm_is_var_arg"
294d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal return_type : lltype -> lltype = "LLVMGetReturnType"
2958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal param_types : lltype -> lltype array = "llvm_param_types"
2968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
2978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on struct types .........................................--*)
2985371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal struct_type : llcontext -> lltype array -> lltype = "llvm_struct_type"
2995371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal packed_struct_type : llcontext -> lltype array -> lltype
3005371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                            = "llvm_packed_struct_type"
301c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinexternal struct_name : lltype -> string option = "llvm_struct_name"
3026b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal named_struct_type : llcontext -> string -> lltype =
3036b228e506f42972c003599f4873a24910f8a530aTorok Edwin    "llvm_named_struct_type"
3046b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal struct_set_body : lltype -> lltype array -> bool -> unit =
3056b228e506f42972c003599f4873a24910f8a530aTorok Edwin    "llvm_struct_set_body"
3061940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaarexternal struct_element_types : lltype -> lltype array
3071940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                              = "llvm_struct_element_types"
3088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_packed : lltype -> bool = "llvm_is_packed"
3096b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal is_opaque : lltype -> bool = "llvm_is_opaque"
3108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on pointer, vector, and array types .....................--*)
312957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal array_type : lltype -> int -> lltype = "llvm_array_type"
31357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal pointer_type : lltype -> lltype = "llvm_pointer_type"
31457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal qualified_pointer_type : lltype -> int -> lltype
31557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen                                = "llvm_qualified_pointer_type"
316957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksenexternal vector_type : lltype -> int -> lltype = "llvm_vector_type"
3178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
318d8be2154b38ea623f2320b26c9e1a40be0d0206bGordon Henriksenexternal element_type : lltype -> lltype = "LLVMGetElementType"
3198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal array_length : lltype -> int = "llvm_array_length"
32057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenexternal address_space : lltype -> int = "llvm_address_space"
3218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal vector_size : lltype -> int = "llvm_vector_size"
3228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on other types ..........................................--*)
324b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal void_type : llcontext -> lltype = "llvm_void_type"
325b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal label_type : llcontext -> lltype = "llvm_label_type"
326ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal type_by_name : llmodule -> string -> lltype option = "llvm_type_by_name"
3278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
3283dd16741864302af14b31b7f75375c09d8544a35Torok Edwinexternal classify_value : llvalue -> ValueKind.t = "llvm_classify_value"
3298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Values ------------------------------------------------------------===*)
3308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal type_of : llvalue -> lltype = "llvm_type_of"
3318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal value_name : llvalue -> string = "llvm_value_name"
3328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_value_name : string -> llvalue -> unit = "llvm_set_value_name"
33388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenexternal dump_value : llvalue -> unit = "llvm_dump_value"
33468bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaarexternal replace_all_uses_with : llvalue -> llvalue -> unit
33568bab9833db8d524398f7feee1ce4bda9df320abErick Tryzelaar                               = "LLVMReplaceAllUsesWith"
3368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
337705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar(*--... Operations on uses .................................................--*)
338705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal use_begin : llvalue -> lluse option = "llvm_use_begin"
339705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal use_succ : lluse -> lluse option = "llvm_use_succ"
340705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal user : lluse -> llvalue = "llvm_user"
341705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarexternal used_value : lluse -> llvalue = "llvm_used_value"
342705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
343705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet iter_uses f v =
344705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux = function
345705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> ()
346705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u ->
347705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar        f u;
348705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar        aux (use_succ u)
349705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
350705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux (use_begin v)
351705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
352705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet fold_left_uses f init v =
353705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux init u =
354705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    match u with
355705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> init
356705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u -> aux (f init u) (use_succ u)
357705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
358705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux init (use_begin v)
359705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
360705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaarlet fold_right_uses f v init =
361705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  let rec aux u init =
362705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    match u with
363705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | None -> init
364705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar    | Some u -> f u (aux (use_succ u) init)
365705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  in
366705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar  aux (use_begin v) init
367705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
368705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar
369b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar(*--... Operations on users ................................................--*)
370b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaarexternal operand : llvalue -> int -> llvalue = "llvm_operand"
371f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarexternal set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
372f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarexternal num_operands : llvalue -> int = "llvm_num_operands"
373b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar
3748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on constants of (mostly) any type .......................--*)
375344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_constant : llvalue -> bool = "llvm_is_constant"
376e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_null : lltype -> llvalue = "LLVMConstNull"
377e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes"
3785b0a7741ad262315d6365250a2da2edb8ba37e69Erick Tryzelaarexternal const_pointer_null : lltype -> llvalue = "LLVMConstPointerNull"
379e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal undef : lltype -> llvalue = "LLVMGetUndef"
3808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_null : llvalue -> bool = "llvm_is_null"
381344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenexternal is_undef : llvalue -> bool = "llvm_is_undef"
3826563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal constexpr_opcode : llvalue -> Opcode.t = "llvm_constexpr_get_opcode"
3838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
38446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Operations on instructions .........................................--*)
38546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal has_metadata : llvalue -> bool = "llvm_has_metadata"
38646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal metadata : llvalue -> int -> llvalue option = "llvm_metadata"
38746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_metadata : llvalue -> int -> llvalue -> unit = "llvm_set_metadata"
38846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal clear_metadata : llvalue -> int -> unit = "llvm_clear_metadata"
38946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
39046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Operations on metadata .......,.....................................--*)
39146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdstring : llcontext -> string -> llvalue = "llvm_mdstring"
39246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal mdnode : llcontext -> llvalue array -> llvalue = "llvm_mdnode"
3934f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinexternal get_mdstring : llvalue -> string option = "llvm_get_mdstring"
3944f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinexternal get_named_metadata : llmodule -> string -> llvalue array = "llvm_get_namedmd"
39546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
3968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on scalar constants .....................................--*)
397e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_int : lltype -> int -> llvalue = "llvm_const_int"
398e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_of_int64 : lltype -> Int64.t -> bool -> llvalue
399e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                        = "llvm_const_of_int64"
4006563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal int64_of_const : llvalue -> Int64.t option
4016563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin                        = "llvm_int64_of_const"
40245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_int_of_string : lltype -> string -> int -> llvalue
40345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                             = "llvm_const_int_of_string"
404e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_float : lltype -> float -> llvalue = "llvm_const_float"
40545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaarexternal const_float_of_string : lltype -> string -> llvalue
40645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar                               = "llvm_const_float_of_string"
4078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on composite constants ..................................--*)
409b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_string : llcontext -> string -> llvalue = "llvm_const_string"
410b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal const_stringz : llcontext -> string -> llvalue = "llvm_const_stringz"
411e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
4125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_struct : llcontext -> llvalue array -> llvalue
4135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar                      = "llvm_const_struct"
4146b228e506f42972c003599f4873a24910f8a530aTorok Edwinexternal const_named_struct : lltype -> llvalue array -> llvalue
4156b228e506f42972c003599f4873a24910f8a530aTorok Edwin                      = "llvm_const_named_struct"
4165371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal const_packed_struct : llcontext -> llvalue array -> llvalue
417e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                             = "llvm_const_packed_struct"
418e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal const_vector : llvalue array -> llvalue = "llvm_const_vector"
4198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
4204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen(*--... Constant expressions ...............................................--*)
4212f82376c485f07dd9bfd6f563f6e194843c5060cDuncan Sandsexternal align_of : lltype -> llvalue = "LLVMAlignOf"
422e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksenexternal size_of : lltype -> llvalue = "LLVMSizeOf"
4234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_neg : llvalue -> llvalue = "LLVMConstNeg"
42419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_neg : llvalue -> llvalue = "LLVMConstNSWNeg"
42519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_neg : llvalue -> llvalue = "LLVMConstNUWNeg"
4261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fneg : llvalue -> llvalue = "LLVMConstFNeg"
4274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_not : llvalue -> llvalue = "LLVMConstNot"
4284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd"
4291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd"
43019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_add : llvalue -> llvalue -> llvalue = "LLVMConstNUWAdd"
4311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fadd : llvalue -> llvalue -> llvalue = "LLVMConstFAdd"
4324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub"
43319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNSWSub"
43419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNUWSub"
4351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fsub : llvalue -> llvalue -> llvalue = "LLVMConstFSub"
4364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul"
43719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nsw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNSWMul"
43819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal const_nuw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNUWMul"
4391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fmul : llvalue -> llvalue -> llvalue = "LLVMConstFMul"
4404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_udiv : llvalue -> llvalue -> llvalue = "LLVMConstUDiv"
4414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstSDiv"
4421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_exact_sdiv : llvalue -> llvalue -> llvalue = "LLVMConstExactSDiv"
4434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fdiv : llvalue -> llvalue -> llvalue = "LLVMConstFDiv"
4444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_urem : llvalue -> llvalue -> llvalue = "LLVMConstURem"
4454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_srem : llvalue -> llvalue -> llvalue = "LLVMConstSRem"
4464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_frem : llvalue -> llvalue -> llvalue = "LLVMConstFRem"
4474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd"
4484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr"
4494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor"
450404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue
4514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_icmp"
452404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue
4534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                    = "llvm_const_fcmp"
4544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl"
4554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr"
4564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr"
4574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_gep : llvalue -> llvalue array -> llvalue = "llvm_const_gep"
4581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_in_bounds_gep : llvalue -> llvalue array -> llvalue
4591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_in_bounds_gep"
4604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc"
4614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt"
4624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt"
4634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc"
4644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt"
4654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP"
4664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP"
4674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI"
4684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI"
4694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt"
4704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr"
4714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast"
4721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_zext_or_bitcast : llvalue -> lltype -> llvalue
4731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                             = "LLVMConstZExtOrBitCast"
4741b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_sext_or_bitcast : llvalue -> lltype -> llvalue
4751b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                             = "LLVMConstSExtOrBitCast"
4761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_trunc_or_bitcast : llvalue -> lltype -> llvalue
4771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                              = "LLVMConstTruncOrBitCast"
4781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_pointercast : llvalue -> lltype -> llvalue
4791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "LLVMConstPointerCast"
4801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_intcast : llvalue -> lltype -> llvalue = "LLVMConstIntCast"
4811b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_fpcast : llvalue -> lltype -> llvalue = "LLVMConstFPCast"
4824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_select : llvalue -> llvalue -> llvalue -> llvalue
4834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                      = "LLVMConstSelect"
4844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_extractelement : llvalue -> llvalue -> llvalue
4854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                              = "LLVMConstExtractElement"
4864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_insertelement : llvalue -> llvalue -> llvalue -> llvalue
4874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstInsertElement"
4884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksenexternal const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue
4894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             = "LLVMConstShuffleVector"
4901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_extractvalue : llvalue -> int array -> llvalue
4911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                            = "llvm_const_extractvalue"
4921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaarexternal const_insertvalue : llvalue -> llvalue -> int array -> llvalue
4931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar                           = "llvm_const_insertvalue"
494ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaarexternal const_inline_asm : lltype -> string -> string -> bool -> bool ->
495ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                            llvalue
496ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar                          = "llvm_const_inline_asm"
497c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress"
4984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
4998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on global variables, functions, and aliases (globals) ...--*)
500dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal global_parent : llvalue -> llmodule = "LLVMGetGlobalParent"
5018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_declaration : llvalue -> bool = "llvm_is_declaration"
502404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal linkage : llvalue -> Linkage.t = "llvm_linkage"
503404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage"
5048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal section : llvalue -> string = "llvm_section"
5058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_section : string -> llvalue -> unit = "llvm_set_section"
506404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal visibility : llvalue -> Visibility.t = "llvm_visibility"
507404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal set_visibility : Visibility.t -> llvalue -> unit = "llvm_set_visibility"
5088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal alignment : llvalue -> int = "llvm_alignment"
5098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
510c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksenexternal is_global_constant : llvalue -> bool = "llvm_is_global_constant"
511c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksenexternal set_global_constant : bool -> llvalue -> unit
512c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen                             = "llvm_set_global_constant"
5138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*--... Operations on global variables .....................................--*)
5158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal declare_global : lltype -> string -> llmodule -> llvalue
5168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                        = "llvm_declare_global"
5178e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaarexternal declare_qualified_global : lltype -> string -> int -> llmodule ->
5188e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                    llvalue
5198e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                  = "llvm_declare_qualified_global"
5208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal define_global : string -> llvalue -> llmodule -> llvalue
5218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen                       = "llvm_define_global"
5228e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaarexternal define_qualified_global : string -> llvalue -> int -> llmodule ->
5238e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                   llvalue
5248e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                 = "llvm_define_qualified_global"
5256d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_global : string -> llmodule -> llvalue option
5266d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                       = "llvm_lookup_global"
5278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal delete_global : llvalue -> unit = "llvm_delete_global"
52846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal global_initializer : llvalue -> llvalue = "LLVMGetInitializer"
5298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer"
5308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal remove_initializer : llvalue -> unit = "llvm_remove_initializer"
5318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal is_thread_local : llvalue -> bool = "llvm_is_thread_local"
5328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenexternal set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
5334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_begin : llmodule -> (llmodule, llvalue) llpos
5344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_global_begin"
5354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_succ : llvalue -> (llmodule, llvalue) llpos
5364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_succ"
5374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_end : llmodule -> (llmodule, llvalue) llrev_pos
5384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_global_end"
5394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal global_pred : llvalue -> (llmodule, llvalue) llrev_pos
5404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_global_pred"
5414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_global_range f i e =
5434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
5444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
5454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid global variable range.")
5464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb ->
5474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
5484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_global_range f (global_succ bb) e
5494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_globals f m =
5514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_global_range f (global_begin m) (At_end m)
5524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_global_range f init i e =
5544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
5554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
5564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid global variable range.")
5574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb -> fold_left_global_range f (f init bb) (global_succ bb) e
5584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_globals f init m =
5604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_global_range f init (global_begin m) (At_end m)
5614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_global_range f i e =
5634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
5644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
5654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid global variable range.")
5664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb ->
5674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
5684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_global_range f (global_pred bb) e
5694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_globals f m =
5714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_global_range f (global_end m) (At_start m)
5724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_global_range f i e init =
5744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
5754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
5764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid global variable range.")
5774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb -> fold_right_global_range f (global_pred bb) e (f bb init)
5784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
5794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_globals f m init =
5804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_global_range f (global_end m) (At_start m) init
5818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
5826ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar(*--... Operations on aliases ..............................................--*)
5836ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaarexternal add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
5846ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar                   = "llvm_add_alias"
5856ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar
58646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Operations on functions ............................................--*)
58746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal declare_function : string -> lltype -> llmodule -> llvalue
58846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          = "llvm_declare_function"
58946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal define_function : string -> lltype -> llmodule -> llvalue
59046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         = "llvm_define_function"
5916d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksenexternal lookup_function : string -> llmodule -> llvalue option
5926d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen                         = "llvm_lookup_function"
59346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_function : llvalue -> unit = "llvm_delete_function"
59446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal is_intrinsic : llvalue -> bool = "llvm_is_intrinsic"
59546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal function_call_conv : llvalue -> int = "llvm_function_call_conv"
59646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal set_function_call_conv : int -> llvalue -> unit
59746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                = "llvm_set_function_call_conv"
5985eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal gc : llvalue -> string option = "llvm_gc"
5995eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenexternal set_gc : string option -> llvalue -> unit = "llvm_set_gc"
6004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_begin : llmodule -> (llmodule, llvalue) llpos
6014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                        = "llvm_function_begin"
6024733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_succ : llvalue -> (llmodule, llvalue) llpos
6034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_succ"
6044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_end : llmodule -> (llmodule, llvalue) llrev_pos
6054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                      = "llvm_function_end"
6064733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal function_pred : llvalue -> (llmodule, llvalue) llrev_pos
6074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                       = "llvm_function_pred"
6084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_function_range f i e =
6104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
6114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid function range.")
6134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before fn ->
6144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f fn;
6154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_function_range f (function_succ fn) e
6164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_functions f m =
6184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_function_range f (function_begin m) (At_end m)
6194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_function_range f init i e =
6214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
6224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid function range.")
6244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before fn -> fold_left_function_range f (f init fn) (function_succ fn) e
6254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_functions f init m =
6274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_function_range f init (function_begin m) (At_end m)
6284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_function_range f i e =
6304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
6314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid function range.")
6334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After fn ->
6344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f fn;
6354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_function_range f (function_pred fn) e
6364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_functions f m =
6384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_function_range f (function_end m) (At_start m)
6394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_function_range f i e init =
6414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
6424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
6434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid function range.")
6444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After fn -> fold_right_function_range f (function_pred fn) e (f fn init)
6454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
6464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_functions f m init =
6474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_function_range f (function_end m) (At_start m) init
64846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
6490be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_function_attr : llvalue -> int32 -> unit
6500941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_add_function_attr"
6510be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_function_attr : llvalue -> int32 -> unit
6520941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                   = "llvm_remove_function_attr"
6530be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_function_attr : llvalue -> int32 = "llvm_function_attr"
6540941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
6550be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet pack_attr (attr:Attribute.t) : int32 =
6560941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  match attr with
6570be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  Attribute.Zext                  -> Int32.shift_left 1l 0
6580be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Sext              -> Int32.shift_left 1l 1
6590be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noreturn          -> Int32.shift_left 1l 2
6600be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Inreg             -> Int32.shift_left 1l 3
6610be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Structret         -> Int32.shift_left 1l 4
6620be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nounwind          -> Int32.shift_left 1l 5
6630be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noalias           -> Int32.shift_left 1l 6
6640be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Byval             -> Int32.shift_left 1l 7
6650be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nest              -> Int32.shift_left 1l 8
6660be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Readnone          -> Int32.shift_left 1l 9
6670be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Readonly          -> Int32.shift_left 1l 10
6680be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noinline          -> Int32.shift_left 1l 11
6690be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Alwaysinline      -> Int32.shift_left 1l 12
6700be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Optsize           -> Int32.shift_left 1l 13
6710be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Ssp               -> Int32.shift_left 1l 14
6720be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Sspreq            -> Int32.shift_left 1l 15
6730be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Alignment n       -> Int32.shift_left (Int32.of_int n) 16
6740be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Nocapture         -> Int32.shift_left 1l 21
6750be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noredzone         -> Int32.shift_left 1l 22
6760be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Noimplicitfloat   -> Int32.shift_left 1l 23
6770be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Naked             -> Int32.shift_left 1l 24
6780be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Inlinehint        -> Int32.shift_left 1l 25
6790be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.Stackalignment n  -> Int32.shift_left (Int32.of_int n) 26
6800be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.ReturnsTwice      -> Int32.shift_left 1l 29
6810be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.UWTable           -> Int32.shift_left 1l 30
6820be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin    | Attribute.NonLazyBind       -> Int32.shift_left 1l 31
6830be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
6840be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet unpack_attr (a : int32) : Attribute.t list =
6850be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let l = ref [] in
6860be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let check attr =
6870be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      Int32.logand (pack_attr attr) a in
6880be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let checkattr attr =
6890be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      if (check attr) <> 0l then begin
6900be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin          l := attr :: !l
6910be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      end
6920be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  in
6930be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Zext;
6940be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Sext;
6950be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noreturn;
6960be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Inreg;
6970be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Structret;
6980be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nounwind;
6990be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noalias;
7000be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Byval;
7010be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nest;
7020be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Readnone;
7030be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Readonly;
7040be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noinline;
7050be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Alwaysinline;
7060be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Optsize;
7070be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Ssp;
7080be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Sspreq;
7090be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let align = Int32.logand (Int32.shift_right_logical a 16) 31l in
7100be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  if align <> 0l then
7110be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      l := Attribute.Alignment (Int32.to_int align) :: !l;
7120be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Nocapture;
7130be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noredzone;
7140be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Noimplicitfloat;
7150be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Naked;
7160be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.Inlinehint;
7170be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  let stackalign = Int32.logand (Int32.shift_right_logical a 26) 7l in
7180be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  if stackalign <> 0l then
7190be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin      l := Attribute.Stackalignment (Int32.to_int stackalign) :: !l;
7200be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.ReturnsTwice;
7210be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.UWTable;
7220be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  checkattr Attribute.NonLazyBind;
7230be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin  !l;;
7240941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
7250941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_function_attr llval attr =
7260941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_function_attr llval (pack_attr attr)
7270941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
7280941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_function_attr llval attr =
7290941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_function_attr llval (pack_attr attr)
73046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
7310be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet function_attr f = unpack_attr (llvm_function_attr f)
7320be167bab219cb178f7a6e91186c700ad48aa047Torok Edwin
733dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(*--... Operations on params ...............................................--*)
734dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal params : llvalue -> llvalue array = "llvm_params"
735dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param : llvalue -> int -> llvalue = "llvm_param"
7360be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_param_attr : llvalue -> int32 = "llvm_param_attr"
7370be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinlet param_attr p = unpack_attr (llvm_param_attr p)
738dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal param_parent : llvalue -> llvalue = "LLVMGetParamParent"
7394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin"
7404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ"
7414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end"
7424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal param_pred : llvalue -> (llvalue, llvalue) llrev_pos ="llvm_param_pred"
7434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_param_range f i e =
7454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
7464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid parameter range.")
7484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before p ->
7494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f p;
7504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_param_range f (param_succ p) e
7514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_params f fn =
7534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_param_range f (param_begin fn) (At_end fn)
7544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_param_range f init i e =
7564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
7574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid parameter range.")
7594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before p -> fold_left_param_range f (f init p) (param_succ p) e
7604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_params f init fn =
7624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_param_range f init (param_begin fn) (At_end fn)
7634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_param_range f i e =
7654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
7664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid parameter range.")
7684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After p ->
7694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f p;
7704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_param_range f (param_pred p) e
7714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_params f fn =
7734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_param_range f (param_end fn) (At_start fn)
7744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_param_range f init i e =
7764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
7774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
7784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid parameter range.")
7794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After p -> fold_right_param_range f (f p init) (param_pred p) e
7804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
7814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_params f fn init =
7824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_param_range f init (param_end fn) (At_start fn)
783dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
7840be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_param_attr : llvalue -> int32 -> unit
7850941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_add_param_attr"
7860be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_param_attr : llvalue -> int32 -> unit
7870941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                = "llvm_remove_param_attr"
7880941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
7890941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_param_attr llval attr =
7900941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_param_attr llval (pack_attr attr)
7910941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
7920941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_param_attr llval attr =
7930941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_param_attr llval (pack_attr attr)
7940941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
795e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsexternal set_param_alignment : llvalue -> int -> unit
796e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands                             = "llvm_set_param_alignment"
797e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
79846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Operations on basic blocks .........................................--*)
799dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
800dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal value_is_block : llvalue -> bool = "llvm_value_is_block"
801dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
802dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent"
80346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks"
80446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock"
80546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal delete_block : llbasicblock -> unit = "llvm_delete_block"
806b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal append_block : llcontext -> string -> llvalue -> llbasicblock
807b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar                      = "llvm_append_block"
808b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarexternal insert_block : llcontext -> string -> llbasicblock -> llbasicblock
80946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_insert_block"
8104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_begin : llvalue -> (llvalue, llbasicblock) llpos
8114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                     = "llvm_block_begin"
8124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_succ : llbasicblock -> (llvalue, llbasicblock) llpos
8134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_succ"
8144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_end : llvalue -> (llvalue, llbasicblock) llrev_pos
8154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                   = "llvm_block_end"
8164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenexternal block_pred : llbasicblock -> (llvalue, llbasicblock) llrev_pos
8174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen                    = "llvm_block_pred"
818ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal block_terminator : llbasicblock -> llvalue option =
819ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "llvm_block_terminator"
8204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec iter_block_range f i e =
8224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
8234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid block range.")
8254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb ->
8264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
8274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      iter_block_range f (block_succ bb) e
8284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet iter_blocks f fn =
8304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  iter_block_range f (block_begin fn) (At_end fn)
8314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_left_block_range f init i e =
8334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
8344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid block range.")
8364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | Before bb -> fold_left_block_range f (f init bb) (block_succ bb) e
8374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_left_blocks f init fn =
8394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_left_block_range f init (block_begin fn) (At_end fn)
8404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec rev_iter_block_range f i e =
8424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then () else
8434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid block range.")
8454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb ->
8464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      f bb;
8474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen      rev_iter_block_range f (block_pred bb) e
8484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rev_iter_blocks f fn =
8504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  rev_iter_block_range f (block_end fn) (At_start fn)
8514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet rec fold_right_block_range f init i e =
8534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if i = e then init else
8544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  match i with
8554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid block range.")
8564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  | After bb -> fold_right_block_range f (f bb init) (block_pred bb) e
8574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
8584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenlet fold_right_blocks f fn init =
8594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  fold_right_block_range f init (block_end fn) (At_start fn)
860dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
861dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen(*--... Operations on instructions .........................................--*)
862dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent"
863033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos
864033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_begin"
865033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_succ : llvalue -> (llbasicblock, llvalue) llpos
866033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_succ"
867033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos
868033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_end"
869033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
870033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                     = "llvm_instr_pred"
871033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
8726563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwinexternal instr_opcode : llvalue -> Opcode.t = "llvm_instr_get_opcode"
8734917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwinexternal icmp_predicate : llvalue -> Icmp.t option = "llvm_instr_icmp_predicate"
8744917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
8758da43bf60e8c27fe69033d73d440ea147d72b06dTorok Edwinexternal icmp_predicate : llvalue -> Icmp.t option = "llvm_instr_icmp_predicate"
8768da43bf60e8c27fe69033d73d440ea147d72b06dTorok Edwin
877033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec iter_instrs_range f i e =
878033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then () else
879033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
880033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid instruction range.")
881033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | Before i ->
882033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      f i;
883033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      iter_instrs_range f (instr_succ i) e
884033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
885033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet iter_instrs f bb =
886033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  iter_instrs_range f (instr_begin bb) (At_end bb)
887033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
888033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec fold_left_instrs_range f init i e =
889033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then init else
890033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
891033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_end _ -> raise (Invalid_argument "Invalid instruction range.")
892033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | Before i -> fold_left_instrs_range f (f init i) (instr_succ i) e
893033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
894033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet fold_left_instrs f init bb =
895033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  fold_left_instrs_range f init (instr_begin bb) (At_end bb)
896033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
897033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec rev_iter_instrs_range f i e =
898033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then () else
899033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
900033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid instruction range.")
901033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | After i ->
902033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      f i;
903033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen      rev_iter_instrs_range f (instr_pred i) e
904033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
905033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rev_iter_instrs f bb =
906033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  rev_iter_instrs_range f (instr_end bb) (At_start bb)
907033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
908033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet rec fold_right_instr_range f i e init =
909033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  if i = e then init else
910033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  match i with
911033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | At_start _ -> raise (Invalid_argument "Invalid instruction range.")
912033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  | After i -> fold_right_instr_range f (instr_pred i) e (f i init)
913033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
914033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet fold_right_instrs f bb init =
915033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  fold_right_instr_range f (instr_end bb) (At_start bb) init
916033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
91746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
918cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen(*--... Operations on call sites ...........................................--*)
919cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal instruction_call_conv: llvalue -> int
920cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                              = "llvm_instruction_call_conv"
921cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenexternal set_instruction_call_conv: int -> llvalue -> unit
922cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen                                  = "llvm_set_instruction_call_conv"
9230941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
9240be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_add_instruction_param_attr : llvalue -> int -> int32 -> unit
9250941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                         = "llvm_add_instruction_param_attr"
9260be167bab219cb178f7a6e91186c700ad48aa047Torok Edwinexternal llvm_remove_instruction_param_attr : llvalue -> int -> int32 -> unit
9270941534c712d77243d9dda5e8c1d927563b4edffChris Lattner                                         = "llvm_remove_instruction_param_attr"
9280941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
9290941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet add_instruction_param_attr llval i attr =
9300941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_add_instruction_param_attr llval i (pack_attr attr)
9310941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
9320941534c712d77243d9dda5e8c1d927563b4edffChris Lattnerlet remove_instruction_param_attr llval i attr =
9330941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  llvm_remove_instruction_param_attr llval i (pack_attr attr)
934cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
93507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen(*--... Operations on call instructions (only) .............................--*)
93607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal is_tail_call : llvalue -> bool = "llvm_is_tail_call"
93707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksenexternal set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call"
93807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
9392618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen(*--... Operations on phi nodes ............................................--*)
9402618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
9412618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                      = "llvm_add_incoming"
9422618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
9432618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
944ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal delete_instruction : llvalue -> unit = "llvm_delete_instruction"
94546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
94646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*===-- Instruction builders ----------------------------------------------===*)
9475371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarexternal builder : llcontext -> llbuilder = "llvm_builder"
948033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenexternal position_builder : (llbasicblock, llvalue) llpos -> llbuilder -> unit
949033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen                          = "llvm_position_builder"
950dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenexternal insertion_block : llbuilder -> llbasicblock = "llvm_insertion_block"
9515c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarexternal insert_into_builder : llvalue -> string -> llbuilder -> unit
9525c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                             = "llvm_insert_into_builder"
95346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
9545371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_at context ip =
9555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar  let b = builder context in
956033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  position_builder ip b;
957033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen  b
958033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
9595371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_before context i = builder_at context (Before i)
9605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet builder_at_end context bb = builder_at context (At_end bb)
961033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
962033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet position_before i = position_builder (Before i)
963033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksenlet position_at_end bb = position_builder (At_end bb)
964033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
965033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen
96646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar(*--... Metadata ...........................................................--*)
96746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_current_debug_location : llbuilder -> llvalue -> unit
96846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                    = "llvm_set_current_debug_location"
96946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal clear_current_debug_location : llbuilder -> unit
97046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                      = "llvm_clear_current_debug_location"
97146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal current_debug_location : llbuilder -> llvalue option
97246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                    = "llvm_current_debug_location"
97346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarexternal set_inst_debug_location : llbuilder -> llvalue -> unit
97446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                 = "llvm_set_inst_debug_location"
97546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
97646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
97746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Terminators ........................................................--*)
97846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret_void : llbuilder -> llvalue = "llvm_build_ret_void"
97946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ret : llvalue -> llbuilder -> llvalue = "llvm_build_ret"
980e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_aggregate_ret : llvalue array -> llbuilder -> llvalue
981e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_aggregate_ret"
98246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_br : llbasicblock -> llbuilder -> llvalue = "llvm_build_br"
98346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_cond_br : llvalue -> llbasicblock -> llbasicblock -> llbuilder ->
98446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         llvalue = "llvm_build_cond_br"
98546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_switch : llvalue -> llbasicblock -> int -> llbuilder -> llvalue
98646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_switch"
987ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_malloc : lltype -> string -> llbuilder -> llvalue =
988ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "llvm_build_malloc"
989ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_array_malloc : lltype -> llvalue -> string -> llbuilder ->
990ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    llvalue = "llvm_build_array_malloc"
991ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_free : llvalue -> llbuilder -> llvalue = "llvm_build_free"
99221491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksenexternal add_case : llvalue -> llvalue -> llbasicblock -> unit
99321491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen                  = "llvm_add_case"
994ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal switch_default_dest : llvalue -> llbasicblock =
995ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwin    "LLVMGetSwitchDefaultDest"
996c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal build_indirect_br : llvalue -> int -> llbuilder -> llvalue
997c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                           = "llvm_build_indirect_br"
998c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarexternal add_destination : llvalue -> llbasicblock -> unit
999c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                         = "llvm_add_destination"
100046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_invoke : llvalue -> llvalue array -> llbasicblock ->
100146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llbasicblock -> string -> llbuilder -> llvalue
100246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
100348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinexternal build_landingpad : lltype -> llvalue -> int -> string -> llbuilder ->
100448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin                            llvalue = "llvm_build_landingpad"
100548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwinexternal set_cleanup : llvalue -> bool -> unit = "llvm_set_cleanup"
1006ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal add_clause : llvalue -> llvalue -> unit = "llvm_add_clause"
1007ff616cb440d696b2663d55494e0a5aedfab20726Torok Edwinexternal build_resume : llvalue -> llbuilder -> llvalue = "llvm_build_resume"
100846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_unreachable : llbuilder -> llvalue = "llvm_build_unreachable"
100946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
101046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Arithmetic .........................................................--*)
101146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
101246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_add"
1013e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_nsw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
1014e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_nsw_add"
101519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_add : llvalue -> llvalue -> string -> llbuilder -> llvalue
101619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_add"
1017e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fadd : llvalue -> llvalue -> string -> llbuilder -> llvalue
1018e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fadd"
101946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
102046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_sub"
102119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
102219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_sub"
102319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_sub : llvalue -> llvalue -> string -> llbuilder -> llvalue
102419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_sub"
1025e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fsub : llvalue -> llvalue -> string -> llbuilder -> llvalue
1026e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fsub"
102746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
102846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_mul"
102919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
103019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_mul"
103119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_mul : llvalue -> llvalue -> string -> llbuilder -> llvalue
103219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_mul"
1033e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fmul : llvalue -> llvalue -> string -> llbuilder -> llvalue
1034e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                    = "llvm_build_fmul"
103546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_udiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
103646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_udiv"
103746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
103846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sdiv"
1039e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_exact_sdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
1040e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                          = "llvm_build_exact_sdiv"
104146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fdiv : llvalue -> llvalue -> string -> llbuilder -> llvalue
104246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_fdiv"
104346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_urem : llvalue -> llvalue -> string -> llbuilder -> llvalue
104446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_urem"
104546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_srem : llvalue -> llvalue -> string -> llbuilder -> llvalue
104646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_srem"
104746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_frem : llvalue -> llvalue -> string -> llbuilder -> llvalue
104846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_frem"
104946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shl : llvalue -> llvalue -> string -> llbuilder -> llvalue
105046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_shl"
105146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_lshr : llvalue -> llvalue -> string -> llbuilder -> llvalue
105246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_lshr"
105346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ashr : llvalue -> llvalue -> string -> llbuilder -> llvalue
105446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_ashr"
105546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_and : llvalue -> llvalue -> string -> llbuilder -> llvalue
105646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_and"
105746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_or : llvalue -> llvalue -> string -> llbuilder -> llvalue
105846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                  = "llvm_build_or"
105946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_xor : llvalue -> llvalue -> string -> llbuilder -> llvalue
106046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_xor"
106146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_neg : llvalue -> string -> llbuilder -> llvalue
106246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_neg"
106319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nsw_neg : llvalue -> string -> llbuilder -> llvalue
106419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nsw_neg"
106519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_nuw_neg : llvalue -> string -> llbuilder -> llvalue
106619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                       = "llvm_build_nuw_neg"
106719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaarexternal build_fneg : llvalue -> string -> llbuilder -> llvalue
106819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                    = "llvm_build_fneg"
106946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_not : llvalue -> string -> llbuilder -> llvalue
107046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_not"
107146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
107246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Memory .............................................................--*)
107346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_alloca : lltype -> string -> llbuilder -> llvalue
107446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_alloca"
107546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_array_alloca : lltype -> llvalue -> string -> llbuilder ->
107646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              llvalue = "llvm_build_array_alloca"
107746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_load : llvalue -> string -> llbuilder -> llvalue
107846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_load"
107946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_store : llvalue -> llvalue -> llbuilder -> llvalue
108046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_store"
108146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_gep : llvalue -> llvalue array -> string -> llbuilder -> llvalue
108246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                   = "llvm_build_gep"
1083e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_in_bounds_gep : llvalue -> llvalue array -> string ->
1084e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llbuilder -> llvalue = "llvm_build_in_bounds_gep"
1085e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_struct_gep : llvalue -> int -> string -> llbuilder -> llvalue
1086e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                         = "llvm_build_struct_gep"
1087e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1088e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_string : string -> string -> llbuilder -> llvalue
1089e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             = "llvm_build_global_string"
1090e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_global_stringptr  : string -> string -> llbuilder -> llvalue
1091e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 = "llvm_build_global_stringptr"
109246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
109346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Casts ..............................................................--*)
109446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_trunc : llvalue -> lltype -> string -> llbuilder -> llvalue
109546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_trunc"
109646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_zext : llvalue -> lltype -> string -> llbuilder -> llvalue
109746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_zext"
109846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sext : llvalue -> lltype -> string -> llbuilder -> llvalue
109946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_sext"
110046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptoui : llvalue -> lltype -> string -> llbuilder -> llvalue
110146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptoui"
110246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptosi : llvalue -> lltype -> string -> llbuilder -> llvalue
110346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_fptosi"
110446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_uitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
110546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_uitofp"
110646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_sitofp : llvalue -> lltype -> string -> llbuilder -> llvalue
110746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_sitofp"
110846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fptrunc : llvalue -> lltype -> string -> llbuilder -> llvalue
110946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_fptrunc"
111046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_fpext : llvalue -> lltype -> string -> llbuilder -> llvalue
111146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                     = "llvm_build_fpext"
111246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_ptrtoint : llvalue -> lltype -> string -> llbuilder -> llvalue
111346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_prttoint"
111446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_inttoptr : llvalue -> lltype -> string -> llbuilder -> llvalue
111546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        = "llvm_build_inttoptr"
111646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_bitcast : llvalue -> lltype -> string -> llbuilder -> llvalue
111746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                       = "llvm_build_bitcast"
1118e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_zext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1119e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_zext_or_bitcast"
1120e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_sext_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1121e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                 llvalue = "llvm_build_sext_or_bitcast"
1122e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_trunc_or_bitcast : llvalue -> lltype -> string -> llbuilder ->
1123e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                                  llvalue = "llvm_build_trunc_or_bitcast"
1124e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_pointercast : llvalue -> lltype -> string -> llbuilder -> llvalue
1125e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_pointercast"
1126e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_intcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1127e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_intcast"
1128e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_fpcast : llvalue -> lltype -> string -> llbuilder -> llvalue
1129e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                      = "llvm_build_fpcast"
113046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
113146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Comparisons ........................................................--*)
1132404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_icmp : Icmp.t -> llvalue -> llvalue -> string ->
113346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_icmp"
1134404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksenexternal build_fcmp : Fcmp.t -> llvalue -> llvalue -> string ->
113546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      llbuilder -> llvalue = "llvm_build_fcmp"
113646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
113746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen(*--... Miscellaneous instructions .........................................--*)
11382618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenexternal build_phi : (llvalue * llbasicblock) list -> string -> llbuilder ->
11392618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     llvalue = "llvm_build_phi"
114046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_call : llvalue -> llvalue array -> string -> llbuilder -> llvalue
114146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                    = "llvm_build_call"
114246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_select : llvalue -> llvalue -> llvalue -> string -> llbuilder ->
114346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                        llvalue = "llvm_build_select"
114446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_va_arg : llvalue -> lltype -> string -> llbuilder -> llvalue
114546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                      = "llvm_build_va_arg"
114646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_extractelement : llvalue -> llvalue -> string -> llbuilder ->
114746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                llvalue = "llvm_build_extractelement"
114846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_insertelement : llvalue -> llvalue -> llvalue -> string ->
114946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_insertelement"
115046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenexternal build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
115146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               llbuilder -> llvalue = "llvm_build_shufflevector"
1152e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_extractvalue : llvalue -> int -> string -> llbuilder -> llvalue
1153e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                            = "llvm_build_extractvalue"
1154e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_insertvalue : llvalue -> llvalue -> int -> string -> llbuilder ->
1155e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                             llvalue = "llvm_build_insertvalue"
1156e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar
1157e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_null : llvalue -> string -> llbuilder -> llvalue
1158e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_is_null"
1159e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_is_not_null : llvalue -> string -> llbuilder -> llvalue
1160e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                           = "llvm_build_is_not_null"
1161e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaarexternal build_ptrdiff : llvalue -> llvalue -> string -> llbuilder -> llvalue
1162e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar                       = "llvm_build_ptrdiff"
11638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
1164da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1165da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen(*===-- Memory buffers ----------------------------------------------------===*)
1166da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1167da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenmodule MemoryBuffer = struct
1168da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
1169da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
1170da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
1171da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenend
11721ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
11731ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1174d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen(*===-- Pass Manager ------------------------------------------------------===*)
1175d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1176d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenmodule PassManager = struct
1177d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type 'a t
1178d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  type any = [ `Module | `Function ]
1179d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external create : unit -> [ `Module ] t = "llvm_passmanager_create"
118016609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar  external create_function : llmodule -> [ `Function ] t
1181d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                           = "LLVMCreateFunctionPassManager"
1182d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_module : llmodule -> [ `Module ] t -> bool
1183d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                      = "llvm_passmanager_run_module"
1184d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize"
1185d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external run_function : llvalue -> [ `Function ] t -> bool
1186d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen                        = "llvm_passmanager_run_function"
1187d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize"
1188d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen  external dispose : [< any ] t -> unit = "llvm_passmanager_dispose"
1189d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenend
1190d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1191d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
11928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(*===-- Non-Externs -------------------------------------------------------===*)
11938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(* These functions are built using the externals, so must be declared late.   *)
11948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
11958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenlet concat2 sep arr =
11968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen  let s = ref "" in
11978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen  if 0 < Array.length arr then begin
11988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen    s := !s ^ arr.(0);
11998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen    for i = 1 to (Array.length arr) - 1 do
12008ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen      s := !s ^ sep ^ arr.(i)
12018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen    done
12028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen  end;
12038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen  !s
12048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
12058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenlet rec string_of_lltype ty =
12060465fb5663a0108399df4c19db1afb4516328964Gordon Henriksen  (* FIXME: stop infinite recursion! :) *)
12078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen  match classify_type ty with
1208404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen    TypeKind.Integer -> "i" ^ string_of_int (integer_bitwidth ty)
12092c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin  | TypeKind.Pointer ->
12102c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin      (let ety = element_type ty in
12112c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin      match classify_type ety with
12122c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin      | TypeKind.Struct ->
12132c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin          (match struct_name ety with
12142c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin          | None -> (string_of_lltype ety)
12152c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin          | Some s -> s) ^ "*"
12162c4ae181c4c3d93684bb5926cd73c6b3a8370c42Torok Edwin      | _ -> (string_of_lltype (element_type ty)) ^ "*")
1217404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Struct ->
12188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen      let s = "{ " ^ (concat2 ", " (
12191940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar                Array.map string_of_lltype (struct_element_types ty)
12208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen              )) ^ " }" in
12218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen      if is_packed ty
12228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen        then "<" ^ s ^ ">"
12238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen        else s
1224404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Array -> "["   ^ (string_of_int (array_length ty)) ^
1225404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                      " x " ^ (string_of_lltype (element_type ty)) ^ "]"
1226404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Vector -> "<"   ^ (string_of_int (vector_size ty)) ^
1227404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                       " x " ^ (string_of_lltype (element_type ty)) ^ ">"
1228404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Function -> string_of_lltype (return_type ty) ^
1229404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                         " (" ^ (concat2 ", " (
1230404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                           Array.map string_of_lltype (param_types ty)
1231404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen                         )) ^ ")"
1232404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Label -> "label"
1233404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Ppc_fp128 -> "ppc_fp128"
1234404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Fp128 -> "fp128"
1235404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.X86fp80 -> "x86_fp80"
1236404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Double -> "double"
1237404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Float -> "float"
1238eaf0608891cff27fe4cf08d180a6baf49e00f8aeBob Wilson  | TypeKind.Half -> "half"
1239404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen  | TypeKind.Void -> "void"
12407a0370f66ab5739f42ffe822f33494e0de9b182bNick Lewycky  | TypeKind.Metadata -> "metadata"
1241