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