llvm_ocaml.c revision 6b228e506f42972c003599f4873a24910f8a530a
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> 274f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin#include <string.h> 28da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 29da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 30da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* Can't use the recommended caml_named_value mechanism for backwards 31da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen compatibility reasons. This is largely equivalent. */ 32da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenstatic value llvm_ioerror_exn; 33da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 34da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_register_core_exns(value IoError) { 35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_ioerror_exn = Field(IoError, 0); 36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen register_global_root(&llvm_ioerror_exn); 37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 39da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 402e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenstatic void llvm_raise(value Prototype, char *Message) { 41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Prototype); 42da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLlocal1(CamlMessage); 43da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 44da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CamlMessage = copy_string(Message); 45da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMessage(Message); 46da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 47da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise_with_arg(Prototype, CamlMessage); 482e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen abort(); /* NOTREACHED */ 49a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#ifdef CAMLnoreturn 50a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen CAMLnoreturn; /* Silences warnings, but is missing in some versions. */ 51a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#endif 52da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenstatic value alloc_variant(int tag, void *Value) { 554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Iter = alloc_small(1, tag); 564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen Field(Iter, 0) = Val_op(Value); 574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Iter; 584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* Macro to convert the C first/next/last/prev idiom to the Ocaml llpos/ 614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen llrev_pos idiom. */ 624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen#define DEFINE_ITERATORS(camlname, cname, pty, cty, pfun) \ 634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llpos */ \ 644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_begin(pty Mom) { \ 654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty First = LLVMGetFirst##cname(Mom); \ 664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (First) \ 674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, First); \ 684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llpos */ \ 724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_succ(cty Kid) { \ 734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Next = LLVMGetNext##cname(Kid); \ 744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Next) \ 754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Next); \ 76f440691a20eff24cf59ac14e10057234ae182dbeGordon Henriksen return alloc_variant(0, pfun(Kid)); \ 774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llrev_pos */ \ 804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_end(pty Mom) { \ 814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Last = LLVMGetLast##cname(Mom); \ 824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Last) \ 834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Last); \ 844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llrev_pos */ \ 884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_pred(cty Kid) { \ 894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Prev = LLVMGetPrevious##cname(Kid); \ 904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Prev) \ 914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Prev); \ 924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, pfun(Kid)); \ 934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } 944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 965371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/*===-- Contexts ----------------------------------------------------------===*/ 975371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 985371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 995371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_create_context(value Unit) { 1005371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMContextCreate(); 1015371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1035371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> unit */ 1045371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_dispose_context(LLVMContextRef C) { 1055371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar LLVMContextDispose(C); 1065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return Val_unit; 1075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1095371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 1105371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_global_context(value Unit) { 1115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetGlobalContext(); 1125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 11446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> int */ 11546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_mdkind_id(LLVMContextRef C, value Name) { 11646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar unsigned MDKindID = LLVMGetMDKindIDInContext(C, String_val(Name), 11746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar caml_string_length(Name)); 11846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_int(MDKindID); 11946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 12046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 1218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Modules -----------------------------------------------------------===*/ 1228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 123263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar/* llcontext -> string -> llmodule */ 124263d989a719c1864862fc91f59193a6c2b55ca48Erick TryzelaarCAMLprim LLVMModuleRef llvm_create_module(LLVMContextRef C, value ModuleID) { 125263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar return LLVMModuleCreateWithNameInContext(String_val(ModuleID), C); 1268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llmodule -> unit */ 12946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_dispose_module(LLVMModuleRef M) { 13046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeModule(M); 1318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 1328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 134a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 135a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_target_triple(LLVMModuleRef M) { 136a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetTarget(M)); 137a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 138a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 139a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 140a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_target_triple(value Trip, LLVMModuleRef M) { 141a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetTarget(M, String_val(Trip)); 142a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 143a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 144a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 145a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 146a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_data_layout(LLVMModuleRef M) { 147a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetDataLayout(M)); 148a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 149a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 150a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 151a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_data_layout(value Layout, LLVMModuleRef M) { 152a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetDataLayout(M, String_val(Layout)); 153a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 154a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 155a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 156af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen/* llmodule -> unit */ 157af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon HenriksenCAMLprim value llvm_dump_module(LLVMModuleRef M) { 158af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen LLVMDumpModule(M); 159af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen return Val_unit; 160af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen} 161af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen 1620941534c712d77243d9dda5e8c1d927563b4edffChris Lattner/* llmodule -> string -> unit */ 1630941534c712d77243d9dda5e8c1d927563b4edffChris LattnerCAMLprim value llvm_set_module_inline_asm(LLVMModuleRef M, value Asm) { 1640941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMSetModuleInlineAsm(M, String_val(Asm)); 1650941534c712d77243d9dda5e8c1d927563b4edffChris Lattner return Val_unit; 1660941534c712d77243d9dda5e8c1d927563b4edffChris Lattner} 1678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Types -------------------------------------------------------------===*/ 1698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 170404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* lltype -> TypeKind.t */ 17146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_classify_type(LLVMTypeRef Ty) { 17246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetTypeKind(Ty)); 1738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 175ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok EdwinCAMLprim value llvm_type_is_sized(LLVMTypeRef Ty) { 176ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin return Val_bool(LLVMTypeIsSized(Ty)); 177ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin} 178ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin 1795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* lltype -> llcontext */ 1805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_type_context(LLVMTypeRef Ty) { 1815371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetTypeContext(Ty); 1825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on integer types ........................................--*/ 1858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 186b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 187b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i1_type (LLVMContextRef Context) { 188b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt1TypeInContext(Context); 189b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 190b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 191b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 192b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i8_type (LLVMContextRef Context) { 193b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt8TypeInContext(Context); 194b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 195b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 196b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 197b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i16_type (LLVMContextRef Context) { 198b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt16TypeInContext(Context); 199b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 200b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 201b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 202b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i32_type (LLVMContextRef Context) { 203b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt32TypeInContext(Context); 204b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 205b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 206b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 207b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i64_type (LLVMContextRef Context) { 208b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt64TypeInContext(Context); 209b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 2108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 211b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> int -> lltype */ 212b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_integer_type(LLVMContextRef Context, value Width) { 213b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMIntTypeInContext(Context, Int_val(Width)); 2148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 21746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_integer_bitwidth(LLVMTypeRef IntegerTy) { 21846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetIntTypeWidth(IntegerTy)); 2198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on real types ...........................................--*/ 2228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 223b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 224b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_float_type(LLVMContextRef Context) { 225b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFloatTypeInContext(Context); 2268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 228b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 229b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_double_type(LLVMContextRef Context) { 230b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMDoubleTypeInContext(Context); 2318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 233b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 234b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_x86fp80_type(LLVMContextRef Context) { 235b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMX86FP80TypeInContext(Context); 2368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 238b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 239b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_fp128_type(LLVMContextRef Context) { 240b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFP128TypeInContext(Context); 2418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 243b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 244b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_ppc_fp128_type(LLVMContextRef Context) { 245b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMPPCFP128TypeInContext(Context); 2468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 248bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen/* llcontext -> lltype */ 249bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenCAMLprim LLVMTypeRef llvm_x86mmx_type(LLVMContextRef Context) { 250bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen return LLVMX86MMXTypeInContext(Context); 251bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen} 252bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen 2538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on function types .......................................--*/ 2548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 255957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 256957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_function_type(LLVMTypeRef RetTy, value ParamTys) { 25781a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 258957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 0); 259957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 260957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 261957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 262957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_var_arg_function_type(LLVMTypeRef RetTy, 263957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen value ParamTys) { 264957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 265957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 1); 2668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> bool */ 26946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_var_arg(LLVMTypeRef FunTy) { 27046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsFunctionVarArg(FunTy)); 2718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 27446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_param_types(LLVMTypeRef FunTy) { 27546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountParamTypes(FunTy), 0); 27646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetParamTypes(FunTy, (LLVMTypeRef *) Tys); 27746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 2788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on struct types .........................................--*/ 2818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2825371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_struct_type(LLVMContextRef C, value ElementTypes) { 2845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 0); 286957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 287957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 2885371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2895371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_packed_struct_type(LLVMContextRef C, 2905371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementTypes) { 2915371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2925371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 1); 2938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2956b228e506f42972c003599f4873a24910f8a530aTorok Edwin/* llcontext -> string -> lltype */ 2966b228e506f42972c003599f4873a24910f8a530aTorok EdwinCAMLprim LLVMTypeRef llvm_named_struct_type(LLVMContextRef C, 2976b228e506f42972c003599f4873a24910f8a530aTorok Edwin value Name) { 2986b228e506f42972c003599f4873a24910f8a530aTorok Edwin return LLVMStructCreateNamed(C, String_val(Name)); 2996b228e506f42972c003599f4873a24910f8a530aTorok Edwin} 3006b228e506f42972c003599f4873a24910f8a530aTorok Edwin 3016b228e506f42972c003599f4873a24910f8a530aTorok EdwinCAMLprim value llvm_struct_set_body(LLVMTypeRef Ty, 3026b228e506f42972c003599f4873a24910f8a530aTorok Edwin value ElementTypes, 3036b228e506f42972c003599f4873a24910f8a530aTorok Edwin value Packed) { 3046b228e506f42972c003599f4873a24910f8a530aTorok Edwin LLVMStructSetBody(Ty, (LLVMTypeRef *) ElementTypes, 3056b228e506f42972c003599f4873a24910f8a530aTorok Edwin Wosize_val(ElementTypes), Bool_val(Packed)); 3066b228e506f42972c003599f4873a24910f8a530aTorok Edwin return Val_unit; 3076b228e506f42972c003599f4873a24910f8a530aTorok Edwin} 3086b228e506f42972c003599f4873a24910f8a530aTorok Edwin 309c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin/* lltype -> string option */ 310c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok EdwinCAMLprim value llvm_struct_name(LLVMTypeRef Ty) 311c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin{ 31231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLparam0(); 31331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin const char *C = LLVMGetStructName(Ty); 31431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin if (C) { 31531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLlocal1(result); 31631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin result = caml_alloc_small(1, 0); 31731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin Store_field(result, 0, caml_copy_string(C)); 31831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(result); 31931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin } 32031116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(Val_int(0)); 321c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin} 322c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin 3238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 3241940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarCAMLprim value llvm_struct_element_types(LLVMTypeRef StructTy) { 32546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountStructElementTypes(StructTy), 0); 32646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetStructElementTypes(StructTy, (LLVMTypeRef *) Tys); 32746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 3288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 33046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> bool */ 33146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_packed(LLVMTypeRef StructTy) { 33246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsPackedStruct(StructTy)); 3338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3356b228e506f42972c003599f4873a24910f8a530aTorok Edwin/* lltype -> bool */ 3366b228e506f42972c003599f4873a24910f8a530aTorok EdwinCAMLprim value llvm_is_opaque(LLVMTypeRef StructTy) { 3376b228e506f42972c003599f4873a24910f8a530aTorok Edwin return Val_bool(LLVMIsOpaqueStruct(StructTy)); 3386b228e506f42972c003599f4873a24910f8a530aTorok Edwin} 3396b228e506f42972c003599f4873a24910f8a530aTorok Edwin 3408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on array, pointer, and vector types .....................--*/ 3418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 343957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_array_type(LLVMTypeRef ElementTy, value Count) { 34481a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMArrayType(ElementTy, Int_val(Count)); 3458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 34757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> lltype */ 34857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_pointer_type(LLVMTypeRef ElementTy) { 34957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, 0); 35057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 35157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 35257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int -> lltype */ 35357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_qualified_pointer_type(LLVMTypeRef ElementTy, 35457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen value AddressSpace) { 35557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, Int_val(AddressSpace)); 35657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 35757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 3588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 359957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_vector_type(LLVMTypeRef ElementTy, value Count) { 36081a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMVectorType(ElementTy, Int_val(Count)); 3618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 36446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_array_length(LLVMTypeRef ArrayTy) { 36546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetArrayLength(ArrayTy)); 3668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 36957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim value llvm_address_space(LLVMTypeRef PtrTy) { 37057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return Val_int(LLVMGetPointerAddressSpace(PtrTy)); 37157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 37257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 37357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int */ 37446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_vector_size(LLVMTypeRef VectorTy) { 37546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVectorSize(VectorTy)); 3768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on other types ..........................................--*/ 3798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 380b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 381b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_void_type (LLVMContextRef Context) { 382b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMVoidTypeInContext(Context); 383b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 384b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 385b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 386b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_label_type(LLVMContextRef Context) { 387b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMLabelTypeInContext(Context); 388b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 3898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- VALUES ------------------------------------------------------------===*/ 3918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> lltype */ 39346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMTypeRef llvm_type_of(LLVMValueRef Val) { 39446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMTypeOf(Val); 3958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3973dd16741864302af14b31b7f75375c09d8544a35Torok Edwin/* keep in sync with ValueKind.t */ 3983dd16741864302af14b31b7f75375c09d8544a35Torok Edwinenum ValueKind { 3993dd16741864302af14b31b7f75375c09d8544a35Torok Edwin NullValue=0, 4003dd16741864302af14b31b7f75375c09d8544a35Torok Edwin Argument, 4013dd16741864302af14b31b7f75375c09d8544a35Torok Edwin BasicBlock, 4023dd16741864302af14b31b7f75375c09d8544a35Torok Edwin InlineAsm, 4033dd16741864302af14b31b7f75375c09d8544a35Torok Edwin MDNode, 4043dd16741864302af14b31b7f75375c09d8544a35Torok Edwin MDString, 4053dd16741864302af14b31b7f75375c09d8544a35Torok Edwin BlockAddress, 4063dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantAggregateZero, 4073dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantArray, 4083dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantExpr, 4093dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantFP, 4103dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantInt, 4113dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantPointerNull, 4123dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantStruct, 4133dd16741864302af14b31b7f75375c09d8544a35Torok Edwin ConstantVector, 4143dd16741864302af14b31b7f75375c09d8544a35Torok Edwin Function, 4153dd16741864302af14b31b7f75375c09d8544a35Torok Edwin GlobalAlias, 4163dd16741864302af14b31b7f75375c09d8544a35Torok Edwin GlobalVariable, 4173dd16741864302af14b31b7f75375c09d8544a35Torok Edwin UndefValue, 4183dd16741864302af14b31b7f75375c09d8544a35Torok Edwin Instruction 4193dd16741864302af14b31b7f75375c09d8544a35Torok Edwin}; 4203dd16741864302af14b31b7f75375c09d8544a35Torok Edwin 4213dd16741864302af14b31b7f75375c09d8544a35Torok Edwin/* llvalue -> ValueKind.t */ 4223dd16741864302af14b31b7f75375c09d8544a35Torok Edwin#define DEFINE_CASE(Val, Kind) \ 4233dd16741864302af14b31b7f75375c09d8544a35Torok Edwin do {if (LLVMIsA##Kind(Val)) CAMLreturn(Val_int(Kind));} while(0) 4243dd16741864302af14b31b7f75375c09d8544a35Torok Edwin 4253dd16741864302af14b31b7f75375c09d8544a35Torok EdwinCAMLprim value llvm_classify_value(LLVMValueRef Val) { 4263dd16741864302af14b31b7f75375c09d8544a35Torok Edwin CAMLparam0(); 4273dd16741864302af14b31b7f75375c09d8544a35Torok Edwin if (!Val) 4283dd16741864302af14b31b7f75375c09d8544a35Torok Edwin CAMLreturn(Val_int(NullValue)); 4293dd16741864302af14b31b7f75375c09d8544a35Torok Edwin if (LLVMIsAConstant(Val)) { 4303dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, BlockAddress); 4313dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantAggregateZero); 4323dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantArray); 4333dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantExpr); 4343dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantFP); 4353dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantInt); 4363dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantPointerNull); 4373dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantStruct); 4383dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, ConstantVector); 4393dd16741864302af14b31b7f75375c09d8544a35Torok Edwin } 4403dd16741864302af14b31b7f75375c09d8544a35Torok Edwin if (LLVMIsAInstruction(Val)) { 4413dd16741864302af14b31b7f75375c09d8544a35Torok Edwin CAMLlocal1(result); 4423dd16741864302af14b31b7f75375c09d8544a35Torok Edwin result = caml_alloc_small(1, 0); 4433dd16741864302af14b31b7f75375c09d8544a35Torok Edwin Store_field(result, 0, Val_int(LLVMGetInstructionOpcode(Val))); 4443dd16741864302af14b31b7f75375c09d8544a35Torok Edwin CAMLreturn(result); 4453dd16741864302af14b31b7f75375c09d8544a35Torok Edwin } 4463dd16741864302af14b31b7f75375c09d8544a35Torok Edwin if (LLVMIsAGlobalValue(Val)) { 4473dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, Function); 4483dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, GlobalAlias); 4493dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, GlobalVariable); 4503dd16741864302af14b31b7f75375c09d8544a35Torok Edwin } 4513dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, Argument); 4523dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, BasicBlock); 4533dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, InlineAsm); 4543dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, MDNode); 4553dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, MDString); 4563dd16741864302af14b31b7f75375c09d8544a35Torok Edwin DEFINE_CASE(Val, UndefValue); 4573dd16741864302af14b31b7f75375c09d8544a35Torok Edwin failwith("Unknown Value class"); 4583dd16741864302af14b31b7f75375c09d8544a35Torok Edwin} 4593dd16741864302af14b31b7f75375c09d8544a35Torok Edwin 4608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 46146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_name(LLVMValueRef Val) { 46246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetValueName(Val)); 4638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 46646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_value_name(value Name, LLVMValueRef Val) { 46746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetValueName(Val, String_val(Name)); 4688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 4698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 47188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen/* llvalue -> unit */ 47288cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon HenriksenCAMLprim value llvm_dump_value(LLVMValueRef Val) { 47388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen LLVMDumpValue(Val); 47488cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen return Val_unit; 47588cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen} 47688cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen 477b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar/*--... Operations on users ................................................--*/ 478b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar 479b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar/* llvalue -> int -> llvalue */ 480b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick TryzelaarCAMLprim LLVMValueRef llvm_operand(LLVMValueRef V, value I) { 481b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar return LLVMGetOperand(V, Int_val(I)); 482b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar} 483b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar 484f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar/* llvalue -> int -> llvalue -> unit */ 485f7af931930dfab74b8a72b195e53df34b4ea2480Erick TryzelaarCAMLprim value llvm_set_operand(LLVMValueRef U, value I, LLVMValueRef V) { 486f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar LLVMSetOperand(U, Int_val(I), V); 487f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar return Val_unit; 488f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar} 489f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar 490f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar/* llvalue -> int */ 491f7af931930dfab74b8a72b195e53df34b4ea2480Erick TryzelaarCAMLprim value llvm_num_operands(LLVMValueRef V) { 492f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar return Val_int(LLVMGetNumOperands(V)); 493f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar} 494f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar 4958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on constants of (mostly) any type .......................--*/ 4968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 4978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 49846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_constant(LLVMValueRef Val) { 49946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsConstant(Val)); 500344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 501344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 502344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 50346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_null(LLVMValueRef Val) { 50446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsNull(Val)); 5058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 507344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 50846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_undef(LLVMValueRef Val) { 50946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsUndef(Val)); 510344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 511344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 5126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin/* llvalue -> Opcode.t */ 5136563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinCAMLprim value llvm_constexpr_get_opcode(LLVMValueRef Val) { 5146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin return LLVMIsAConstantExpr(Val) ? 5156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin Val_int(LLVMGetConstOpcode(Val)) : Val_int(0); 5166563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin} 5176563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin 51846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on instructions .........................................--*/ 51946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 52046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> bool */ 52146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_has_metadata(LLVMValueRef Val) { 52246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_bool(LLVMHasMetadata(Val)); 52346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 52446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 52546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue option */ 52646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_metadata(LLVMValueRef Val, value MDKindID) { 52746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam1(MDKindID); 52846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD; 52946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((MD = LLVMGetMetadata(Val, Int_val(MDKindID)))) { 53046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 53146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) MD; 53246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 53346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 53446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 53546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 53646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 53746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue -> unit */ 53846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_metadata(LLVMValueRef Val, value MDKindID, 53946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD) { 54046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), MD); 54146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 54246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 54346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 54446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> unit */ 54546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_metadata(LLVMValueRef Val, value MDKindID) { 54646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), NULL); 54746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 54846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 54946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 55046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 55146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on metadata .............................................--*/ 55246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 55346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> llvalue */ 55446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdstring(LLVMContextRef C, value S) { 55546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDStringInContext(C, String_val(S), caml_string_length(S)); 55646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 55746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 55846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 55946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdnode(LLVMContextRef C, value ElementVals) { 56046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDNodeInContext(C, (LLVMValueRef*) Op_val(ElementVals), 56146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Wosize_val(ElementVals)); 56246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 56346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 5644f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin/* llvalue -> string option */ 5654f661ab0fb87f97c4a12912249c3c366df882102Torok EdwinCAMLprim value llvm_get_mdstring(LLVMValueRef V) { 56631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLparam0(); 56731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin const char *S; 56831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin unsigned Len; 56931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin 57031116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin if ((S = LLVMGetMDString(V, &Len))) { 57131116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLlocal2(Option, Str); 57231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin 57331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin Str = caml_alloc_string(Len); 57431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin memcpy(String_val(Str), S, Len); 57531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin Option = alloc(1,0); 57631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin Store_field(Option, 0, Str); 57731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(Option); 57831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin } 57931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(Val_int(0)); 5804f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin} 5814f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin 5824f661ab0fb87f97c4a12912249c3c366df882102Torok EdwinCAMLprim value llvm_get_namedmd(LLVMModuleRef M, value name) 5834f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin{ 5844f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin CAMLparam1(name); 5854f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin CAMLlocal1(Nodes); 5864f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin Nodes = alloc(LLVMGetNamedMetadataNumOperands(M, String_val(name)), 0); 5874f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin LLVMGetNamedMetadataOperands(M, String_val(name), (LLVMValueRef *) Nodes); 5884f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin CAMLreturn(Nodes); 5894f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin} 5908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on scalar constants .....................................--*/ 5918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 592e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen/* lltype -> int -> llvalue */ 593e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_int(LLVMTypeRef IntTy, value N) { 594e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, (long long) Int_val(N), 1); 5958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 597344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* lltype -> Int64.t -> bool -> llvalue */ 598e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_of_int64(LLVMTypeRef IntTy, value N, 599e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen value SExt) { 600e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, Int64_val(N), Bool_val(SExt)); 601344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 602344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 6036563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin/* llvalue -> Int64.t */ 6046563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinCAMLprim value llvm_int64_of_const(LLVMValueRef Const) 6056563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin{ 6066563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin CAMLparam0(); 6076563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin if (LLVMIsAConstantInt(Const) && 6086563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin LLVMGetIntTypeWidth(LLVMTypeOf(Const)) <= 64) { 6096563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin value Option = alloc(1, 0); 6106563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin Field(Option, 0) = caml_copy_int64(LLVMConstIntGetSExtValue(Const)); 6116563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin CAMLreturn(Option); 6126563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin } 6136563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin CAMLreturn(Val_int(0)); 6146563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin} 6156563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin 61645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> int -> llvalue */ 61745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_int_of_string(LLVMTypeRef IntTy, value S, 61845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar value Radix) { 61945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstIntOfStringAndSize(IntTy, String_val(S), caml_string_length(S), 62045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar Int_val(Radix)); 62145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 62245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 6238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> float -> llvalue */ 624e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_float(LLVMTypeRef RealTy, value N) { 625e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstReal(RealTy, Double_val(N)); 6268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 62845d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> llvalue */ 62945d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_float_of_string(LLVMTypeRef RealTy, value S) { 63045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstRealOfStringAndSize(RealTy, String_val(S), 63145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar caml_string_length(S)); 63245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 63345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 6348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on composite constants ..................................--*/ 6358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 636b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 637b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_string(LLVMContextRef Context, value Str, 638b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 639b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 640b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 1); 641e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 642e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 643b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 644b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_stringz(LLVMContextRef Context, value Str, 645b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 646b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 647b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 0); 6488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> llvalue array -> llvalue */ 651e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_array(LLVMTypeRef ElementTy, 65246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value ElementVals) { 653e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstArray(ElementTy, (LLVMValueRef*) Op_val(ElementVals), 654e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 655e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 656e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 6575371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 6585371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_struct(LLVMContextRef C, value ElementVals) { 6595371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 6605371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 0); 6618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6636b228e506f42972c003599f4873a24910f8a530aTorok Edwin/* lltype -> llvalue array -> llvalue */ 6646b228e506f42972c003599f4873a24910f8a530aTorok EdwinCAMLprim LLVMValueRef llvm_const_named_struct(LLVMTypeRef Ty, value ElementVals) { 6656b228e506f42972c003599f4873a24910f8a530aTorok Edwin return LLVMConstNamedStruct(Ty, (LLVMValueRef *) Op_val(ElementVals), Wosize_val(ElementVals)); 6666b228e506f42972c003599f4873a24910f8a530aTorok Edwin} 6676b228e506f42972c003599f4873a24910f8a530aTorok Edwin 6685371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 6695371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_packed_struct(LLVMContextRef C, 6705371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementVals) { 6715371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 6725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 1); 6738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue array -> llvalue */ 676e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_vector(value ElementVals) { 677e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstVector((LLVMValueRef*) Op_val(ElementVals), 678e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 6794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 6804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 6814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--... Constant expressions ...............................................--*/ 6824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 683404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> llvalue */ 6844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_icmp(value Pred, 6854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 6864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 6874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstICmp(Int_val(Pred) + LLVMIntEQ, LHSConstant, RHSConstant); 6884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 6894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 690404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> llvalue */ 6914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_fcmp(value Pred, 6924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 6934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 6944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstFCmp(Int_val(Pred), LHSConstant, RHSConstant); 6954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 6964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 6974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/* llvalue -> llvalue array -> llvalue */ 6984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_gep(LLVMValueRef ConstantVal, value Indices) { 6994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 7004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen Wosize_val(Indices)); 7018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7031b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue array -> llvalue */ 7041b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_in_bounds_gep(LLVMValueRef ConstantVal, 7051b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 7061b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar return LLVMConstInBoundsGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 7071b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar Wosize_val(Indices)); 7081b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 7091b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7101b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> int array -> llvalue */ 7111b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_extractvalue(LLVMValueRef Aggregate, 7121b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 7131b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 7141b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 7151b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 7161b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 7171b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7181b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 7191b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 7201b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 7211b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 7221b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7231b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstExtractValue(Aggregate, idxs, size); 7241b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 7251b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 7261b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 7271b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7281b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue -> int array -> llvalue */ 7291b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_insertvalue(LLVMValueRef Aggregate, 7301b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef Val, value Indices) { 7311b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 7321b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 7331b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 7341b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 7351b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7361b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 7371b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 7381b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 7391b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 7401b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 7411b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstInsertValue(Aggregate, Val, idxs, size); 7421b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 7431b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 7441b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 7451b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 746ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar/* lltype -> string -> string -> bool -> bool -> llvalue */ 747ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick TryzelaarCAMLprim LLVMValueRef llvm_const_inline_asm(LLVMTypeRef Ty, value Asm, 748ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar value Constraints, value HasSideEffects, 749ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar value IsAlignStack) { 750ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar return LLVMConstInlineAsm(Ty, String_val(Asm), String_val(Constraints), 751ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar Bool_val(HasSideEffects), Bool_val(IsAlignStack)); 752ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar} 753ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar 7548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables, functions, and aliases (globals) ...--*/ 7558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 75746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_declaration(LLVMValueRef Global) { 75846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsDeclaration(Global)); 7598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 761404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Linkage.t */ 76246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_linkage(LLVMValueRef Global) { 76346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetLinkage(Global)); 7648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 766404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Linkage.t -> llvalue -> unit */ 76746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_linkage(value Linkage, LLVMValueRef Global) { 76846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetLinkage(Global, Int_val(Linkage)); 7698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7708ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 77346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_section(LLVMValueRef Global) { 77446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetSection(Global)); 7758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 77846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_section(value Section, LLVMValueRef Global) { 77946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetSection(Global, String_val(Section)); 7808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7828ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 783404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Visibility.t */ 78446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_visibility(LLVMValueRef Global) { 78546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVisibility(Global)); 7868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 788404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Visibility.t -> llvalue -> unit */ 78946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_visibility(value Viz, LLVMValueRef Global) { 79046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetVisibility(Global, Int_val(Viz)); 7918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7938ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> int */ 79546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_alignment(LLVMValueRef Global) { 79646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetAlignment(Global)); 7978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7998ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* int -> llvalue -> unit */ 80046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_alignment(value Bytes, LLVMValueRef Global) { 80146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetAlignment(Global, Int_val(Bytes)); 8028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 8038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 8048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 805705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/*--... Operations on uses .................................................--*/ 806705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 807705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* llvalue -> lluse option */ 808705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim value llvm_use_begin(LLVMValueRef Val) { 809705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLparam0(); 810705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar LLVMUseRef First; 811705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar if ((First = LLVMGetFirstUse(Val))) { 812705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar value Option = alloc(1, 0); 813705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar Field(Option, 0) = (value) First; 814705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Option); 815705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar } 816705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Val_int(0)); 817705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 818705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 819705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> lluse option */ 820705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim value llvm_use_succ(LLVMUseRef U) { 821705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLparam0(); 822705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar LLVMUseRef Next; 823705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar if ((Next = LLVMGetNextUse(U))) { 824705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar value Option = alloc(1, 0); 825705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar Field(Option, 0) = (value) Next; 826705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Option); 827705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar } 828705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Val_int(0)); 829705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 830705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 831705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> llvalue */ 832705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim LLVMValueRef llvm_user(LLVMUseRef UR) { 833705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar return LLVMGetUser(UR); 834705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 835705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 836705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> llvalue */ 837705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim LLVMValueRef llvm_used_value(LLVMUseRef UR) { 838705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar return LLVMGetUsedValue(UR); 839705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 840705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 8418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables .....................................--*/ 8428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 8434733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(global, Global, LLVMModuleRef, LLVMValueRef, 8444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 8454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 8468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> string -> llmodule -> llvalue */ 84746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_global(LLVMTypeRef Ty, value Name, 84846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 8496d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 8506d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 8516d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty) 85257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(GlobalVar, LLVMPointerType(Ty, 0)); 8536d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return GlobalVar; 8546d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 85546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddGlobal(M, Ty, String_val(Name)); 8568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 8578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 8588e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar/* lltype -> string -> int -> llmodule -> llvalue */ 8598e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarCAMLprim LLVMValueRef llvm_declare_qualified_global(LLVMTypeRef Ty, value Name, 8608e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar value AddressSpace, 8618e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMModuleRef M) { 8628e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef GlobalVar; 8638e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 8648e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty) 8658e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return LLVMConstBitCast(GlobalVar, 8668e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMPointerType(Ty, Int_val(AddressSpace))); 8678e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return GlobalVar; 8688e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar } 8698e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return LLVMAddGlobal(M, Ty, String_val(Name)); 8708e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar} 8718e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar 8726d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 8736d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_global(value Name, LLVMModuleRef M) { 8746d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 8756d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 8766d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 87775e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 8786d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) GlobalVar; 8796d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 8806d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 8816d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 8826d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 8836d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 8848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> llmodule -> llvalue */ 88546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_global(value Name, LLVMValueRef Initializer, 88646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 88746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar = LLVMAddGlobal(M, LLVMTypeOf(Initializer), 8888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen String_val(Name)); 8898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen LLVMSetInitializer(GlobalVar, Initializer); 89046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return GlobalVar; 8918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 8928ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 8938e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar/* string -> llvalue -> int -> llmodule -> llvalue */ 8948e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarCAMLprim LLVMValueRef llvm_define_qualified_global(value Name, 8958e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef Initializer, 8968e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar value AddressSpace, 8978e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMModuleRef M) { 8988e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef GlobalVar = LLVMAddGlobalInAddressSpace(M, 8998e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMTypeOf(Initializer), 9008e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar String_val(Name), 9018e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar Int_val(AddressSpace)); 9028e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMSetInitializer(GlobalVar, Initializer); 9038e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return GlobalVar; 9048e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar} 9058e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar 9068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 90746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_global(LLVMValueRef GlobalVar) { 90846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteGlobal(GlobalVar); 9098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 9108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 9118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 9128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> llvalue -> unit */ 91346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_initializer(LLVMValueRef ConstantVal, 91446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 91546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, ConstantVal); 9168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 9178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 9188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 9198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 92046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_remove_initializer(LLVMValueRef GlobalVar) { 92146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, NULL); 9228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 9238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 9248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 9258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 92646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_thread_local(LLVMValueRef GlobalVar) { 92746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsThreadLocal(GlobalVar)); 9288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 9298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 9308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* bool -> llvalue -> unit */ 93146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_thread_local(value IsThreadLocal, 93246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 93346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetThreadLocal(GlobalVar, Bool_val(IsThreadLocal)); 93446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 93546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 93646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 937c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* llvalue -> bool */ 938c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_is_global_constant(LLVMValueRef GlobalVar) { 939c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_bool(LLVMIsGlobalConstant(GlobalVar)); 940c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 941c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 942c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* bool -> llvalue -> unit */ 943c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_set_global_constant(value Flag, LLVMValueRef GlobalVar) { 944c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen LLVMSetGlobalConstant(GlobalVar, Bool_val(Flag)); 945c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_unit; 946c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 947c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 9486ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar/*--... Operations on aliases ..............................................--*/ 9496ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar 9506ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick TryzelaarCAMLprim LLVMValueRef llvm_add_alias(LLVMModuleRef M, LLVMTypeRef Ty, 9516ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar LLVMValueRef Aliasee, value Name) { 9526ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar return LLVMAddAlias(M, Ty, Aliasee, String_val(Name)); 9536ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar} 9546ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar 95546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on functions ............................................--*/ 95646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 9574733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(function, Function, LLVMModuleRef, LLVMValueRef, 9584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 9594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 96046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 96146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_function(value Name, LLVMTypeRef Ty, 96246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 9636d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 9646d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 9656d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(Fn)) != Ty) 96657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(Fn, LLVMPointerType(Ty, 0)); 9676d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return Fn; 9686d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 96946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddFunction(M, String_val(Name), Ty); 97046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 97146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 9726d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 9736d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_function(value Name, LLVMModuleRef M) { 9746d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 9756d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 9766d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 97775e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 9786d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) Fn; 9796d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 9806d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 9816d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 9826d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 9836d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 98446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 98546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_function(value Name, LLVMTypeRef Ty, 98646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 98746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Fn = LLVMAddFunction(M, String_val(Name), Ty); 988b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMAppendBasicBlockInContext(LLVMGetTypeContext(Ty), Fn, "entry"); 98946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Fn; 99046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 99146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 99246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> unit */ 99346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_function(LLVMValueRef Fn) { 99446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteFunction(Fn); 99546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 99646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 99746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 99846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 99946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_intrinsic(LLVMValueRef Fn) { 100046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMGetIntrinsicID(Fn)); 100146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 100246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 100346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> int */ 100446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_function_call_conv(LLVMValueRef Fn) { 100546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetFunctionCallConv(Fn)); 100646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 100746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 100846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* int -> llvalue -> unit */ 100946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_function_call_conv(value Id, LLVMValueRef Fn) { 101046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetFunctionCallConv(Fn, Int_val(Id)); 101146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 101246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 101346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 101480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* llvalue -> string option */ 10155eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_gc(LLVMValueRef Fn) { 10165eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen const char *GC; 101780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLparam0(); 101880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLlocal2(Name, Option); 101980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 10205eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen if ((GC = LLVMGetGC(Fn))) { 10215eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen Name = copy_string(GC); 102280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 102380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Option = alloc(1, 0); 102480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Field(Option, 0) = Name; 102580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Option); 102680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } else { 102780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Val_int(0)); 102880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } 102980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 103080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 103180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* string option -> llvalue -> unit */ 10325eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_set_gc(value GC, LLVMValueRef Fn) { 10335eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen LLVMSetGC(Fn, GC == Val_int(0)? 0 : String_val(Field(GC, 0))); 103480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen return Val_unit; 103580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 103680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 1037e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 1038e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_function_attr(LLVMValueRef Arg, value PA) { 10390941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddFunctionAttr(Arg, Int_val(PA)); 1040e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1041e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1042e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 1043e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 1044e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_function_attr(LLVMValueRef Arg, value PA) { 10450941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveFunctionAttr(Arg, Int_val(PA)); 1046e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1047e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 10484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/*--... Operations on parameters ...........................................--*/ 10494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 10504733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(param, Param, LLVMValueRef, LLVMValueRef, LLVMGetParamParent) 10514733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 10524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* llvalue -> int -> llvalue */ 10534733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenCAMLprim LLVMValueRef llvm_param(LLVMValueRef Fn, value Index) { 10544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return LLVMGetParam(Fn, Int_val(Index)); 10554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 10564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 1057e12741055015ef5b98e1225834fcece0a3f04029Erick Tryzelaar/* llvalue -> llvalue */ 1058e12741055015ef5b98e1225834fcece0a3f04029Erick TryzelaarCAMLprim value llvm_params(LLVMValueRef Fn) { 10594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Params = alloc(LLVMCountParams(Fn), 0); 10604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetParams(Fn, (LLVMValueRef *) Op_val(Params)); 10614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Params; 10624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 10634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 1064e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 1065e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_param_attr(LLVMValueRef Arg, value PA) { 10660941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddAttribute(Arg, Int_val(PA)); 1067e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1068e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1069e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 1070e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 1071e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_param_attr(LLVMValueRef Arg, value PA) { 10720941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveAttribute(Arg, Int_val(PA)); 1073e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1074e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1075e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 1076e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> unit */ 1077e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_set_param_alignment(LLVMValueRef Arg, value align) { 1078e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMSetParamAlignment(Arg, Int_val(align)); 1079e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1080e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1081e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 108246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on basic blocks .........................................--*/ 108346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 10844733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS( 10854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen block, BasicBlock, LLVMValueRef, LLVMBasicBlockRef, LLVMGetBasicBlockParent) 10864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 108746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock array */ 108846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_basic_blocks(LLVMValueRef Fn) { 108946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value MLArray = alloc(LLVMCountBasicBlocks(Fn), 0); 109046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetBasicBlocks(Fn, (LLVMBasicBlockRef *) Op_val(MLArray)); 109146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return MLArray; 109246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 109346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 109446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> unit */ 109546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_block(LLVMBasicBlockRef BB) { 109646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteBasicBlock(BB); 109746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 109846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 109946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 110046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llvalue -> llbasicblock */ 1101b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_append_block(LLVMContextRef Context, value Name, 1102b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMValueRef Fn) { 1103b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMAppendBasicBlockInContext(Context, Fn, String_val(Name)); 110446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 110546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 110646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llbasicblock -> llbasicblock */ 1107b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insert_block(LLVMContextRef Context, value Name, 1108b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMBasicBlockRef BB) { 1109b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInsertBasicBlockInContext(Context, BB, String_val(Name)); 111046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 111146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 111246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 111346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_is_block(LLVMValueRef Val) { 111446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMValueIsBasicBlock(Val)); 111546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 111646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1117033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/*--... Operations on instructions .........................................--*/ 1118033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 1119033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenDEFINE_ITERATORS(instr, Instruction, LLVMBasicBlockRef, LLVMValueRef, 1120033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMGetInstructionParent) 1121033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 11226563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin/* llvalue -> Opcode.t */ 11236563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinCAMLprim value llvm_instr_get_opcode(LLVMValueRef Inst) { 11243dd16741864302af14b31b7f75375c09d8544a35Torok Edwin LLVMOpcode o; 11253dd16741864302af14b31b7f75375c09d8544a35Torok Edwin if (!LLVMIsAInstruction(Inst)) 11263dd16741864302af14b31b7f75375c09d8544a35Torok Edwin failwith("Not an instruction"); 11273dd16741864302af14b31b7f75375c09d8544a35Torok Edwin o = LLVMGetInstructionOpcode(Inst); 11286563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin assert (o <= LLVMUnwind ); 11296563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin return Val_int(o); 11306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin} 1131033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 11324917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin/* llvalue -> ICmp.t */ 11334917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok EdwinCAMLprim value llvm_instr_icmp_predicate(LLVMValueRef Val) { 113431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLparam0(); 113531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin int x = LLVMGetICmpPredicate(Val); 113631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin if (x) { 113731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin value Option = alloc(1, 0); 113831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin Field(Option, 0) = Val_int(x - LLVMIntEQ); 113931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(Option); 114031116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin } 114131116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin CAMLreturn(Val_int(0)); 11424917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin} 11434917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin 11444917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin 1145cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/*--... Operations on call sites ...........................................--*/ 1146cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 1147cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* llvalue -> int */ 1148cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_instruction_call_conv(LLVMValueRef Inst) { 1149cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_int(LLVMGetInstructionCallConv(Inst)); 1150cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 1151cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 1152cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* int -> llvalue -> unit */ 1153cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_set_instruction_call_conv(value CC, LLVMValueRef Inst) { 1154cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen LLVMSetInstructionCallConv(Inst, Int_val(CC)); 1155cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_unit; 1156cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 1157cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 1158e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 1159e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_instruction_param_attr(LLVMValueRef Instr, 1160e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 1161e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 11620941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddInstrAttribute(Instr, Int_val(index), Int_val(PA)); 1163e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1164e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1165e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 1166e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 1167e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_instruction_param_attr(LLVMValueRef Instr, 1168e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 1169e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 11700941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveInstrAttribute(Instr, Int_val(index), Int_val(PA)); 1171e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 1172e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1173e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 117407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--... Operations on call instructions (only) .............................--*/ 117507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 117607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* llvalue -> bool */ 117707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_is_tail_call(LLVMValueRef CallInst) { 117807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_bool(LLVMIsTailCall(CallInst)); 117907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 118007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 118107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* bool -> llvalue -> unit */ 118207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_set_tail_call(value IsTailCall, 118307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMValueRef CallInst) { 118407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMSetTailCall(CallInst, Bool_val(IsTailCall)); 118507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_unit; 118607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 118707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 11882618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--... Operations on phi nodes ............................................--*/ 11892618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 11902618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) -> llvalue -> unit */ 11912618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_add_incoming(value Incoming, LLVMValueRef PhiNode) { 11922618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, 11932618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMValueRef*) &Field(Incoming, 0), 11942618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Incoming, 1), 11952618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 1); 11962618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return Val_unit; 11972618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 11982618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 11992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* llvalue -> (llvalue * llbasicblock) list */ 12002618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_incoming(LLVMValueRef PhiNode) { 12012618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen unsigned I; 12022618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLparam0(); 12032618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLlocal3(Hd, Tl, Tmp); 12042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 12052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen /* Build a tuple list of them. */ 12062618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Val_int(0); 12072618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (I = LLVMCountIncoming(PhiNode); I != 0; ) { 12082618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = alloc(2, 0); 12092618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 0, (value) LLVMGetIncomingValue(PhiNode, --I)); 12102618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 1, (value) LLVMGetIncomingBlock(PhiNode, I)); 12112618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 12122618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tmp = alloc(2, 0); 12132618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 0, Hd); 12142618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 1, Tl); 12152618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Tmp; 12162618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 12172618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 12182618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLreturn(Tl); 12192618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 12202618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 122146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 122246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/ 122346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 122446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#define Builder_val(v) (*(LLVMBuilderRef *)(Data_custom_val(v))) 122546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1226a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic void llvm_finalize_builder(value B) { 122746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeBuilder(Builder_val(B)); 122846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 122946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 123046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenstatic struct custom_operations builder_ops = { 123189f6d88db334ba088672ae0753deb7d7b7509bacDuncan Sands (char *) "IRBuilder", 123246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llvm_finalize_builder, 123346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_compare_default, 123446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_hash_default, 123546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_serialize_default, 123646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_deserialize_default 123746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}; 123846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1239a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic value alloc_builder(LLVMBuilderRef B) { 1240a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen value V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); 1241a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen Builder_val(V) = B; 1242a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen return V; 1243a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1244a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 12455371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llbuilder */ 12465371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_builder(LLVMContextRef C) { 12475371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return alloc_builder(LLVMCreateBuilderInContext(C)); 1248a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1249a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 1250033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/* (llbasicblock, llvalue) llpos -> llbuilder -> unit */ 1251033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenCAMLprim value llvm_position_builder(value Pos, value B) { 1252033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen if (Tag_val(Pos) == 0) { 1253033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMBasicBlockRef BB = (LLVMBasicBlockRef) Op_val(Field(Pos, 0)); 1254033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderAtEnd(Builder_val(B), BB); 1255033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } else { 1256033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMValueRef I = (LLVMValueRef) Op_val(Field(Pos, 0)); 1257033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderBefore(Builder_val(B), I); 1258033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } 12598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 12608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 126146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1262dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/* llbuilder -> llbasicblock */ 1263628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insertion_block(value B) { 1264dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen LLVMBasicBlockRef InsertBlock = LLVMGetInsertBlock(Builder_val(B)); 1265dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen if (!InsertBlock) 1266dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen raise_not_found(); 1267dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen return InsertBlock; 1268dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen} 1269dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen 12705c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar/* llvalue -> string -> llbuilder -> unit */ 1271628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim value llvm_insert_into_builder(LLVMValueRef I, value Name, value B) { 1272628b76ecb326d104d2a00c47990c26b22ca9fd42Erick Tryzelaar LLVMInsertIntoBuilderWithName(Builder_val(B), I, String_val(Name)); 12735c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar return Val_unit; 12745c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar} 12755c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar 127646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Metadata ...........................................................--*/ 127746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 127846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 127946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_current_debug_location(value B, LLVMValueRef V) { 128046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), V); 128146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 128246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 128346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 128446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> unit */ 128546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_current_debug_location(value B) { 128646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), NULL); 128746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 128846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 128946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 129046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue option */ 129146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_current_debug_location(value B) { 129246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam0(); 129346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef L; 129446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((L = LLVMGetCurrentDebugLocation(Builder_val(B)))) { 129546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 129646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) L; 129746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 129846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 129946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 130046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 130146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 130246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 130346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_inst_debug_location(value B, LLVMValueRef V) { 130446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetInstDebugLocation(Builder_val(B), V); 130546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 130646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 130746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 130846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 130946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Terminators ........................................................--*/ 131046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 131246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret_void(value B) { 131346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRetVoid(Builder_val(B)); 131446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 131546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbuilder -> llvalue */ 131746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret(LLVMValueRef Val, value B) { 131846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRet(Builder_val(B), Val); 131946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 132046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 13216793dd9769047706acf34420586716450344fb66Erick Tryzelaar/* llvalue array -> llbuilder -> llvalue */ 13226793dd9769047706acf34420586716450344fb66Erick TryzelaarCAMLprim LLVMValueRef llvm_build_aggregate_ret(value RetVals, value B) { 13236793dd9769047706acf34420586716450344fb66Erick Tryzelaar return LLVMBuildAggregateRet(Builder_val(B), (LLVMValueRef *) Op_val(RetVals), 13246793dd9769047706acf34420586716450344fb66Erick Tryzelaar Wosize_val(RetVals)); 13256793dd9769047706acf34420586716450344fb66Erick Tryzelaar} 13266793dd9769047706acf34420586716450344fb66Erick Tryzelaar 132746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> llbuilder -> llvalue */ 132846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_br(LLVMBasicBlockRef BB, value B) { 132946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBr(Builder_val(B), BB); 133046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 133146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 133246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> llbasicblock -> llbuilder -> llvalue */ 133346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_cond_br(LLVMValueRef If, 133446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 133546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 133646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 133746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCondBr(Builder_val(B), If, Then, Else); 133846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 133946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 134046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> int -> llbuilder -> llvalue */ 134146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_switch(LLVMValueRef Of, 134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 134346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value EstimatedCount, 134446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 134546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSwitch(Builder_val(B), Of, Else, Int_val(EstimatedCount)); 134646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 134746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 13481430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar/* llvalue -> llvalue -> llbasicblock -> unit */ 13491430425539fd8004e47ab664c5e5fe5dc23c6d58Erick TryzelaarCAMLprim value llvm_add_case(LLVMValueRef Switch, LLVMValueRef OnVal, 135021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMBasicBlockRef Dest) { 135121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMAddCase(Switch, OnVal, Dest); 135221491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen return Val_unit; 135321491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen} 135421491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen 1355c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar/* llvalue -> llbasicblock -> llbuilder -> llvalue */ 1356c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarCAMLprim LLVMValueRef llvm_build_indirect_br(LLVMValueRef Addr, 1357c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar value EstimatedDests, 1358c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar value B) { 1359c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar return LLVMBuildIndirectBr(Builder_val(B), Addr, EstimatedDests); 1360c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar} 1361c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar 1362c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar/* llvalue -> llvalue -> llbasicblock -> unit */ 1363c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarCAMLprim value llvm_add_destination(LLVMValueRef IndirectBr, 1364c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar LLVMBasicBlockRef Dest) { 1365c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar LLVMAddDestination(IndirectBr, Dest); 1366c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar return Val_unit; 1367c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar} 1368c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar 136946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 137046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 137146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_nat(LLVMValueRef Fn, value Args, 137246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 137346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Catch, 137446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 137546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInvoke(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Args), 137646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Args), Then, Catch, String_val(Name)); 137746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 137846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 137946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 138046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 138146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_bc(value Args[], int NumArgs) { 138246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return llvm_build_invoke_nat((LLVMValueRef) Args[0], Args[1], 138346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[2], 138446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[3], 138546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Args[4], Args[5]); 138646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 138746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 138848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok EdwinCAMLprim LLVMValueRef llvm_build_landingpad(LLVMTypeRef Ty, LLVMValueRef PersFn, 138948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin value NumClauses, value Name, 139048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin value B) { 139148488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin return LLVMBuildLandingPad(Builder_val(B), Ty, PersFn, Int_val(NumClauses), 139248488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin String_val(Name)); 139348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin} 139448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin 139548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok EdwinCAMLprim value llvm_set_cleanup(LLVMValueRef LandingPadInst, value flag) 139648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin{ 139748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin LLVMSetCleanup(LandingPadInst, Bool_val(flag)); 139848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin return Val_unit; 139948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin} 140048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin 140146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 140246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_unreachable(value B) { 140346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUnreachable(Builder_val(B)); 140446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 140546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 140646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Arithmetic .........................................................--*/ 140746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 140846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 140946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_add(LLVMValueRef LHS, LLVMValueRef RHS, 141046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 141146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAdd(Builder_val(B), LHS, RHS, String_val(Name)); 141246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 141346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 141446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1415e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_add(LLVMValueRef LHS, LLVMValueRef RHS, 1416e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1417e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildNSWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1418e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1419e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1420e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 142119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_add(LLVMValueRef LHS, LLVMValueRef RHS, 142219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 142319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 142419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 142519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 142619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1427e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fadd(LLVMValueRef LHS, LLVMValueRef RHS, 1428e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1429e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1430e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1431e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1432e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 143346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sub(LLVMValueRef LHS, LLVMValueRef RHS, 143446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 143546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSub(Builder_val(B), LHS, RHS, String_val(Name)); 143646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 143746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 143846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 143919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 144019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 144119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWSub(Builder_val(B), LHS, RHS, String_val(Name)); 144219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 144319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 144419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 144519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 144619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 144719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWSub(Builder_val(B), LHS, RHS, String_val(Name)); 144819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 144919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 145019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1451e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fsub(LLVMValueRef LHS, LLVMValueRef RHS, 1452e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1453e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFSub(Builder_val(B), LHS, RHS, String_val(Name)); 1454e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1455e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1456e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 145746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_mul(LLVMValueRef LHS, LLVMValueRef RHS, 145846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 145946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildMul(Builder_val(B), LHS, RHS, String_val(Name)); 146046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 146146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 146246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 146319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 146419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 146519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWMul(Builder_val(B), LHS, RHS, String_val(Name)); 146619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 146719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 146819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 146919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 147019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 147119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWMul(Builder_val(B), LHS, RHS, String_val(Name)); 147219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 147319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 147419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1475e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fmul(LLVMValueRef LHS, LLVMValueRef RHS, 1476e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1477e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFMul(Builder_val(B), LHS, RHS, String_val(Name)); 1478e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1479e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1480e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 148146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_udiv(LLVMValueRef LHS, LLVMValueRef RHS, 148246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 148346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUDiv(Builder_val(B), LHS, RHS, String_val(Name)); 148446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 148546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 148646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 148746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 148846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 148946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 149046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 149146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 149246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1493e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_exact_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 1494e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1495e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExactSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 1496e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1497e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1498e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 149946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fdiv(LLVMValueRef LHS, LLVMValueRef RHS, 150046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 150146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFDiv(Builder_val(B), LHS, RHS, String_val(Name)); 150246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 150346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 150446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 150546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_urem(LLVMValueRef LHS, LLVMValueRef RHS, 150646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 150746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildURem(Builder_val(B), LHS, RHS, String_val(Name)); 150846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 150946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 151046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 151146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_srem(LLVMValueRef LHS, LLVMValueRef RHS, 151246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 151346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSRem(Builder_val(B), LHS, RHS, String_val(Name)); 151446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 151546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 151646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 151746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_frem(LLVMValueRef LHS, LLVMValueRef RHS, 151846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 151946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFRem(Builder_val(B), LHS, RHS, String_val(Name)); 152046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 152146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 152246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 152346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shl(LLVMValueRef LHS, LLVMValueRef RHS, 152446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 152546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShl(Builder_val(B), LHS, RHS, String_val(Name)); 152646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 152746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 152846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 152946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_lshr(LLVMValueRef LHS, LLVMValueRef RHS, 153046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 153146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLShr(Builder_val(B), LHS, RHS, String_val(Name)); 153246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 153346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 153446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 153546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ashr(LLVMValueRef LHS, LLVMValueRef RHS, 153646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 153746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAShr(Builder_val(B), LHS, RHS, String_val(Name)); 153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 154046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 154146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_and(LLVMValueRef LHS, LLVMValueRef RHS, 154246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 154346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAnd(Builder_val(B), LHS, RHS, String_val(Name)); 154446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 154546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 154646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 154746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_or(LLVMValueRef LHS, LLVMValueRef RHS, 154846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 154946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildOr(Builder_val(B), LHS, RHS, String_val(Name)); 155046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 155146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 155346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_xor(LLVMValueRef LHS, LLVMValueRef RHS, 155446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 155546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildXor(Builder_val(B), LHS, RHS, String_val(Name)); 155646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 155746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 155846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 155946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_neg(LLVMValueRef X, 156046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 156146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNeg(Builder_val(B), X, String_val(Name)); 156246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 156346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 156446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 156519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_neg(LLVMValueRef X, 156619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 156719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWNeg(Builder_val(B), X, String_val(Name)); 156819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 156919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 157019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 157119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_neg(LLVMValueRef X, 157219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 157319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWNeg(Builder_val(B), X, String_val(Name)); 157419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 157519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 157619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 157719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_fneg(LLVMValueRef X, 157819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 157919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildFNeg(Builder_val(B), X, String_val(Name)); 158019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 158119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 158219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 158346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_not(LLVMValueRef X, 158446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 158546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNot(Builder_val(B), X, String_val(Name)); 158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 158846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Memory .............................................................--*/ 158946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 159046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> string -> llbuilder -> llvalue */ 159146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_alloca(LLVMTypeRef Ty, 159246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 159346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAlloca(Builder_val(B), Ty, String_val(Name)); 159446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 159546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 159646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> llvalue -> string -> llbuilder -> llvalue */ 159746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_array_alloca(LLVMTypeRef Ty, LLVMValueRef Size, 159846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 159946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildArrayAlloca(Builder_val(B), Ty, Size, String_val(Name)); 160046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 160146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 160246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 160346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_load(LLVMValueRef Pointer, 160446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 160546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLoad(Builder_val(B), Pointer, String_val(Name)); 160646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 160746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 160846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llbuilder -> llvalue */ 160946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_store(LLVMValueRef Value, LLVMValueRef Pointer, 161046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 161146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildStore(Builder_val(B), Value, Pointer); 161246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 161346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 161446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 161546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_gep(LLVMValueRef Pointer, value Indices, 161646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 161746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildGEP(Builder_val(B), Pointer, 161846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMValueRef *) Op_val(Indices), Wosize_val(Indices), 161946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 162046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 162146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1622e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 1623e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_in_bounds_gep(LLVMValueRef Pointer, 1624e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Indices, value Name, 1625e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1626e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInBoundsGEP(Builder_val(B), Pointer, 1627e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar (LLVMValueRef *) Op_val(Indices), 1628e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar Wosize_val(Indices), String_val(Name)); 1629e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1630e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1631e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1632e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_struct_gep(LLVMValueRef Pointer, 1633c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner value Index, value Name, 1634e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1635c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner return LLVMBuildStructGEP(Builder_val(B), Pointer, 1636c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner Int_val(Index), String_val(Name)); 1637e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1638e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1639e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1640e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_string(value Str, value Name, value B) { 1641e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalString(Builder_val(B), String_val(Str), 1642e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1643e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1644e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1645e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1646e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_stringptr(value Str, value Name, 1647e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1648e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalStringPtr(Builder_val(B), String_val(Str), 1649e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1650e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1651e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 165246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Casts ..............................................................--*/ 165346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 165446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 165546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_trunc(LLVMValueRef X, LLVMTypeRef Ty, 165646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 165746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildTrunc(Builder_val(B), X, Ty, String_val(Name)); 165846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 165946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 166046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 166146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_zext(LLVMValueRef X, LLVMTypeRef Ty, 166246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 166346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildZExt(Builder_val(B), X, Ty, String_val(Name)); 166446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 166546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 166646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 166746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sext(LLVMValueRef X, LLVMTypeRef Ty, 166846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 166946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSExt(Builder_val(B), X, Ty, String_val(Name)); 167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 167246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 167346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptoui(LLVMValueRef X, LLVMTypeRef Ty, 167446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 167546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToUI(Builder_val(B), X, Ty, String_val(Name)); 167646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 167746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 167846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 167946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptosi(LLVMValueRef X, LLVMTypeRef Ty, 168046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 168146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToSI(Builder_val(B), X, Ty, String_val(Name)); 168246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 168346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 168446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 168546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_uitofp(LLVMValueRef X, LLVMTypeRef Ty, 168646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 168746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUIToFP(Builder_val(B), X, Ty, String_val(Name)); 168846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 168946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 169046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 169146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sitofp(LLVMValueRef X, LLVMTypeRef Ty, 169246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 169346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSIToFP(Builder_val(B), X, Ty, String_val(Name)); 169446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 169546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 169646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 169746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptrunc(LLVMValueRef X, LLVMTypeRef Ty, 169846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 169946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPTrunc(Builder_val(B), X, Ty, String_val(Name)); 170046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 170146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 170246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 170346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fpext(LLVMValueRef X, LLVMTypeRef Ty, 170446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 170546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPExt(Builder_val(B), X, Ty, String_val(Name)); 170646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 170746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 170846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 170946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_prttoint(LLVMValueRef X, LLVMTypeRef Ty, 171046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 171146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildPtrToInt(Builder_val(B), X, Ty, String_val(Name)); 171246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 171346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 171446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 171546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_inttoptr(LLVMValueRef X, LLVMTypeRef Ty, 171646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 171746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildIntToPtr(Builder_val(B), X, Ty, String_val(Name)); 171846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 171946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 172046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 172146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 172246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 172346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBitCast(Builder_val(B), X, Ty, String_val(Name)); 172446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 172546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1726e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1727e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_zext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1728e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1729e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildZExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1730e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1731e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1732e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1733e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_sext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1734e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1735e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildSExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1736e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1737e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1738e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1739e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_trunc_or_bitcast(LLVMValueRef X, 1740e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMTypeRef Ty, value Name, 1741e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1742e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildTruncOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1743e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1744e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1745e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1746e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_pointercast(LLVMValueRef X, LLVMTypeRef Ty, 1747e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1748e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPointerCast(Builder_val(B), X, Ty, String_val(Name)); 1749e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1750e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1751e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1752e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_intcast(LLVMValueRef X, LLVMTypeRef Ty, 1753e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1754e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIntCast(Builder_val(B), X, Ty, String_val(Name)); 1755e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1756e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1757e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1758e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fpcast(LLVMValueRef X, LLVMTypeRef Ty, 1759e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1760e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFPCast(Builder_val(B), X, Ty, String_val(Name)); 1761e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1762e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 176346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Comparisons ........................................................--*/ 176446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1765404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 176646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_icmp(value Pred, 176746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 176846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 176946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildICmp(Builder_val(B), Int_val(Pred) + LLVMIntEQ, LHS, RHS, 177046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 177146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 177246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1773404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 177446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fcmp(value Pred, 177546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 177646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 177746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFCmp(Builder_val(B), Int_val(Pred), LHS, RHS, 177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 178046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 178146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Miscellaneous instructions .........................................--*/ 178246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 17832618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) list -> string -> llbuilder -> llvalue */ 17842618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim LLVMValueRef llvm_build_phi(value Incoming, value Name, value B) { 17852618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd, Tl; 17862618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMValueRef FirstValue, PhiNode; 17872618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 17882618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen assert(Incoming != Val_int(0) && "Empty list passed to Llvm.build_phi!"); 17892618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 17902618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = Field(Incoming, 0); 17912618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen FirstValue = (LLVMValueRef) Field(Hd, 0); 17922618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen PhiNode = LLVMBuildPhi(Builder_val(B), LLVMTypeOf(FirstValue), 17932618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen String_val(Name)); 17942618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 17952618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (Tl = Incoming; Tl != Val_int(0); Tl = Field(Tl, 1)) { 17962618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd = Field(Tl, 0); 17972618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, (LLVMValueRef*) &Field(Hd, 0), 17982618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Hd, 1), 1); 17992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 18002618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 18012618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return PhiNode; 180246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 180346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 180446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 180546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_call(LLVMValueRef Fn, value Params, 180646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 180746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCall(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Params), 180846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Params), String_val(Name)); 180946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 181046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 181146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 181246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_select(LLVMValueRef If, 181346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Then, LLVMValueRef Else, 181446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 181546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSelect(Builder_val(B), If, Then, Else, String_val(Name)); 181646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 181746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 181946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_va_arg(LLVMValueRef List, LLVMTypeRef Ty, 182046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 182146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildVAArg(Builder_val(B), List, Ty, String_val(Name)); 182246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 182346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 182446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 182546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_extractelement(LLVMValueRef Vec, 182646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 182746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 182846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildExtractElement(Builder_val(B), Vec, Idx, String_val(Name)); 182946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 183046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 183146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 183246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_insertelement(LLVMValueRef Vec, 183346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Element, 183446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 183546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 183646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInsertElement(Builder_val(B), Vec, Element, Idx, 183746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 183846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 183946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 184046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 184146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shufflevector(LLVMValueRef V1, LLVMValueRef V2, 184246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Mask, 184346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 184446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShuffleVector(Builder_val(B), V1, V2, Mask, String_val(Name)); 184546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 184646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1847e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1848e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_extractvalue(LLVMValueRef Aggregate, 1849e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Idx, value Name, value B) { 1850e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExtractValue(Builder_val(B), Aggregate, Int_val(Idx), 1851e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1852e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1853e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1854e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> int -> string -> llbuilder -> llvalue */ 1855e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_insertvalue(LLVMValueRef Aggregate, 1856e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMValueRef Val, value Idx, 1857e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1858e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInsertValue(Builder_val(B), Aggregate, Val, Int_val(Idx), 1859e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1860e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1861e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1862e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1863e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_null(LLVMValueRef Val, value Name, 1864e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1865e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNull(Builder_val(B), Val, String_val(Name)); 1866e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1867e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1868e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1869e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_not_null(LLVMValueRef Val, value Name, 1870e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1871e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNotNull(Builder_val(B), Val, String_val(Name)); 1872e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1873e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1874e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1875e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_ptrdiff(LLVMValueRef LHS, LLVMValueRef RHS, 1876e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1877e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPtrDiff(Builder_val(B), LHS, RHS, String_val(Name)); 1878e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 18791ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen 1880da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1881da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/ 1882da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1883da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* string -> llmemorybuffer 1884da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1885da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_of_file(value Path) { 1886da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Path); 1887da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1888da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1889da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1890da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithContentsOfFile(String_val(Path), 1891da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen &MemBuf, &Message)) 1892da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1893da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1894da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLreturn((value) MemBuf); 1895da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1896da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1897da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* unit -> llmemorybuffer 1898da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1899da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim LLVMMemoryBufferRef llvm_memorybuffer_of_stdin(value Unit) { 1900da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1901da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1902da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1903da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithSTDIN(&MemBuf, &Message)) 1904da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1905da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1906da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return MemBuf; 1907da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1908da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1909da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* llmemorybuffer -> unit */ 1910da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_dispose(LLVMMemoryBufferRef MemBuf) { 1911da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMemoryBuffer(MemBuf); 1912da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 1913da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1914da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1915d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/*===-- Pass Managers -----------------------------------------------------===*/ 1916d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1917d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* unit -> [ `Module ] PassManager.t */ 1918d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim LLVMPassManagerRef llvm_passmanager_create(value Unit) { 1919d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return LLVMCreatePassManager(); 1920d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1921d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1922d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llmodule -> [ `Function ] PassManager.t -> bool */ 1923d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_module(LLVMModuleRef M, 1924d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef PM) { 1925d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunPassManager(PM, M)); 1926d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1927d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1928d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1929d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_initialize(LLVMPassManagerRef FPM) { 1930d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMInitializeFunctionPassManager(FPM)); 1931d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1932d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1933d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llvalue -> [ `Function ] PassManager.t -> bool */ 1934d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_function(LLVMValueRef F, 1935d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef FPM) { 1936d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunFunctionPassManager(FPM, F)); 1937d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1938d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1939d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1940d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_finalize(LLVMPassManagerRef FPM) { 1941d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMFinalizeFunctionPassManager(FPM)); 1942d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1943d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1944d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* PassManager.any PassManager.t -> unit */ 1945d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_dispose(LLVMPassManagerRef PM) { 1946d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMDisposePassManager(PM); 1947d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_unit; 1948d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1949