llvm_ocaml.c revision 46c80e0c5653e11ada7cebcb46f9a8f7df758e41
1bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen/*===-- llvm_ocaml.c - LLVM Ocaml Glue --------------------------*- C++ -*-===*\ 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|* This file glues LLVM's ocaml interface to its C interface. These functions *| 118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* are by and large transparent wrappers to the corresponding C functions. *| 128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* Note that these functions intentionally take liberties with the CAMLparamX *| 148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* macros, since most of the parameters are not GC heap objects. *| 158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen\*===----------------------------------------------------------------------===*/ 178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "llvm-c/Core.h" 198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "caml/alloc.h" 2046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#include "caml/custom.h" 218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "caml/memory.h" 22da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include "caml/fail.h" 23da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include "caml/callback.h" 246d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen#include "llvm/Config/config.h" 252618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen#include <assert.h> 26da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include <stdlib.h> 27da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 28da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 29da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* Can't use the recommended caml_named_value mechanism for backwards 30da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen compatibility reasons. This is largely equivalent. */ 31da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenstatic value llvm_ioerror_exn; 32da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 33da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_register_core_exns(value IoError) { 34da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_ioerror_exn = Field(IoError, 0); 35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen register_global_root(&llvm_ioerror_exn); 36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 392e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenstatic void llvm_raise(value Prototype, char *Message) { 40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Prototype); 41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLlocal1(CamlMessage); 42da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 43da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CamlMessage = copy_string(Message); 44da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMessage(Message); 45da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 46da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise_with_arg(Prototype, CamlMessage); 472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen abort(); /* NOTREACHED */ 48a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#ifdef CAMLnoreturn 49a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen CAMLnoreturn; /* Silences warnings, but is missing in some versions. */ 50a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#endif 51da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenstatic value alloc_variant(int tag, void *Value) { 544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Iter = alloc_small(1, tag); 554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen Field(Iter, 0) = Val_op(Value); 564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Iter; 574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* Macro to convert the C first/next/last/prev idiom to the Ocaml llpos/ 604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen llrev_pos idiom. */ 614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen#define DEFINE_ITERATORS(camlname, cname, pty, cty, pfun) \ 624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llpos */ \ 634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_begin(pty Mom) { \ 644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty First = LLVMGetFirst##cname(Mom); \ 654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (First) \ 664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, First); \ 674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llpos */ \ 714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_succ(cty Kid) { \ 724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Next = LLVMGetNext##cname(Kid); \ 734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Next) \ 744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Next); \ 75f440691a20eff24cf59ac14e10057234ae182dbeGordon Henriksen return alloc_variant(0, pfun(Kid)); \ 764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llrev_pos */ \ 794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_end(pty Mom) { \ 804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Last = LLVMGetLast##cname(Mom); \ 814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Last) \ 824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Last); \ 834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llrev_pos */ \ 874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_pred(cty Kid) { \ 884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Prev = LLVMGetPrevious##cname(Kid); \ 894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Prev) \ 904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Prev); \ 914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, pfun(Kid)); \ 924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } 934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 955371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/*===-- Contexts ----------------------------------------------------------===*/ 965371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 975371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 985371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_create_context(value Unit) { 995371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMContextCreate(); 1005371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1015371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> unit */ 1035371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_dispose_context(LLVMContextRef C) { 1045371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar LLVMContextDispose(C); 1055371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return Val_unit; 1065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 1095371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_global_context(value Unit) { 1105371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetGlobalContext(); 1115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 11346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> int */ 11446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_mdkind_id(LLVMContextRef C, value Name) { 11546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar unsigned MDKindID = LLVMGetMDKindIDInContext(C, String_val(Name), 11646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar caml_string_length(Name)); 11746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_int(MDKindID); 11846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 11946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 1208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Modules -----------------------------------------------------------===*/ 1218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 122263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar/* llcontext -> string -> llmodule */ 123263d989a719c1864862fc91f59193a6c2b55ca48Erick TryzelaarCAMLprim LLVMModuleRef llvm_create_module(LLVMContextRef C, value ModuleID) { 124263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar return LLVMModuleCreateWithNameInContext(String_val(ModuleID), C); 1258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llmodule -> unit */ 12846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_dispose_module(LLVMModuleRef M) { 12946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeModule(M); 1308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 1318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 133a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 134a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_target_triple(LLVMModuleRef M) { 135a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetTarget(M)); 136a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 137a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 138a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 139a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_target_triple(value Trip, LLVMModuleRef M) { 140a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetTarget(M, String_val(Trip)); 141a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 142a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 143a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 144a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 145a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_data_layout(LLVMModuleRef M) { 146a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetDataLayout(M)); 147a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 148a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 149a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 150a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_data_layout(value Layout, LLVMModuleRef M) { 151a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetDataLayout(M, String_val(Layout)); 152a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 153a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 154a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 1558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> lltype -> llmodule -> bool */ 15646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_add_type_name(value Name, LLVMTypeRef Ty, LLVMModuleRef M) { 15746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen int res = LLVMAddTypeName(M, String_val(Name), Ty); 1588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_bool(res == 0); 1598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 16146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llmodule -> unit */ 16246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_type_name(value Name, LLVMModuleRef M) { 16346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteTypeName(M, String_val(Name)); 16446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 16546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 16646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 167af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen/* llmodule -> unit */ 168af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon HenriksenCAMLprim value llvm_dump_module(LLVMModuleRef M) { 169af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen LLVMDumpModule(M); 170af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen return Val_unit; 171af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen} 172af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen 1738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Types -------------------------------------------------------------===*/ 1758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 176404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* lltype -> TypeKind.t */ 17746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_classify_type(LLVMTypeRef Ty) { 17846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetTypeKind(Ty)); 1798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* lltype -> llcontext */ 1825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_type_context(LLVMTypeRef Ty) { 1835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetTypeContext(Ty); 1845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on integer types ........................................--*/ 1878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 188b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 189b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i1_type (LLVMContextRef Context) { 190b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt1TypeInContext(Context); 191b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 192b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 193b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 194b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i8_type (LLVMContextRef Context) { 195b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt8TypeInContext(Context); 196b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 197b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 198b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 199b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i16_type (LLVMContextRef Context) { 200b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt16TypeInContext(Context); 201b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 202b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 203b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 204b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i32_type (LLVMContextRef Context) { 205b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt32TypeInContext(Context); 206b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 207b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 208b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 209b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i64_type (LLVMContextRef Context) { 210b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt64TypeInContext(Context); 211b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 2128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 213b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> int -> lltype */ 214b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_integer_type(LLVMContextRef Context, value Width) { 215b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMIntTypeInContext(Context, Int_val(Width)); 2168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 21946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_integer_bitwidth(LLVMTypeRef IntegerTy) { 22046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetIntTypeWidth(IntegerTy)); 2218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on real types ...........................................--*/ 2248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 225b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 226b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_float_type(LLVMContextRef Context) { 227b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFloatTypeInContext(Context); 2288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 230b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 231b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_double_type(LLVMContextRef Context) { 232b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMDoubleTypeInContext(Context); 2338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 235b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 236b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_x86fp80_type(LLVMContextRef Context) { 237b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMX86FP80TypeInContext(Context); 2388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 240b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 241b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_fp128_type(LLVMContextRef Context) { 242b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFP128TypeInContext(Context); 2438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 245b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 246b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_ppc_fp128_type(LLVMContextRef Context) { 247b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMPPCFP128TypeInContext(Context); 2488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on function types .......................................--*/ 2518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 252957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 253957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_function_type(LLVMTypeRef RetTy, value ParamTys) { 25481a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 255957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 0); 256957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 257957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 258957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 259957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_var_arg_function_type(LLVMTypeRef RetTy, 260957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen value ParamTys) { 261957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 262957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 1); 2638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> bool */ 26646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_var_arg(LLVMTypeRef FunTy) { 26746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsFunctionVarArg(FunTy)); 2688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 27146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_param_types(LLVMTypeRef FunTy) { 27246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountParamTypes(FunTy), 0); 27346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetParamTypes(FunTy, (LLVMTypeRef *) Tys); 27446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 2758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on struct types .........................................--*/ 2788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_struct_type(LLVMContextRef C, value ElementTypes) { 2815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 0); 283957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 284957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 2855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_packed_struct_type(LLVMContextRef C, 2875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementTypes) { 2885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2895371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 1); 2908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 2931940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarCAMLprim value llvm_struct_element_types(LLVMTypeRef StructTy) { 29446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountStructElementTypes(StructTy), 0); 29546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetStructElementTypes(StructTy, (LLVMTypeRef *) Tys); 29646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 2978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 29946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> bool */ 30046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_packed(LLVMTypeRef StructTy) { 30146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsPackedStruct(StructTy)); 3028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3041940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar/*--... Operations on union types ..........................................--*/ 3051940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar 3061940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar/* llcontext -> lltype array -> lltype */ 3071940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarCAMLprim LLVMTypeRef llvm_union_type(LLVMContextRef C, value ElementTypes) { 3081940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar return LLVMUnionTypeInContext(C, (LLVMTypeRef *) ElementTypes, 3091940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar Wosize_val(ElementTypes)); 3101940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar} 3111940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar 3121940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar/* lltype -> lltype array */ 3131940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarCAMLprim value llvm_union_element_types(LLVMTypeRef UnionTy) { 3141940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar value Tys = alloc(LLVMCountUnionElementTypes(UnionTy), 0); 3151940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar LLVMGetUnionElementTypes(UnionTy, (LLVMTypeRef *) Tys); 3161940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar return Tys; 3171940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar} 3181940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar 3198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on array, pointer, and vector types .....................--*/ 3208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 322957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_array_type(LLVMTypeRef ElementTy, value Count) { 32381a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMArrayType(ElementTy, Int_val(Count)); 3248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 32657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> lltype */ 32757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_pointer_type(LLVMTypeRef ElementTy) { 32857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, 0); 32957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 33057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 33157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int -> lltype */ 33257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_qualified_pointer_type(LLVMTypeRef ElementTy, 33357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen value AddressSpace) { 33457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, Int_val(AddressSpace)); 33557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 33657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 3378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 338957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_vector_type(LLVMTypeRef ElementTy, value Count) { 33981a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMVectorType(ElementTy, Int_val(Count)); 3408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 34346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_array_length(LLVMTypeRef ArrayTy) { 34446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetArrayLength(ArrayTy)); 3458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 34857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim value llvm_address_space(LLVMTypeRef PtrTy) { 34957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return Val_int(LLVMGetPointerAddressSpace(PtrTy)); 35057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 35157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 35257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int */ 35346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_vector_size(LLVMTypeRef VectorTy) { 35446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVectorSize(VectorTy)); 3558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on other types ..........................................--*/ 3588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 359b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 360b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_void_type (LLVMContextRef Context) { 361b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMVoidTypeInContext(Context); 362b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 363b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 364b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 365b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_label_type(LLVMContextRef Context) { 366b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMLabelTypeInContext(Context); 367b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 369b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 370b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_opaque_type(LLVMContextRef Context) { 371b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMOpaqueTypeInContext(Context); 3728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3741cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen/*--... Operations on type handles .........................................--*/ 3751cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 3761cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen#define Typehandle_val(v) (*(LLVMTypeHandleRef *)(Data_custom_val(v))) 3771cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 3782e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenstatic void llvm_finalize_handle(value TH) { 3791cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen LLVMDisposeTypeHandle(Typehandle_val(TH)); 3801cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen} 3811cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 3821cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenstatic struct custom_operations typehandle_ops = { 3831cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen (char *) "LLVMTypeHandle", 3841cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen llvm_finalize_handle, 3851cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen custom_compare_default, 3861cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen custom_hash_default, 3871cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen custom_serialize_default, 3881cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen custom_deserialize_default 3891cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen}; 3901cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 3911cf08fddc7413076dedad58dbb8d8d67e69a490fGordon HenriksenCAMLprim value llvm_handle_to_type(LLVMTypeRef PATy) { 3921cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen value TH = alloc_custom(&typehandle_ops, sizeof(LLVMBuilderRef), 0, 1); 3931cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen Typehandle_val(TH) = LLVMCreateTypeHandle(PATy); 3941cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen return TH; 3951cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen} 3961cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 3971cf08fddc7413076dedad58dbb8d8d67e69a490fGordon HenriksenCAMLprim LLVMTypeRef llvm_type_of_handle(value TH) { 3981cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen return LLVMResolveTypeHandle(Typehandle_val(TH)); 3991cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen} 4001cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 4011cf08fddc7413076dedad58dbb8d8d67e69a490fGordon HenriksenCAMLprim value llvm_refine_type(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy){ 40283eaae19add8031b299fc657cb69ceb5bfa44ae4Gordon Henriksen LLVMRefineType(AbstractTy, ConcreteTy); 4031cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen return Val_unit; 4041cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen} 4051cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 4068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- VALUES ------------------------------------------------------------===*/ 4088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> lltype */ 41046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMTypeRef llvm_type_of(LLVMValueRef Val) { 41146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMTypeOf(Val); 4128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 41546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_name(LLVMValueRef Val) { 41646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetValueName(Val)); 4178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 42046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_value_name(value Name, LLVMValueRef Val) { 42146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetValueName(Val, String_val(Name)); 4228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 4238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 42588cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen/* llvalue -> unit */ 42688cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon HenriksenCAMLprim value llvm_dump_value(LLVMValueRef Val) { 42788cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen LLVMDumpValue(Val); 42888cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen return Val_unit; 42988cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen} 43088cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen 4318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on constants of (mostly) any type .......................--*/ 4328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 43446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_constant(LLVMValueRef Val) { 43546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsConstant(Val)); 436344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 437344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 438344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 43946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_null(LLVMValueRef Val) { 44046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsNull(Val)); 4418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 443344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 44446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_undef(LLVMValueRef Val) { 44546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsUndef(Val)); 446344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 447344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 44846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on instructions .........................................--*/ 44946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 45046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> bool */ 45146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_has_metadata(LLVMValueRef Val) { 45246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_bool(LLVMHasMetadata(Val)); 45346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 45446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 45546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue option */ 45646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_metadata(LLVMValueRef Val, value MDKindID) { 45746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam1(MDKindID); 45846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD; 45946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((MD = LLVMGetMetadata(Val, Int_val(MDKindID)))) { 46046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 46146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) MD; 46246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 46346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 46446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 46546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 46646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 46746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue -> unit */ 46846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_metadata(LLVMValueRef Val, value MDKindID, 46946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD) { 47046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), MD); 47146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 47246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 47346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 47446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> unit */ 47546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_metadata(LLVMValueRef Val, value MDKindID) { 47646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), NULL); 47746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 47846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 47946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 48046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 48146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on metadata .............................................--*/ 48246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 48346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> llvalue */ 48446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdstring(LLVMContextRef C, value S) { 48546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDStringInContext(C, String_val(S), caml_string_length(S)); 48646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 48746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 48846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 48946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdnode(LLVMContextRef C, value ElementVals) { 49046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDNodeInContext(C, (LLVMValueRef*) Op_val(ElementVals), 49146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Wosize_val(ElementVals)); 49246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 49346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 4948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on scalar constants .....................................--*/ 4958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 496e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen/* lltype -> int -> llvalue */ 497e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_int(LLVMTypeRef IntTy, value N) { 498e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, (long long) Int_val(N), 1); 4998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5008ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 501344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* lltype -> Int64.t -> bool -> llvalue */ 502e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_of_int64(LLVMTypeRef IntTy, value N, 503e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen value SExt) { 504e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, Int64_val(N), Bool_val(SExt)); 505344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 506344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 50745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> int -> llvalue */ 50845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_int_of_string(LLVMTypeRef IntTy, value S, 50945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar value Radix) { 51045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstIntOfStringAndSize(IntTy, String_val(S), caml_string_length(S), 51145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar Int_val(Radix)); 51245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 51345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 5148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> float -> llvalue */ 515e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_float(LLVMTypeRef RealTy, value N) { 516e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstReal(RealTy, Double_val(N)); 5178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 51945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> llvalue */ 52045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_float_of_string(LLVMTypeRef RealTy, value S) { 52145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstRealOfStringAndSize(RealTy, String_val(S), 52245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar caml_string_length(S)); 52345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 52445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 5258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on composite constants ..................................--*/ 5268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 527b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 528b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_string(LLVMContextRef Context, value Str, 529b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 530b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 531b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 1); 532e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 533e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 534b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 535b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_stringz(LLVMContextRef Context, value Str, 536b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 537b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 538b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 0); 5398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> llvalue array -> llvalue */ 542e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_array(LLVMTypeRef ElementTy, 54346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value ElementVals) { 544e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstArray(ElementTy, (LLVMValueRef*) Op_val(ElementVals), 545e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 546e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 547e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 5485371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 5495371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_struct(LLVMContextRef C, value ElementVals) { 5505371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 5515371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 0); 5528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5545371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 5555371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_packed_struct(LLVMContextRef C, 5565371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementVals) { 5575371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 5585371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 1); 5598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue array -> llvalue */ 562e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_vector(value ElementVals) { 563e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstVector((LLVMValueRef*) Op_val(ElementVals), 564e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 5654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--... Constant expressions ...............................................--*/ 5684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 569404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> llvalue */ 5704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_icmp(value Pred, 5714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 5724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 5734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstICmp(Int_val(Pred) + LLVMIntEQ, LHSConstant, RHSConstant); 5744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 576404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> llvalue */ 5774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_fcmp(value Pred, 5784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 5794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 5804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstFCmp(Int_val(Pred), LHSConstant, RHSConstant); 5814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/* llvalue -> llvalue array -> llvalue */ 5844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_gep(LLVMValueRef ConstantVal, value Indices) { 5854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 5864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen Wosize_val(Indices)); 5878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue array -> llvalue */ 5901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_in_bounds_gep(LLVMValueRef ConstantVal, 5911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 5921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar return LLVMConstInBoundsGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 5931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar Wosize_val(Indices)); 5941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 5951b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5961b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> int array -> llvalue */ 5971b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_extractvalue(LLVMValueRef Aggregate, 5981b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 5991b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 6001b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 6011b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 6021b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 6031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 6051b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 6061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 6071b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 6081b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6091b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstExtractValue(Aggregate, idxs, size); 6101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 6111b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 6121b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 6131b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6141b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue -> int array -> llvalue */ 6151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_insertvalue(LLVMValueRef Aggregate, 6161b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef Val, value Indices) { 6171b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 6181b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 6191b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 6201b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 6211b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6221b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 6231b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 6241b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 6251b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 6261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstInsertValue(Aggregate, Val, idxs, size); 6281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 6291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 6301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 6311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 6328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables, functions, and aliases (globals) ...--*/ 6338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 63546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_declaration(LLVMValueRef Global) { 63646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsDeclaration(Global)); 6378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 639404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Linkage.t */ 64046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_linkage(LLVMValueRef Global) { 64146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetLinkage(Global)); 6428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 644404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Linkage.t -> llvalue -> unit */ 64546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_linkage(value Linkage, LLVMValueRef Global) { 64646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetLinkage(Global, Int_val(Linkage)); 6478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 65146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_section(LLVMValueRef Global) { 65246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetSection(Global)); 6538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 65646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_section(value Section, LLVMValueRef Global) { 65746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetSection(Global, String_val(Section)); 6588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 661404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Visibility.t */ 66246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_visibility(LLVMValueRef Global) { 66346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVisibility(Global)); 6648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 666404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Visibility.t -> llvalue -> unit */ 66746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_visibility(value Viz, LLVMValueRef Global) { 66846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetVisibility(Global, Int_val(Viz)); 6698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> int */ 67346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_alignment(LLVMValueRef Global) { 67446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetAlignment(Global)); 6758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* int -> llvalue -> unit */ 67846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_alignment(value Bytes, LLVMValueRef Global) { 67946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetAlignment(Global, Int_val(Bytes)); 6808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6828ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6838ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables .....................................--*/ 6848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6854733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(global, Global, LLVMModuleRef, LLVMValueRef, 6864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 6874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 6888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> string -> llmodule -> llvalue */ 68946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_global(LLVMTypeRef Ty, value Name, 69046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 6916d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 6926d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 6936d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty) 69457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(GlobalVar, LLVMPointerType(Ty, 0)); 6956d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return GlobalVar; 6966d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 69746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddGlobal(M, Ty, String_val(Name)); 6988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7006d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 7016d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_global(value Name, LLVMModuleRef M) { 7026d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 7036d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 7046d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 70575e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 7066d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) GlobalVar; 7076d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 7086d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 7096d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 7106d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 7116d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 7128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> llmodule -> llvalue */ 71346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_global(value Name, LLVMValueRef Initializer, 71446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 71546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar = LLVMAddGlobal(M, LLVMTypeOf(Initializer), 7168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen String_val(Name)); 7178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen LLVMSetInitializer(GlobalVar, Initializer); 71846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return GlobalVar; 7198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 72246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_global(LLVMValueRef GlobalVar) { 72346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteGlobal(GlobalVar); 7248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> llvalue -> unit */ 72846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_initializer(LLVMValueRef ConstantVal, 72946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 73046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, ConstantVal); 7318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 73546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_remove_initializer(LLVMValueRef GlobalVar) { 73646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, NULL); 7378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 74146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_thread_local(LLVMValueRef GlobalVar) { 74246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsThreadLocal(GlobalVar)); 7438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* bool -> llvalue -> unit */ 74646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_thread_local(value IsThreadLocal, 74746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 74846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetThreadLocal(GlobalVar, Bool_val(IsThreadLocal)); 74946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 75046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 75146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 752c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* llvalue -> bool */ 753c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_is_global_constant(LLVMValueRef GlobalVar) { 754c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_bool(LLVMIsGlobalConstant(GlobalVar)); 755c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 756c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 757c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* bool -> llvalue -> unit */ 758c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_set_global_constant(value Flag, LLVMValueRef GlobalVar) { 759c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen LLVMSetGlobalConstant(GlobalVar, Bool_val(Flag)); 760c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_unit; 761c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 762c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 76346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on functions ............................................--*/ 76446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 7654733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(function, Function, LLVMModuleRef, LLVMValueRef, 7664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 7674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 76846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 76946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_function(value Name, LLVMTypeRef Ty, 77046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 7716d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 7726d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 7736d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(Fn)) != Ty) 77457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(Fn, LLVMPointerType(Ty, 0)); 7756d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return Fn; 7766d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 77746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddFunction(M, String_val(Name), Ty); 77846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 77946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 7806d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 7816d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_function(value Name, LLVMModuleRef M) { 7826d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 7836d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 7846d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 78575e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 7866d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) Fn; 7876d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 7886d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 7896d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 7906d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 7916d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 79246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 79346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_function(value Name, LLVMTypeRef Ty, 79446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 79546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Fn = LLVMAddFunction(M, String_val(Name), Ty); 796b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMAppendBasicBlockInContext(LLVMGetTypeContext(Ty), Fn, "entry"); 79746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Fn; 79846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 79946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 80046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> unit */ 80146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_function(LLVMValueRef Fn) { 80246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteFunction(Fn); 80346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 80446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 80546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 80646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 80746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_intrinsic(LLVMValueRef Fn) { 80846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMGetIntrinsicID(Fn)); 80946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 81046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 81146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> int */ 81246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_function_call_conv(LLVMValueRef Fn) { 81346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetFunctionCallConv(Fn)); 81446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 81546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 81646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* int -> llvalue -> unit */ 81746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_function_call_conv(value Id, LLVMValueRef Fn) { 81846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetFunctionCallConv(Fn, Int_val(Id)); 81946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 82046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 82146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 82280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* llvalue -> string option */ 8235eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_gc(LLVMValueRef Fn) { 8245eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen const char *GC; 82580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLparam0(); 82680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLlocal2(Name, Option); 82780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 8285eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen if ((GC = LLVMGetGC(Fn))) { 8295eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen Name = copy_string(GC); 83080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 83180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Option = alloc(1, 0); 83280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Field(Option, 0) = Name; 83380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Option); 83480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } else { 83580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Val_int(0)); 83680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } 83780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 83880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 83980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* string option -> llvalue -> unit */ 8405eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_set_gc(value GC, LLVMValueRef Fn) { 8415eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen LLVMSetGC(Fn, GC == Val_int(0)? 0 : String_val(Field(GC, 0))); 84280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen return Val_unit; 84380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 84480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 845e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 846e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_function_attr(LLVMValueRef Arg, value PA) { 847e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMAddFunctionAttr(Arg, 1<<Int_val(PA)); 848e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 849e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 850e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 851e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 852e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_function_attr(LLVMValueRef Arg, value PA) { 853e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMRemoveFunctionAttr(Arg, 1<<Int_val(PA)); 854e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 855e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 8564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/*--... Operations on parameters ...........................................--*/ 8574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 8584733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(param, Param, LLVMValueRef, LLVMValueRef, LLVMGetParamParent) 8594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 8604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* llvalue -> int -> llvalue */ 8614733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenCAMLprim LLVMValueRef llvm_param(LLVMValueRef Fn, value Index) { 8624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return LLVMGetParam(Fn, Int_val(Index)); 8634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 8644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 8654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* llvalue -> int -> llvalue */ 8664733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenCAMLprim value llvm_params(LLVMValueRef Fn, value Index) { 8674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Params = alloc(LLVMCountParams(Fn), 0); 8684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetParams(Fn, (LLVMValueRef *) Op_val(Params)); 8694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Params; 8704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 8714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 872e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 873e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_param_attr(LLVMValueRef Arg, value PA) { 874e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMAddAttribute(Arg, 1<<Int_val(PA)); 875e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 876e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 877e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 878e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 879e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_param_attr(LLVMValueRef Arg, value PA) { 880e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMRemoveAttribute(Arg, 1<<Int_val(PA)); 881e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 882e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 883e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 884e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> unit */ 885e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_set_param_alignment(LLVMValueRef Arg, value align) { 886e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMSetParamAlignment(Arg, Int_val(align)); 887e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 888e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 889e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 89046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on basic blocks .........................................--*/ 89146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 8924733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS( 8934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen block, BasicBlock, LLVMValueRef, LLVMBasicBlockRef, LLVMGetBasicBlockParent) 8944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 89546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock array */ 89646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_basic_blocks(LLVMValueRef Fn) { 89746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value MLArray = alloc(LLVMCountBasicBlocks(Fn), 0); 89846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetBasicBlocks(Fn, (LLVMBasicBlockRef *) Op_val(MLArray)); 89946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return MLArray; 90046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 90146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 90246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> unit */ 90346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_block(LLVMBasicBlockRef BB) { 90446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteBasicBlock(BB); 90546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 90646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 90746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 90846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llvalue -> llbasicblock */ 909b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_append_block(LLVMContextRef Context, value Name, 910b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMValueRef Fn) { 911b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMAppendBasicBlockInContext(Context, Fn, String_val(Name)); 91246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 91346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 91446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llbasicblock -> llbasicblock */ 915b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insert_block(LLVMContextRef Context, value Name, 916b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMBasicBlockRef BB) { 917b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInsertBasicBlockInContext(Context, BB, String_val(Name)); 91846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 91946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 92046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 92146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_is_block(LLVMValueRef Val) { 92246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMValueIsBasicBlock(Val)); 92346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 92446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 925033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/*--... Operations on instructions .........................................--*/ 926033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 927033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenDEFINE_ITERATORS(instr, Instruction, LLVMBasicBlockRef, LLVMValueRef, 928033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMGetInstructionParent) 929033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 930033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 931cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/*--... Operations on call sites ...........................................--*/ 932cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 933cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* llvalue -> int */ 934cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_instruction_call_conv(LLVMValueRef Inst) { 935cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_int(LLVMGetInstructionCallConv(Inst)); 936cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 937cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 938cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* int -> llvalue -> unit */ 939cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_set_instruction_call_conv(value CC, LLVMValueRef Inst) { 940cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen LLVMSetInstructionCallConv(Inst, Int_val(CC)); 941cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_unit; 942cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 943cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 944e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 945e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_instruction_param_attr(LLVMValueRef Instr, 946e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 947e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 948e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMAddInstrAttribute(Instr, Int_val(index), 1<<Int_val(PA)); 949e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 950e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 951e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 952e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 953e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_instruction_param_attr(LLVMValueRef Instr, 954e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 955e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 956e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMRemoveInstrAttribute(Instr, Int_val(index), 1<<Int_val(PA)); 957e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 958e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 959e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 96007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--... Operations on call instructions (only) .............................--*/ 96107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 96207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* llvalue -> bool */ 96307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_is_tail_call(LLVMValueRef CallInst) { 96407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_bool(LLVMIsTailCall(CallInst)); 96507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 96607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 96707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* bool -> llvalue -> unit */ 96807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_set_tail_call(value IsTailCall, 96907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMValueRef CallInst) { 97007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMSetTailCall(CallInst, Bool_val(IsTailCall)); 97107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_unit; 97207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 97307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 9742618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--... Operations on phi nodes ............................................--*/ 9752618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 9762618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) -> llvalue -> unit */ 9772618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_add_incoming(value Incoming, LLVMValueRef PhiNode) { 9782618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, 9792618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMValueRef*) &Field(Incoming, 0), 9802618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Incoming, 1), 9812618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 1); 9822618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return Val_unit; 9832618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 9842618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 9852618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* llvalue -> (llvalue * llbasicblock) list */ 9862618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_incoming(LLVMValueRef PhiNode) { 9872618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen unsigned I; 9882618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLparam0(); 9892618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLlocal3(Hd, Tl, Tmp); 9902618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 9912618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen /* Build a tuple list of them. */ 9922618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Val_int(0); 9932618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (I = LLVMCountIncoming(PhiNode); I != 0; ) { 9942618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = alloc(2, 0); 9952618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 0, (value) LLVMGetIncomingValue(PhiNode, --I)); 9962618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 1, (value) LLVMGetIncomingBlock(PhiNode, I)); 9972618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 9982618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tmp = alloc(2, 0); 9992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 0, Hd); 10002618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 1, Tl); 10012618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Tmp; 10022618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 10032618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLreturn(Tl); 10052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 10062618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 100746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 100846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/ 100946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 101046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#define Builder_val(v) (*(LLVMBuilderRef *)(Data_custom_val(v))) 101146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1012a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic void llvm_finalize_builder(value B) { 101346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeBuilder(Builder_val(B)); 101446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 101546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 101646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenstatic struct custom_operations builder_ops = { 101789f6d88db334ba088672ae0753deb7d7b7509bacDuncan Sands (char *) "IRBuilder", 101846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llvm_finalize_builder, 101946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_compare_default, 102046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_hash_default, 102146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_serialize_default, 102246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_deserialize_default 102346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}; 102446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1025a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic value alloc_builder(LLVMBuilderRef B) { 1026a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen value V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); 1027a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen Builder_val(V) = B; 1028a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen return V; 1029a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1030a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 10315371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llbuilder */ 10325371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_builder(LLVMContextRef C) { 10335371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return alloc_builder(LLVMCreateBuilderInContext(C)); 1034a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1035a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 1036033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/* (llbasicblock, llvalue) llpos -> llbuilder -> unit */ 1037033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenCAMLprim value llvm_position_builder(value Pos, value B) { 1038033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen if (Tag_val(Pos) == 0) { 1039033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMBasicBlockRef BB = (LLVMBasicBlockRef) Op_val(Field(Pos, 0)); 1040033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderAtEnd(Builder_val(B), BB); 1041033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } else { 1042033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMValueRef I = (LLVMValueRef) Op_val(Field(Pos, 0)); 1043033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderBefore(Builder_val(B), I); 1044033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } 10458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 10468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 104746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1048dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/* llbuilder -> llbasicblock */ 1049628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insertion_block(value B) { 1050dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen LLVMBasicBlockRef InsertBlock = LLVMGetInsertBlock(Builder_val(B)); 1051dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen if (!InsertBlock) 1052dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen raise_not_found(); 1053dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen return InsertBlock; 1054dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen} 1055dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen 10565c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar/* llvalue -> string -> llbuilder -> unit */ 1057628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim value llvm_insert_into_builder(LLVMValueRef I, value Name, value B) { 1058628b76ecb326d104d2a00c47990c26b22ca9fd42Erick Tryzelaar LLVMInsertIntoBuilderWithName(Builder_val(B), I, String_val(Name)); 10595c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar return Val_unit; 10605c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar} 10615c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar 106246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Metadata ...........................................................--*/ 106346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 106446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 106546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_current_debug_location(value B, LLVMValueRef V) { 106646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), V); 106746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 106846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 106946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 107046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> unit */ 107146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_current_debug_location(value B) { 107246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), NULL); 107346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 107446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 107546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 107646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue option */ 107746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_current_debug_location(value B) { 107846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam0(); 107946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef L; 108046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((L = LLVMGetCurrentDebugLocation(Builder_val(B)))) { 108146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 108246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) L; 108346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 108446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 108546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 108646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 108746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 108846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 108946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_inst_debug_location(value B, LLVMValueRef V) { 109046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetInstDebugLocation(Builder_val(B), V); 109146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 109246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 109346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 109446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 109546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Terminators ........................................................--*/ 109646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 109746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 109846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret_void(value B) { 109946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRetVoid(Builder_val(B)); 110046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 110146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 110246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbuilder -> llvalue */ 110346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret(LLVMValueRef Val, value B) { 110446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRet(Builder_val(B), Val); 110546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 110646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 11076793dd9769047706acf34420586716450344fb66Erick Tryzelaar/* llvalue array -> llbuilder -> llvalue */ 11086793dd9769047706acf34420586716450344fb66Erick TryzelaarCAMLprim LLVMValueRef llvm_build_aggregate_ret(value RetVals, value B) { 11096793dd9769047706acf34420586716450344fb66Erick Tryzelaar return LLVMBuildAggregateRet(Builder_val(B), (LLVMValueRef *) Op_val(RetVals), 11106793dd9769047706acf34420586716450344fb66Erick Tryzelaar Wosize_val(RetVals)); 11116793dd9769047706acf34420586716450344fb66Erick Tryzelaar} 11126793dd9769047706acf34420586716450344fb66Erick Tryzelaar 111346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> llbuilder -> llvalue */ 111446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_br(LLVMBasicBlockRef BB, value B) { 111546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBr(Builder_val(B), BB); 111646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 111746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 111846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> llbasicblock -> llbuilder -> llvalue */ 111946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_cond_br(LLVMValueRef If, 112046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 112146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 112246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 112346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCondBr(Builder_val(B), If, Then, Else); 112446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 112546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 112646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> int -> llbuilder -> llvalue */ 112746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_switch(LLVMValueRef Of, 112846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 112946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value EstimatedCount, 113046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 113146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSwitch(Builder_val(B), Of, Else, Int_val(EstimatedCount)); 113246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 113346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 11341430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar/* llvalue -> llvalue -> llbasicblock -> unit */ 11351430425539fd8004e47ab664c5e5fe5dc23c6d58Erick TryzelaarCAMLprim value llvm_add_case(LLVMValueRef Switch, LLVMValueRef OnVal, 113621491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMBasicBlockRef Dest) { 113721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMAddCase(Switch, OnVal, Dest); 113821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen return Val_unit; 113921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen} 114021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen 114146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 114246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 114346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_nat(LLVMValueRef Fn, value Args, 114446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 114546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Catch, 114646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 114746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInvoke(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Args), 114846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Args), Then, Catch, String_val(Name)); 114946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 115046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 115146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 115246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 115346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_bc(value Args[], int NumArgs) { 115446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return llvm_build_invoke_nat((LLVMValueRef) Args[0], Args[1], 115546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[2], 115646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[3], 115746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Args[4], Args[5]); 115846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 115946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 116046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 116146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_unwind(value B) { 116246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUnwind(Builder_val(B)); 116346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 116446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 116546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 116646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_unreachable(value B) { 116746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUnreachable(Builder_val(B)); 116846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 116946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 117046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Arithmetic .........................................................--*/ 117146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 117246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 117346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_add(LLVMValueRef LHS, LLVMValueRef RHS, 117446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 117546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAdd(Builder_val(B), LHS, RHS, String_val(Name)); 117646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 117746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 117846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1179e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_add(LLVMValueRef LHS, LLVMValueRef RHS, 1180e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1181e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildNSWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1182e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1183e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1184e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 118519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_add(LLVMValueRef LHS, LLVMValueRef RHS, 118619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 118719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 118819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 118919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 119019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1191e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fadd(LLVMValueRef LHS, LLVMValueRef RHS, 1192e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1193e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1194e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1195e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1196e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 119746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sub(LLVMValueRef LHS, LLVMValueRef RHS, 119846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 119946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSub(Builder_val(B), LHS, RHS, String_val(Name)); 120046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 120146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 120246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 120319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 120419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 120519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWSub(Builder_val(B), LHS, RHS, String_val(Name)); 120619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 120719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 120819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 120919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 121019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 121119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWSub(Builder_val(B), LHS, RHS, String_val(Name)); 121219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 121319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 121419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1215e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fsub(LLVMValueRef LHS, LLVMValueRef RHS, 1216e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1217e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFSub(Builder_val(B), LHS, RHS, String_val(Name)); 1218e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1219e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1220e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 122146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_mul(LLVMValueRef LHS, LLVMValueRef RHS, 122246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 122346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildMul(Builder_val(B), LHS, RHS, String_val(Name)); 122446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 122546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 122646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 122719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 122819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 122919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWMul(Builder_val(B), LHS, RHS, String_val(Name)); 123019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 123119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 123219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 123319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 123419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 123519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWMul(Builder_val(B), LHS, RHS, String_val(Name)); 123619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 123719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 123819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1239e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fmul(LLVMValueRef LHS, LLVMValueRef RHS, 1240e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1241e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFMul(Builder_val(B), LHS, RHS, String_val(Name)); 1242e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1243e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1244e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 124546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_udiv(LLVMValueRef LHS, LLVMValueRef RHS, 124646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 124746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUDiv(Builder_val(B), LHS, RHS, String_val(Name)); 124846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 124946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 125046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 125146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 125246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 125346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 125446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 125546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 125646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1257e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_exact_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 1258e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1259e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExactSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 1260e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1261e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1262e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 126346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fdiv(LLVMValueRef LHS, LLVMValueRef RHS, 126446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 126546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFDiv(Builder_val(B), LHS, RHS, String_val(Name)); 126646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 126746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 126846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 126946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_urem(LLVMValueRef LHS, LLVMValueRef RHS, 127046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 127146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildURem(Builder_val(B), LHS, RHS, String_val(Name)); 127246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 127346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 127446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 127546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_srem(LLVMValueRef LHS, LLVMValueRef RHS, 127646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 127746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSRem(Builder_val(B), LHS, RHS, String_val(Name)); 127846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 127946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 128046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 128146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_frem(LLVMValueRef LHS, LLVMValueRef RHS, 128246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 128346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFRem(Builder_val(B), LHS, RHS, String_val(Name)); 128446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 128546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 128646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 128746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shl(LLVMValueRef LHS, LLVMValueRef RHS, 128846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 128946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShl(Builder_val(B), LHS, RHS, String_val(Name)); 129046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 129146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 129246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 129346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_lshr(LLVMValueRef LHS, LLVMValueRef RHS, 129446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 129546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLShr(Builder_val(B), LHS, RHS, String_val(Name)); 129646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 129746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 129846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 129946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ashr(LLVMValueRef LHS, LLVMValueRef RHS, 130046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 130146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAShr(Builder_val(B), LHS, RHS, String_val(Name)); 130246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 130346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 130446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 130546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_and(LLVMValueRef LHS, LLVMValueRef RHS, 130646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 130746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAnd(Builder_val(B), LHS, RHS, String_val(Name)); 130846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 130946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 131146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_or(LLVMValueRef LHS, LLVMValueRef RHS, 131246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 131346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildOr(Builder_val(B), LHS, RHS, String_val(Name)); 131446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 131546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 131746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_xor(LLVMValueRef LHS, LLVMValueRef RHS, 131846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 131946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildXor(Builder_val(B), LHS, RHS, String_val(Name)); 132046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 132146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 132246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 132346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_neg(LLVMValueRef X, 132446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 132546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNeg(Builder_val(B), X, String_val(Name)); 132646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 132746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 132846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 132919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_neg(LLVMValueRef X, 133019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 133119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWNeg(Builder_val(B), X, String_val(Name)); 133219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 133319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 133419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 133519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_neg(LLVMValueRef X, 133619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 133719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWNeg(Builder_val(B), X, String_val(Name)); 133819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 133919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 134019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 134119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_fneg(LLVMValueRef X, 134219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 134319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildFNeg(Builder_val(B), X, String_val(Name)); 134419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 134519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 134619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 134746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_not(LLVMValueRef X, 134846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 134946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNot(Builder_val(B), X, String_val(Name)); 135046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 135146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 135246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Memory .............................................................--*/ 135346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 135446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> string -> llbuilder -> llvalue */ 135546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_alloca(LLVMTypeRef Ty, 135646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 135746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAlloca(Builder_val(B), Ty, String_val(Name)); 135846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 135946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 136046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> llvalue -> string -> llbuilder -> llvalue */ 136146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_array_alloca(LLVMTypeRef Ty, LLVMValueRef Size, 136246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 136346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildArrayAlloca(Builder_val(B), Ty, Size, String_val(Name)); 136446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 136546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 136646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 136746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_load(LLVMValueRef Pointer, 136846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 136946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLoad(Builder_val(B), Pointer, String_val(Name)); 137046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 137146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 137246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llbuilder -> llvalue */ 137346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_store(LLVMValueRef Value, LLVMValueRef Pointer, 137446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 137546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildStore(Builder_val(B), Value, Pointer); 137646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 137746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 137846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 137946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_gep(LLVMValueRef Pointer, value Indices, 138046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 138146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildGEP(Builder_val(B), Pointer, 138246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMValueRef *) Op_val(Indices), Wosize_val(Indices), 138346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 138446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 138546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1386e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 1387e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_in_bounds_gep(LLVMValueRef Pointer, 1388e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Indices, value Name, 1389e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1390e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInBoundsGEP(Builder_val(B), Pointer, 1391e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar (LLVMValueRef *) Op_val(Indices), 1392e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar Wosize_val(Indices), String_val(Name)); 1393e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1394e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1395e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1396e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_struct_gep(LLVMValueRef Pointer, 1397c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner value Index, value Name, 1398e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1399c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner return LLVMBuildStructGEP(Builder_val(B), Pointer, 1400c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner Int_val(Index), String_val(Name)); 1401e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1402e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1403e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1404e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_string(value Str, value Name, value B) { 1405e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalString(Builder_val(B), String_val(Str), 1406e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1407e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1408e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1409e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1410e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_stringptr(value Str, value Name, 1411e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1412e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalStringPtr(Builder_val(B), String_val(Str), 1413e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1414e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1415e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 141646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Casts ..............................................................--*/ 141746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 141846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 141946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_trunc(LLVMValueRef X, LLVMTypeRef Ty, 142046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 142146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildTrunc(Builder_val(B), X, Ty, String_val(Name)); 142246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 142346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 142446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 142546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_zext(LLVMValueRef X, LLVMTypeRef Ty, 142646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 142746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildZExt(Builder_val(B), X, Ty, String_val(Name)); 142846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 142946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 143046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 143146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sext(LLVMValueRef X, LLVMTypeRef Ty, 143246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 143346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSExt(Builder_val(B), X, Ty, String_val(Name)); 143446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 143546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 143646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 143746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptoui(LLVMValueRef X, LLVMTypeRef Ty, 143846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 143946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToUI(Builder_val(B), X, Ty, String_val(Name)); 144046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 144146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 144246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 144346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptosi(LLVMValueRef X, LLVMTypeRef Ty, 144446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 144546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToSI(Builder_val(B), X, Ty, String_val(Name)); 144646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 144746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 144846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 144946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_uitofp(LLVMValueRef X, LLVMTypeRef Ty, 145046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 145146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUIToFP(Builder_val(B), X, Ty, String_val(Name)); 145246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 145346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 145446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 145546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sitofp(LLVMValueRef X, LLVMTypeRef Ty, 145646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 145746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSIToFP(Builder_val(B), X, Ty, String_val(Name)); 145846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 145946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 146046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 146146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptrunc(LLVMValueRef X, LLVMTypeRef Ty, 146246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 146346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPTrunc(Builder_val(B), X, Ty, String_val(Name)); 146446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 146546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 146646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 146746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fpext(LLVMValueRef X, LLVMTypeRef Ty, 146846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 146946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPExt(Builder_val(B), X, Ty, String_val(Name)); 147046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 147146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 147246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 147346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_prttoint(LLVMValueRef X, LLVMTypeRef Ty, 147446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 147546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildPtrToInt(Builder_val(B), X, Ty, String_val(Name)); 147646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 147746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 147846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 147946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_inttoptr(LLVMValueRef X, LLVMTypeRef Ty, 148046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 148146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildIntToPtr(Builder_val(B), X, Ty, String_val(Name)); 148246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 148346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 148446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 148546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 148646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 148746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBitCast(Builder_val(B), X, Ty, String_val(Name)); 148846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 148946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1490e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1491e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_zext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1492e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1493e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildZExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1494e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1495e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1496e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1497e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_sext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1498e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1499e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildSExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1500e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1501e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1502e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1503e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_trunc_or_bitcast(LLVMValueRef X, 1504e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMTypeRef Ty, value Name, 1505e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1506e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildTruncOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1507e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1508e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1509e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1510e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_pointercast(LLVMValueRef X, LLVMTypeRef Ty, 1511e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1512e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPointerCast(Builder_val(B), X, Ty, String_val(Name)); 1513e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1514e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1515e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1516e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_intcast(LLVMValueRef X, LLVMTypeRef Ty, 1517e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1518e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIntCast(Builder_val(B), X, Ty, String_val(Name)); 1519e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1520e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1521e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1522e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fpcast(LLVMValueRef X, LLVMTypeRef Ty, 1523e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1524e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFPCast(Builder_val(B), X, Ty, String_val(Name)); 1525e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1526e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 152746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Comparisons ........................................................--*/ 152846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1529404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 153046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_icmp(value Pred, 153146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 153246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 153346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildICmp(Builder_val(B), Int_val(Pred) + LLVMIntEQ, LHS, RHS, 153446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 153546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 153646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1537404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fcmp(value Pred, 153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 154046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 154146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFCmp(Builder_val(B), Int_val(Pred), LHS, RHS, 154246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 154346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 154446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 154546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Miscellaneous instructions .........................................--*/ 154646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 15472618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) list -> string -> llbuilder -> llvalue */ 15482618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim LLVMValueRef llvm_build_phi(value Incoming, value Name, value B) { 15492618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd, Tl; 15502618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMValueRef FirstValue, PhiNode; 15512618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 15522618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen assert(Incoming != Val_int(0) && "Empty list passed to Llvm.build_phi!"); 15532618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 15542618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = Field(Incoming, 0); 15552618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen FirstValue = (LLVMValueRef) Field(Hd, 0); 15562618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen PhiNode = LLVMBuildPhi(Builder_val(B), LLVMTypeOf(FirstValue), 15572618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen String_val(Name)); 15582618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 15592618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (Tl = Incoming; Tl != Val_int(0); Tl = Field(Tl, 1)) { 15602618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd = Field(Tl, 0); 15612618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, (LLVMValueRef*) &Field(Hd, 0), 15622618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Hd, 1), 1); 15632618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 15642618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 15652618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return PhiNode; 156646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 156746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 156846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 156946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_call(LLVMValueRef Fn, value Params, 157046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 157146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCall(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Params), 157246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Params), String_val(Name)); 157346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 157446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 157546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 157646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_select(LLVMValueRef If, 157746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Then, LLVMValueRef Else, 157846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 157946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSelect(Builder_val(B), If, Then, Else, String_val(Name)); 158046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 158146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 158246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 158346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_va_arg(LLVMValueRef List, LLVMTypeRef Ty, 158446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 158546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildVAArg(Builder_val(B), List, Ty, String_val(Name)); 158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 158846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 158946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_extractelement(LLVMValueRef Vec, 159046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 159146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 159246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildExtractElement(Builder_val(B), Vec, Idx, String_val(Name)); 159346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 159446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 159546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 159646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_insertelement(LLVMValueRef Vec, 159746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Element, 159846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 159946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 160046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInsertElement(Builder_val(B), Vec, Element, Idx, 160146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 160246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 160346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 160446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 160546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shufflevector(LLVMValueRef V1, LLVMValueRef V2, 160646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Mask, 160746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 160846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShuffleVector(Builder_val(B), V1, V2, Mask, String_val(Name)); 160946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 161046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1611e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1612e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_extractvalue(LLVMValueRef Aggregate, 1613e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Idx, value Name, value B) { 1614e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExtractValue(Builder_val(B), Aggregate, Int_val(Idx), 1615e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1616e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1617e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1618e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> int -> string -> llbuilder -> llvalue */ 1619e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_insertvalue(LLVMValueRef Aggregate, 1620e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMValueRef Val, value Idx, 1621e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1622e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInsertValue(Builder_val(B), Aggregate, Val, Int_val(Idx), 1623e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1624e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1625e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1626e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1627e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_null(LLVMValueRef Val, value Name, 1628e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1629e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNull(Builder_val(B), Val, String_val(Name)); 1630e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1631e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1632e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1633e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_not_null(LLVMValueRef Val, value Name, 1634e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1635e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNotNull(Builder_val(B), Val, String_val(Name)); 1636e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1637e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1638e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1639e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_ptrdiff(LLVMValueRef LHS, LLVMValueRef RHS, 1640e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1641e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPtrDiff(Builder_val(B), LHS, RHS, String_val(Name)); 1642e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 16431ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen 16441ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/*===-- Module Providers --------------------------------------------------===*/ 16451ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen 16461ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/* llmoduleprovider -> unit */ 16471ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenCAMLprim value llvm_dispose_module_provider(LLVMModuleProviderRef MP) { 16481ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen LLVMDisposeModuleProvider(MP); 16491ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen return Val_unit; 16501ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen} 1651da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1652da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1653da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/ 1654da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1655da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* string -> llmemorybuffer 1656da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1657da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_of_file(value Path) { 1658da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Path); 1659da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1660da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1661da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1662da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithContentsOfFile(String_val(Path), 1663da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen &MemBuf, &Message)) 1664da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1665da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1666da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLreturn((value) MemBuf); 1667da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1668da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1669da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* unit -> llmemorybuffer 1670da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1671da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim LLVMMemoryBufferRef llvm_memorybuffer_of_stdin(value Unit) { 1672da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1673da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1674da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1675da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithSTDIN(&MemBuf, &Message)) 1676da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1677da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1678da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return MemBuf; 1679da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1680da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1681da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* llmemorybuffer -> unit */ 1682da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_dispose(LLVMMemoryBufferRef MemBuf) { 1683da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMemoryBuffer(MemBuf); 1684da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 1685da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1686da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1687d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/*===-- Pass Managers -----------------------------------------------------===*/ 1688d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1689d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* unit -> [ `Module ] PassManager.t */ 1690d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim LLVMPassManagerRef llvm_passmanager_create(value Unit) { 1691d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return LLVMCreatePassManager(); 1692d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1693d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1694d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llmodule -> [ `Function ] PassManager.t -> bool */ 1695d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_module(LLVMModuleRef M, 1696d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef PM) { 1697d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunPassManager(PM, M)); 1698d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1699d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1700d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1701d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_initialize(LLVMPassManagerRef FPM) { 1702d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMInitializeFunctionPassManager(FPM)); 1703d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1704d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1705d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llvalue -> [ `Function ] PassManager.t -> bool */ 1706d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_function(LLVMValueRef F, 1707d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef FPM) { 1708d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunFunctionPassManager(FPM, F)); 1709d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1710d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1711d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1712d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_finalize(LLVMPassManagerRef FPM) { 1713d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMFinalizeFunctionPassManager(FPM)); 1714d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1715d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1716d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* PassManager.any PassManager.t -> unit */ 1717d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_dispose(LLVMPassManagerRef PM) { 1718d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMDisposePassManager(PM); 1719d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_unit; 1720d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1721