llvm_ocaml.c revision 48488a64fadb2f99706029e51ae4c06fcfac5cdb
1bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen/*===-- llvm_ocaml.c - LLVM Ocaml Glue --------------------------*- C++ -*-===*\ 28ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 38ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* The LLVM Compiler Infrastructure *| 48ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 5234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner|* This file is distributed under the University of Illinois Open Source *| 6234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner|* License. See LICENSE.TXT for details. *| 78ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 88ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|*===----------------------------------------------------------------------===*| 98ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* This file glues LLVM's ocaml interface to its C interface. These functions *| 118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* are by and large transparent wrappers to the corresponding C functions. *| 128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* Note that these functions intentionally take liberties with the CAMLparamX *| 148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* macros, since most of the parameters are not GC heap objects. *| 158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen|* *| 168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen\*===----------------------------------------------------------------------===*/ 178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "llvm-c/Core.h" 198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "caml/alloc.h" 2046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#include "caml/custom.h" 218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "caml/memory.h" 22da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include "caml/fail.h" 23da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include "caml/callback.h" 246d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen#include "llvm/Config/config.h" 252618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen#include <assert.h> 26da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include <stdlib.h> 27da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 28da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 29da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* Can't use the recommended caml_named_value mechanism for backwards 30da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen compatibility reasons. This is largely equivalent. */ 31da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenstatic value llvm_ioerror_exn; 32da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 33da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_register_core_exns(value IoError) { 34da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_ioerror_exn = Field(IoError, 0); 35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen register_global_root(&llvm_ioerror_exn); 36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 392e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenstatic void llvm_raise(value Prototype, char *Message) { 40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Prototype); 41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLlocal1(CamlMessage); 42da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 43da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CamlMessage = copy_string(Message); 44da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMessage(Message); 45da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 46da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise_with_arg(Prototype, CamlMessage); 472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen abort(); /* NOTREACHED */ 48a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#ifdef CAMLnoreturn 49a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen CAMLnoreturn; /* Silences warnings, but is missing in some versions. */ 50a9d059693b0bfdaa27bad71c2b0769beaf6ee7ddGordon Henriksen#endif 51da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksenstatic value alloc_variant(int tag, void *Value) { 544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Iter = alloc_small(1, tag); 554733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen Field(Iter, 0) = Val_op(Value); 564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Iter; 574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 594733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* Macro to convert the C first/next/last/prev idiom to the Ocaml llpos/ 604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen llrev_pos idiom. */ 614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen#define DEFINE_ITERATORS(camlname, cname, pty, cty, pfun) \ 624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llpos */ \ 634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_begin(pty Mom) { \ 644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty First = LLVMGetFirst##cname(Mom); \ 654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (First) \ 664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, First); \ 674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llpos */ \ 714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_succ(cty Kid) { \ 724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Next = LLVMGetNext##cname(Kid); \ 734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Next) \ 744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Next); \ 75f440691a20eff24cf59ac14e10057234ae182dbeGordon Henriksen return alloc_variant(0, pfun(Kid)); \ 764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llmodule -> ('a, 'b) llrev_pos */ \ 794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_end(pty Mom) { \ 804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Last = LLVMGetLast##cname(Mom); \ 814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Last) \ 824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Last); \ 834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, Mom); \ 844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } \ 854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen \ 864733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen /* llvalue -> ('a, 'b) llrev_pos */ \ 874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen CAMLprim value llvm_##camlname##_pred(cty Kid) { \ 884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen cty Prev = LLVMGetPrevious##cname(Kid); \ 894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen if (Prev) \ 904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(1, Prev); \ 914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return alloc_variant(0, pfun(Kid)); \ 924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen } 934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 955371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/*===-- Contexts ----------------------------------------------------------===*/ 965371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 975371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 985371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_create_context(value Unit) { 995371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMContextCreate(); 1005371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1015371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1025371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> unit */ 1035371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_dispose_context(LLVMContextRef C) { 1045371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar LLVMContextDispose(C); 1055371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return Val_unit; 1065371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1075371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1085371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* unit -> llcontext */ 1095371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_global_context(value Unit) { 1105371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetGlobalContext(); 1115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 11346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> int */ 11446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_mdkind_id(LLVMContextRef C, value Name) { 11546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar unsigned MDKindID = LLVMGetMDKindIDInContext(C, String_val(Name), 11646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar caml_string_length(Name)); 11746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_int(MDKindID); 11846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 11946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 1208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Modules -----------------------------------------------------------===*/ 1218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 122263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar/* llcontext -> string -> llmodule */ 123263d989a719c1864862fc91f59193a6c2b55ca48Erick TryzelaarCAMLprim LLVMModuleRef llvm_create_module(LLVMContextRef C, value ModuleID) { 124263d989a719c1864862fc91f59193a6c2b55ca48Erick Tryzelaar return LLVMModuleCreateWithNameInContext(String_val(ModuleID), C); 1258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llmodule -> unit */ 12846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_dispose_module(LLVMModuleRef M) { 12946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeModule(M); 1308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 1318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 133a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 134a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_target_triple(LLVMModuleRef M) { 135a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetTarget(M)); 136a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 137a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 138a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 139a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_target_triple(value Trip, LLVMModuleRef M) { 140a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetTarget(M, String_val(Trip)); 141a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 142a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 143a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 144a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* llmodule -> string */ 145a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_data_layout(LLVMModuleRef M) { 146a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return copy_string(LLVMGetDataLayout(M)); 147a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 148a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 149a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/* string -> llmodule -> unit */ 150a353ffa7e556bfd2864474911174da691117f691Gordon HenriksenCAMLprim value llvm_set_data_layout(value Layout, LLVMModuleRef M) { 151a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen LLVMSetDataLayout(M, String_val(Layout)); 152a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen return Val_unit; 153a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen} 154a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 155af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen/* llmodule -> unit */ 156af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon HenriksenCAMLprim value llvm_dump_module(LLVMModuleRef M) { 157af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen LLVMDumpModule(M); 158af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen return Val_unit; 159af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen} 160af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen 1610941534c712d77243d9dda5e8c1d927563b4edffChris Lattner/* llmodule -> string -> unit */ 1620941534c712d77243d9dda5e8c1d927563b4edffChris LattnerCAMLprim value llvm_set_module_inline_asm(LLVMModuleRef M, value Asm) { 1630941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMSetModuleInlineAsm(M, String_val(Asm)); 1640941534c712d77243d9dda5e8c1d927563b4edffChris Lattner return Val_unit; 1650941534c712d77243d9dda5e8c1d927563b4edffChris Lattner} 1668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- Types -------------------------------------------------------------===*/ 1688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 169404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* lltype -> TypeKind.t */ 17046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_classify_type(LLVMTypeRef Ty) { 17146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetTypeKind(Ty)); 1728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 1738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* lltype -> llcontext */ 1755371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMContextRef llvm_type_context(LLVMTypeRef Ty) { 1765371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMGetTypeContext(Ty); 1775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar} 1785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 1798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on integer types ........................................--*/ 1808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 181b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 182b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i1_type (LLVMContextRef Context) { 183b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt1TypeInContext(Context); 184b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 185b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 186b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 187b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i8_type (LLVMContextRef Context) { 188b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt8TypeInContext(Context); 189b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 190b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 191b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 192b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i16_type (LLVMContextRef Context) { 193b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt16TypeInContext(Context); 194b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 195b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 196b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 197b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i32_type (LLVMContextRef Context) { 198b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt32TypeInContext(Context); 199b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 200b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 201b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 202b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_i64_type (LLVMContextRef Context) { 203b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInt64TypeInContext(Context); 204b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 2058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 206b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> int -> lltype */ 207b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_integer_type(LLVMContextRef Context, value Width) { 208b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMIntTypeInContext(Context, Int_val(Width)); 2098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 21246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_integer_bitwidth(LLVMTypeRef IntegerTy) { 21346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetIntTypeWidth(IntegerTy)); 2148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on real types ...........................................--*/ 2178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 218b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 219b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_float_type(LLVMContextRef Context) { 220b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFloatTypeInContext(Context); 2218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 223b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 224b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_double_type(LLVMContextRef Context) { 225b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMDoubleTypeInContext(Context); 2268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2278ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 228b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 229b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_x86fp80_type(LLVMContextRef Context) { 230b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMX86FP80TypeInContext(Context); 2318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 233b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 234b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_fp128_type(LLVMContextRef Context) { 235b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMFP128TypeInContext(Context); 2368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 238b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 239b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_ppc_fp128_type(LLVMContextRef Context) { 240b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMPPCFP128TypeInContext(Context); 2418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 243bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen/* llcontext -> lltype */ 244bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenCAMLprim LLVMTypeRef llvm_x86mmx_type(LLVMContextRef Context) { 245bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen return LLVMX86MMXTypeInContext(Context); 246bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen} 247bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen 2488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on function types .......................................--*/ 2498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 250957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 251957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_function_type(LLVMTypeRef RetTy, value ParamTys) { 25281a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 253957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 0); 254957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 255957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 256957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen/* lltype -> lltype array -> lltype */ 257957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_var_arg_function_type(LLVMTypeRef RetTy, 258957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen value ParamTys) { 259957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen return LLVMFunctionType(RetTy, (LLVMTypeRef *) ParamTys, 260957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen Wosize_val(ParamTys), 1); 2618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> bool */ 26446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_var_arg(LLVMTypeRef FunTy) { 26546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsFunctionVarArg(FunTy)); 2668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 26946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_param_types(LLVMTypeRef FunTy) { 27046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountParamTypes(FunTy), 0); 27146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetParamTypes(FunTy, (LLVMTypeRef *) Tys); 27246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 2738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on struct types .........................................--*/ 2768ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2775371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2785371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_struct_type(LLVMContextRef C, value ElementTypes) { 2795371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2805371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 0); 281957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen} 282957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen 2835371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> lltype array -> lltype */ 2845371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMTypeRef llvm_packed_struct_type(LLVMContextRef C, 2855371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementTypes) { 2865371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMStructTypeInContext(C, (LLVMTypeRef *) ElementTypes, 2875371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementTypes), 1); 2888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 2908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> lltype array */ 2911940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarCAMLprim value llvm_struct_element_types(LLVMTypeRef StructTy) { 29246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Tys = alloc(LLVMCountStructElementTypes(StructTy), 0); 29346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetStructElementTypes(StructTy, (LLVMTypeRef *) Tys); 29446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Tys; 2958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 2968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 29746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> bool */ 29846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_packed(LLVMTypeRef StructTy) { 29946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsPackedStruct(StructTy)); 3008ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on array, pointer, and vector types .....................--*/ 3038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 305957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_array_type(LLVMTypeRef ElementTy, value Count) { 30681a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMArrayType(ElementTy, Int_val(Count)); 3078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 30957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> lltype */ 31057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_pointer_type(LLVMTypeRef ElementTy) { 31157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, 0); 31257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 31357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 31457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int -> lltype */ 31557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim LLVMTypeRef llvm_qualified_pointer_type(LLVMTypeRef ElementTy, 31657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen value AddressSpace) { 31757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMPointerType(ElementTy, Int_val(AddressSpace)); 31857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 31957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 3208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int -> lltype */ 321957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon HenriksenCAMLprim LLVMTypeRef llvm_vector_type(LLVMTypeRef ElementTy, value Count) { 32281a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen return LLVMVectorType(ElementTy, Int_val(Count)); 3238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 32646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_array_length(LLVMTypeRef ArrayTy) { 32746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetArrayLength(ArrayTy)); 3288ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> int */ 33157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenCAMLprim value llvm_address_space(LLVMTypeRef PtrTy) { 33257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return Val_int(LLVMGetPointerAddressSpace(PtrTy)); 33357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen} 33457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 33557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen/* lltype -> int */ 33646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_vector_size(LLVMTypeRef VectorTy) { 33746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVectorSize(VectorTy)); 3388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on other types ..........................................--*/ 3418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 342b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 343b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_void_type (LLVMContextRef Context) { 344b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMVoidTypeInContext(Context); 345b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 346b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 347b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> lltype */ 348b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMTypeRef llvm_label_type(LLVMContextRef Context) { 349b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMLabelTypeInContext(Context); 350b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar} 3518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*===-- VALUES ------------------------------------------------------------===*/ 3538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> lltype */ 35546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMTypeRef llvm_type_of(LLVMValueRef Val) { 35646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMTypeOf(Val); 3578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 36046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_name(LLVMValueRef Val) { 36146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetValueName(Val)); 3628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3648ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 36546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_value_name(value Name, LLVMValueRef Val) { 36646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetValueName(Val, String_val(Name)); 3678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 3688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 3698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 37088cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen/* llvalue -> unit */ 37188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon HenriksenCAMLprim value llvm_dump_value(LLVMValueRef Val) { 37288cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen LLVMDumpValue(Val); 37388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen return Val_unit; 37488cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen} 37588cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen 376b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar/*--... Operations on users ................................................--*/ 377b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar 378b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar/* llvalue -> int -> llvalue */ 379b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick TryzelaarCAMLprim LLVMValueRef llvm_operand(LLVMValueRef V, value I) { 380b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar return LLVMGetOperand(V, Int_val(I)); 381b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar} 382b65c5f2ec347db8342cb7e42d072b0088b74fa73Erick Tryzelaar 383f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar/* llvalue -> int -> llvalue -> unit */ 384f7af931930dfab74b8a72b195e53df34b4ea2480Erick TryzelaarCAMLprim value llvm_set_operand(LLVMValueRef U, value I, LLVMValueRef V) { 385f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar LLVMSetOperand(U, Int_val(I), V); 386f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar return Val_unit; 387f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar} 388f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar 389f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar/* llvalue -> int */ 390f7af931930dfab74b8a72b195e53df34b4ea2480Erick TryzelaarCAMLprim value llvm_num_operands(LLVMValueRef V) { 391f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar return Val_int(LLVMGetNumOperands(V)); 392f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar} 393f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar 3948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on constants of (mostly) any type .......................--*/ 3958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 3968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 39746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_constant(LLVMValueRef Val) { 39846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsConstant(Val)); 399344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 400344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 401344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 40246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_null(LLVMValueRef Val) { 40346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsNull(Val)); 4048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 406344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* llvalue -> bool */ 40746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_undef(LLVMValueRef Val) { 40846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsUndef(Val)); 409344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 410344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 41146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on instructions .........................................--*/ 41246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 41346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> bool */ 41446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_has_metadata(LLVMValueRef Val) { 41546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_bool(LLVMHasMetadata(Val)); 41646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 41746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 41846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue option */ 41946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_metadata(LLVMValueRef Val, value MDKindID) { 42046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam1(MDKindID); 42146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD; 42246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((MD = LLVMGetMetadata(Val, Int_val(MDKindID)))) { 42346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 42446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) MD; 42546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 42646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 42746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 42846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 42946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 43046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> llvalue -> unit */ 43146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_metadata(LLVMValueRef Val, value MDKindID, 43246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef MD) { 43346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), MD); 43446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 43546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 43646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 43746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llvalue -> int -> unit */ 43846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_metadata(LLVMValueRef Val, value MDKindID) { 43946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetMetadata(Val, Int_val(MDKindID), NULL); 44046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 44146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 44246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 44346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 44446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Operations on metadata .............................................--*/ 44546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 44646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> string -> llvalue */ 44746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdstring(LLVMContextRef C, value S) { 44846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDStringInContext(C, String_val(S), caml_string_length(S)); 44946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 45046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 45146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 45246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim LLVMValueRef llvm_mdnode(LLVMContextRef C, value ElementVals) { 45346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return LLVMMDNodeInContext(C, (LLVMValueRef*) Op_val(ElementVals), 45446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Wosize_val(ElementVals)); 45546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 45646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 4578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on scalar constants .....................................--*/ 4588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 459e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen/* lltype -> int -> llvalue */ 460e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_int(LLVMTypeRef IntTy, value N) { 461e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, (long long) Int_val(N), 1); 4628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 464344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen/* lltype -> Int64.t -> bool -> llvalue */ 465e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_of_int64(LLVMTypeRef IntTy, value N, 466e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen value SExt) { 467e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstInt(IntTy, Int64_val(N), Bool_val(SExt)); 468344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen} 469344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 47045d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> int -> llvalue */ 47145d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_int_of_string(LLVMTypeRef IntTy, value S, 47245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar value Radix) { 47345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstIntOfStringAndSize(IntTy, String_val(S), caml_string_length(S), 47445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar Int_val(Radix)); 47545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 47645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 4778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> float -> llvalue */ 478e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_float(LLVMTypeRef RealTy, value N) { 479e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstReal(RealTy, Double_val(N)); 4808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 4818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 48245d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar/* lltype -> string -> llvalue */ 48345d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick TryzelaarCAMLprim LLVMValueRef llvm_const_float_of_string(LLVMTypeRef RealTy, value S) { 48445d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar return LLVMConstRealOfStringAndSize(RealTy, String_val(S), 48545d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar caml_string_length(S)); 48645d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar} 48745d6ac2cc13f7881687c2d7f03f9b9892fd85e6eErick Tryzelaar 4888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on composite constants ..................................--*/ 4898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 490b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 491b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_string(LLVMContextRef Context, value Str, 492b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 493b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 494b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 1); 495e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 496e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 497b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar/* llcontext -> string -> llvalue */ 498b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMValueRef llvm_const_stringz(LLVMContextRef Context, value Str, 499b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar value NullTerminate) { 500b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMConstStringInContext(Context, String_val(Str), string_length(Str), 501b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 0); 5028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> llvalue array -> llvalue */ 505e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_array(LLVMTypeRef ElementTy, 50646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value ElementVals) { 507e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstArray(ElementTy, (LLVMValueRef*) Op_val(ElementVals), 508e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 509e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen} 510e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 5115371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 5125371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_struct(LLVMContextRef C, value ElementVals) { 5135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 5145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 0); 5158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5175371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llvalue array -> llvalue */ 5185371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim LLVMValueRef llvm_const_packed_struct(LLVMContextRef C, 5195371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar value ElementVals) { 5205371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return LLVMConstStructInContext(C, (LLVMValueRef *) Op_val(ElementVals), 5215371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar Wosize_val(ElementVals), 1); 5228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue array -> llvalue */ 525e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenCAMLprim LLVMValueRef llvm_const_vector(value ElementVals) { 526e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen return LLVMConstVector((LLVMValueRef*) Op_val(ElementVals), 527e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen Wosize_val(ElementVals)); 5284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--... Constant expressions ...............................................--*/ 5314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 532404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> llvalue */ 5334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_icmp(value Pred, 5344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 5354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 5364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstICmp(Int_val(Pred) + LLVMIntEQ, LHSConstant, RHSConstant); 5374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 539404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> llvalue */ 5404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_fcmp(value Pred, 5414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef LHSConstant, 5424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LLVMValueRef RHSConstant) { 5434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstFCmp(Int_val(Pred), LHSConstant, RHSConstant); 5444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/* llvalue -> llvalue array -> llvalue */ 5474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenCAMLprim LLVMValueRef llvm_const_gep(LLVMValueRef ConstantVal, value Indices) { 5484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen return LLVMConstGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 5494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen Wosize_val(Indices)); 5508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 5518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5521b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue array -> llvalue */ 5531b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_in_bounds_gep(LLVMValueRef ConstantVal, 5541b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 5551b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar return LLVMConstInBoundsGEP(ConstantVal, (LLVMValueRef*) Op_val(Indices), 5561b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar Wosize_val(Indices)); 5571b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 5581b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5591b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> int array -> llvalue */ 5601b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_extractvalue(LLVMValueRef Aggregate, 5611b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar value Indices) { 5621b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 5631b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 5641b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 5651b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 5661b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5671b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 5681b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 5691b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 5701b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 5711b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5721b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstExtractValue(Aggregate, idxs, size); 5731b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 5741b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 5751b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 5761b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5771b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar/* llvalue -> llvalue -> int array -> llvalue */ 5781b42cfd1ca03e48835e8e4c91c5dbb598030257fErick TryzelaarCAMLprim LLVMValueRef llvm_const_insertvalue(LLVMValueRef Aggregate, 5791b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef Val, value Indices) { 5801b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLparam1(Indices); 5811b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int size = Wosize_val(Indices); 5821b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar int i; 5831b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar LLVMValueRef result; 5841b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5851b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar unsigned* idxs = (unsigned*)malloc(size * sizeof(unsigned)); 5861b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar for (i = 0; i < size; i++) { 5871b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar idxs[i] = Int_val(Field(Indices, i)); 5881b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar } 5891b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 5901b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar result = LLVMConstInsertValue(Aggregate, Val, idxs, size); 5911b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar free(idxs); 5921b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar CAMLreturnT(LLVMValueRef, result); 5931b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar} 5941b42cfd1ca03e48835e8e4c91c5dbb598030257fErick Tryzelaar 595ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar/* lltype -> string -> string -> bool -> bool -> llvalue */ 596ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick TryzelaarCAMLprim LLVMValueRef llvm_const_inline_asm(LLVMTypeRef Ty, value Asm, 597ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar value Constraints, value HasSideEffects, 598ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar value IsAlignStack) { 599ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar return LLVMConstInlineAsm(Ty, String_val(Asm), String_val(Constraints), 600ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar Bool_val(HasSideEffects), Bool_val(IsAlignStack)); 601ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar} 602ce89b4e66f7ec82b2b621c94b072f0b22827a3cdErick Tryzelaar 6038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables, functions, and aliases (globals) ...--*/ 6048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 60646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_declaration(LLVMValueRef Global) { 60746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsDeclaration(Global)); 6088ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6098ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 610404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Linkage.t */ 61146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_linkage(LLVMValueRef Global) { 61246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetLinkage(Global)); 6138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6148ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 615404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Linkage.t -> llvalue -> unit */ 61646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_linkage(value Linkage, LLVMValueRef Global) { 61746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetLinkage(Global, Int_val(Linkage)); 6188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6208ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> string */ 62246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_section(LLVMValueRef Global) { 62346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return copy_string(LLVMGetSection(Global)); 6248ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6258ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6268ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> unit */ 62746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_section(value Section, LLVMValueRef Global) { 62846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetSection(Global, String_val(Section)); 6298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 632404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* llvalue -> Visibility.t */ 63346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_visibility(LLVMValueRef Global) { 63446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetVisibility(Global)); 6358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 637404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Visibility.t -> llvalue -> unit */ 63846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_visibility(value Viz, LLVMValueRef Global) { 63946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetVisibility(Global, Int_val(Viz)); 6408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> int */ 64446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_alignment(LLVMValueRef Global) { 64546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetAlignment(Global)); 6468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6478ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* int -> llvalue -> unit */ 64946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_alignment(value Bytes, LLVMValueRef Global) { 65046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetAlignment(Global, Int_val(Bytes)); 6518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 6528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 6538ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 654705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/*--... Operations on uses .................................................--*/ 655705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 656705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* llvalue -> lluse option */ 657705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim value llvm_use_begin(LLVMValueRef Val) { 658705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLparam0(); 659705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar LLVMUseRef First; 660705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar if ((First = LLVMGetFirstUse(Val))) { 661705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar value Option = alloc(1, 0); 662705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar Field(Option, 0) = (value) First; 663705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Option); 664705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar } 665705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Val_int(0)); 666705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 667705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 668705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> lluse option */ 669705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim value llvm_use_succ(LLVMUseRef U) { 670705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLparam0(); 671705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar LLVMUseRef Next; 672705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar if ((Next = LLVMGetNextUse(U))) { 673705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar value Option = alloc(1, 0); 674705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar Field(Option, 0) = (value) Next; 675705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Option); 676705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar } 677705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar CAMLreturn(Val_int(0)); 678705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 679705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 680705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> llvalue */ 681705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim LLVMValueRef llvm_user(LLVMUseRef UR) { 682705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar return LLVMGetUser(UR); 683705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 684705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 685705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar/* lluse -> llvalue */ 686705443ffd3f67018c1ec387014262566502a9ee3Erick TryzelaarCAMLprim LLVMValueRef llvm_used_value(LLVMUseRef UR) { 687705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar return LLVMGetUsedValue(UR); 688705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar} 689705443ffd3f67018c1ec387014262566502a9ee3Erick Tryzelaar 6908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/*--... Operations on global variables .....................................--*/ 6918ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 6924733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(global, Global, LLVMModuleRef, LLVMValueRef, 6934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 6944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 6958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* lltype -> string -> llmodule -> llvalue */ 69646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_global(LLVMTypeRef Ty, value Name, 69746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 6986d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 6996d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 7006d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty) 70157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(GlobalVar, LLVMPointerType(Ty, 0)); 7026d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return GlobalVar; 7036d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 70446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddGlobal(M, Ty, String_val(Name)); 7058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7078e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar/* lltype -> string -> int -> llmodule -> llvalue */ 7088e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarCAMLprim LLVMValueRef llvm_declare_qualified_global(LLVMTypeRef Ty, value Name, 7098e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar value AddressSpace, 7108e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMModuleRef M) { 7118e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef GlobalVar; 7128e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 7138e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty) 7148e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return LLVMConstBitCast(GlobalVar, 7158e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMPointerType(Ty, Int_val(AddressSpace))); 7168e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return GlobalVar; 7178e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar } 7188e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return LLVMAddGlobal(M, Ty, String_val(Name)); 7198e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar} 7208e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar 7216d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 7226d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_global(value Name, LLVMModuleRef M) { 7236d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 7246d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef GlobalVar; 7256d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) { 72675e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 7276d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) GlobalVar; 7286d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 7296d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 7306d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 7316d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 7326d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 7338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* string -> llvalue -> llmodule -> llvalue */ 73446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_global(value Name, LLVMValueRef Initializer, 73546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 73646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar = LLVMAddGlobal(M, LLVMTypeOf(Initializer), 7378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen String_val(Name)); 7388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen LLVMSetInitializer(GlobalVar, Initializer); 73946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return GlobalVar; 7408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7428e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar/* string -> llvalue -> int -> llmodule -> llvalue */ 7438e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarCAMLprim LLVMValueRef llvm_define_qualified_global(value Name, 7448e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef Initializer, 7458e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar value AddressSpace, 7468e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMModuleRef M) { 7478e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMValueRef GlobalVar = LLVMAddGlobalInAddressSpace(M, 7488e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMTypeOf(Initializer), 7498e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar String_val(Name), 7508e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar Int_val(AddressSpace)); 7518e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar LLVMSetInitializer(GlobalVar, Initializer); 7528e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar return GlobalVar; 7538e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar} 7548e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar 7558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 75646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_global(LLVMValueRef GlobalVar) { 75746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteGlobal(GlobalVar); 7588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7598ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> llvalue -> unit */ 76246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_initializer(LLVMValueRef ConstantVal, 76346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 76446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, ConstantVal); 7658ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> unit */ 76946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_remove_initializer(LLVMValueRef GlobalVar) { 77046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetInitializer(GlobalVar, NULL); 7718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 7728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* llvalue -> bool */ 77546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_thread_local(LLVMValueRef GlobalVar) { 77646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMIsThreadLocal(GlobalVar)); 7778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 7788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen/* bool -> llvalue -> unit */ 78046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_thread_local(value IsThreadLocal, 78146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef GlobalVar) { 78246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetThreadLocal(GlobalVar, Bool_val(IsThreadLocal)); 78346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 78446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 78546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 786c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* llvalue -> bool */ 787c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_is_global_constant(LLVMValueRef GlobalVar) { 788c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_bool(LLVMIsGlobalConstant(GlobalVar)); 789c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 790c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 791c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen/* bool -> llvalue -> unit */ 792c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon HenriksenCAMLprim value llvm_set_global_constant(value Flag, LLVMValueRef GlobalVar) { 793c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen LLVMSetGlobalConstant(GlobalVar, Bool_val(Flag)); 794c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen return Val_unit; 795c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen} 796c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen 7976ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar/*--... Operations on aliases ..............................................--*/ 7986ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar 7996ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick TryzelaarCAMLprim LLVMValueRef llvm_add_alias(LLVMModuleRef M, LLVMTypeRef Ty, 8006ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar LLVMValueRef Aliasee, value Name) { 8016ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar return LLVMAddAlias(M, Ty, Aliasee, String_val(Name)); 8026ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar} 8036ba5c56cf5b1609ec4af45f4901118865a8ed9b6Erick Tryzelaar 80446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on functions ............................................--*/ 80546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 8064733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(function, Function, LLVMModuleRef, LLVMValueRef, 8074733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetGlobalParent) 8084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 80946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 81046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_declare_function(value Name, LLVMTypeRef Ty, 81146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 8126d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 8136d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 8146d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if (LLVMGetElementType(LLVMTypeOf(Fn)) != Ty) 81557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen return LLVMConstBitCast(Fn, LLVMPointerType(Ty, 0)); 8166d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen return Fn; 8176d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 81846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMAddFunction(M, String_val(Name), Ty); 81946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 82046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 8216d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen/* string -> llmodule -> llvalue option */ 8226d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenCAMLprim value llvm_lookup_function(value Name, LLVMModuleRef M) { 8236d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLparam1(Name); 8246d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen LLVMValueRef Fn; 8256d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) { 82675e290f67aa7af3c0be993df4845c0defaf6ffa3Gordon Henriksen value Option = alloc(1, 0); 8276d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen Field(Option, 0) = (value) Fn; 8286d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Option); 8296d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen } 8306d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen CAMLreturn(Val_int(0)); 8316d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen} 8326d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen 83346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> lltype -> llmodule -> llvalue */ 83446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_define_function(value Name, LLVMTypeRef Ty, 83546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMModuleRef M) { 83646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Fn = LLVMAddFunction(M, String_val(Name), Ty); 837b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMAppendBasicBlockInContext(LLVMGetTypeContext(Ty), Fn, "entry"); 83846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Fn; 83946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 84046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 84146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> unit */ 84246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_function(LLVMValueRef Fn) { 84346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteFunction(Fn); 84446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 84546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 84646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 84746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 84846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_is_intrinsic(LLVMValueRef Fn) { 84946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMGetIntrinsicID(Fn)); 85046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 85146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 85246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> int */ 85346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_function_call_conv(LLVMValueRef Fn) { 85446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_int(LLVMGetFunctionCallConv(Fn)); 85546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 85646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 85746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* int -> llvalue -> unit */ 85846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_set_function_call_conv(value Id, LLVMValueRef Fn) { 85946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMSetFunctionCallConv(Fn, Int_val(Id)); 86046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 86146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 86246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 86380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* llvalue -> string option */ 8645eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_gc(LLVMValueRef Fn) { 8655eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen const char *GC; 86680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLparam0(); 86780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLlocal2(Name, Option); 86880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 8695eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen if ((GC = LLVMGetGC(Fn))) { 8705eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen Name = copy_string(GC); 87180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 87280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Option = alloc(1, 0); 87380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen Field(Option, 0) = Name; 87480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Option); 87580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } else { 87680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen CAMLreturn(Val_int(0)); 87780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen } 87880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 87980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 88080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen/* string option -> llvalue -> unit */ 8815eca075b74d62c621b160aa216b4cd50829a2cc7Gordon HenriksenCAMLprim value llvm_set_gc(value GC, LLVMValueRef Fn) { 8825eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen LLVMSetGC(Fn, GC == Val_int(0)? 0 : String_val(Field(GC, 0))); 88380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen return Val_unit; 88480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen} 88580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen 886e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 887e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_function_attr(LLVMValueRef Arg, value PA) { 8880941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddFunctionAttr(Arg, Int_val(PA)); 889e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 890e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 891e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 892e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 893e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_function_attr(LLVMValueRef Arg, value PA) { 8940941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveFunctionAttr(Arg, Int_val(PA)); 895e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 896e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 8974733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/*--... Operations on parameters ...........................................--*/ 8984733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 8994733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS(param, Param, LLVMValueRef, LLVMValueRef, LLVMGetParamParent) 9004733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 9014733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen/* llvalue -> int -> llvalue */ 9024733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenCAMLprim LLVMValueRef llvm_param(LLVMValueRef Fn, value Index) { 9034733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return LLVMGetParam(Fn, Int_val(Index)); 9044733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 9054733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 906e12741055015ef5b98e1225834fcece0a3f04029Erick Tryzelaar/* llvalue -> llvalue */ 907e12741055015ef5b98e1225834fcece0a3f04029Erick TryzelaarCAMLprim value llvm_params(LLVMValueRef Fn) { 9084733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen value Params = alloc(LLVMCountParams(Fn), 0); 9094733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen LLVMGetParams(Fn, (LLVMValueRef *) Op_val(Params)); 9104733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen return Params; 9114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen} 9124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 913e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 914e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_param_attr(LLVMValueRef Arg, value PA) { 9150941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddAttribute(Arg, Int_val(PA)); 916e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 917e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 918e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 919e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> Attribute.t -> unit */ 920e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_param_attr(LLVMValueRef Arg, value PA) { 9210941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveAttribute(Arg, Int_val(PA)); 922e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 923e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 924e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 925e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> unit */ 926e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_set_param_alignment(LLVMValueRef Arg, value align) { 927e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands LLVMSetParamAlignment(Arg, Int_val(align)); 928e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 929e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 930e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 93146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Operations on basic blocks .........................................--*/ 93246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 9334733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenDEFINE_ITERATORS( 9344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen block, BasicBlock, LLVMValueRef, LLVMBasicBlockRef, LLVMGetBasicBlockParent) 9354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen 93646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock array */ 93746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_basic_blocks(LLVMValueRef Fn) { 93846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value MLArray = alloc(LLVMCountBasicBlocks(Fn), 0); 93946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMGetBasicBlocks(Fn, (LLVMBasicBlockRef *) Op_val(MLArray)); 94046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return MLArray; 94146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 94246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 94346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> unit */ 94446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_delete_block(LLVMBasicBlockRef BB) { 94546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDeleteBasicBlock(BB); 94646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_unit; 94746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 94846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 94946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llvalue -> llbasicblock */ 950b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_append_block(LLVMContextRef Context, value Name, 951b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMValueRef Fn) { 952b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMAppendBasicBlockInContext(Context, Fn, String_val(Name)); 95346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 95446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 95546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* string -> llbasicblock -> llbasicblock */ 956b02b87882788e57e180c6b903a37ced0db1ce828Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insert_block(LLVMContextRef Context, value Name, 957b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar LLVMBasicBlockRef BB) { 958b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar return LLVMInsertBasicBlockInContext(Context, BB, String_val(Name)); 95946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 96046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 96146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> bool */ 96246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim value llvm_value_is_block(LLVMValueRef Val) { 96346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return Val_bool(LLVMValueIsBasicBlock(Val)); 96446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 96546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 966033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/*--... Operations on instructions .........................................--*/ 967033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 968033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenDEFINE_ITERATORS(instr, Instruction, LLVMBasicBlockRef, LLVMValueRef, 969033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMGetInstructionParent) 970033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 971033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen 972cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/*--... Operations on call sites ...........................................--*/ 973cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 974cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* llvalue -> int */ 975cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_instruction_call_conv(LLVMValueRef Inst) { 976cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_int(LLVMGetInstructionCallConv(Inst)); 977cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 978cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 979cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen/* int -> llvalue -> unit */ 980cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon HenriksenCAMLprim value llvm_set_instruction_call_conv(value CC, LLVMValueRef Inst) { 981cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen LLVMSetInstructionCallConv(Inst, Int_val(CC)); 982cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen return Val_unit; 983cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen} 984cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen 985e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 986e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_add_instruction_param_attr(LLVMValueRef Instr, 987e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 988e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 9890941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMAddInstrAttribute(Instr, Int_val(index), Int_val(PA)); 990e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 991e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 992e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 993e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands/* llvalue -> int -> Attribute.t -> unit */ 994e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan SandsCAMLprim value llvm_remove_instruction_param_attr(LLVMValueRef Instr, 995e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value index, 996e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands value PA) { 9970941534c712d77243d9dda5e8c1d927563b4edffChris Lattner LLVMRemoveInstrAttribute(Instr, Int_val(index), Int_val(PA)); 998e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands return Val_unit; 999e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands} 1000e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands 100107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--... Operations on call instructions (only) .............................--*/ 100207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 100307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* llvalue -> bool */ 100407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_is_tail_call(LLVMValueRef CallInst) { 100507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_bool(LLVMIsTailCall(CallInst)); 100607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 100707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 100807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/* bool -> llvalue -> unit */ 100907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon HenriksenCAMLprim value llvm_set_tail_call(value IsTailCall, 101007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMValueRef CallInst) { 101107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen LLVMSetTailCall(CallInst, Bool_val(IsTailCall)); 101207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen return Val_unit; 101307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen} 101407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen 10152618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--... Operations on phi nodes ............................................--*/ 10162618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10172618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) -> llvalue -> unit */ 10182618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_add_incoming(value Incoming, LLVMValueRef PhiNode) { 10192618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, 10202618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMValueRef*) &Field(Incoming, 0), 10212618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Incoming, 1), 10222618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 1); 10232618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return Val_unit; 10242618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 10252618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10262618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* llvalue -> (llvalue * llbasicblock) list */ 10272618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim value llvm_incoming(LLVMValueRef PhiNode) { 10282618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen unsigned I; 10292618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLparam0(); 10302618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLlocal3(Hd, Tl, Tmp); 10312618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10322618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen /* Build a tuple list of them. */ 10332618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Val_int(0); 10342618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (I = LLVMCountIncoming(PhiNode); I != 0; ) { 10352618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = alloc(2, 0); 10362618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 0, (value) LLVMGetIncomingValue(PhiNode, --I)); 10372618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Hd, 1, (value) LLVMGetIncomingBlock(PhiNode, I)); 10382618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10392618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tmp = alloc(2, 0); 10402618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 0, Hd); 10412618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Store_field(Tmp, 1, Tl); 10422618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Tl = Tmp; 10432618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 10442618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 10452618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen CAMLreturn(Tl); 10462618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen} 10472618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 104846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 104946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/ 105046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 105146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#define Builder_val(v) (*(LLVMBuilderRef *)(Data_custom_val(v))) 105246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1053a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic void llvm_finalize_builder(value B) { 105446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMDisposeBuilder(Builder_val(B)); 105546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 105646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 105746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenstatic struct custom_operations builder_ops = { 105889f6d88db334ba088672ae0753deb7d7b7509bacDuncan Sands (char *) "IRBuilder", 105946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llvm_finalize_builder, 106046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_compare_default, 106146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_hash_default, 106246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_serialize_default, 106346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen custom_deserialize_default 106446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}; 106546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1066a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksenstatic value alloc_builder(LLVMBuilderRef B) { 1067a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen value V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); 1068a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen Builder_val(V) = B; 1069a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen return V; 1070a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1071a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 10725371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar/* llcontext -> llbuilder */ 10735371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick TryzelaarCAMLprim value llvm_builder(LLVMContextRef C) { 10745371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar return alloc_builder(LLVMCreateBuilderInContext(C)); 1075a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen} 1076a09a89983bf51aa70d3067282e4817ec3057eb51Gordon Henriksen 1077033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen/* (llbasicblock, llvalue) llpos -> llbuilder -> unit */ 1078033d778249e59548c495f39166a53fa80f48eb91Gordon HenriksenCAMLprim value llvm_position_builder(value Pos, value B) { 1079033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen if (Tag_val(Pos) == 0) { 1080033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMBasicBlockRef BB = (LLVMBasicBlockRef) Op_val(Field(Pos, 0)); 1081033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderAtEnd(Builder_val(B), BB); 1082033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } else { 1083033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMValueRef I = (LLVMValueRef) Op_val(Field(Pos, 0)); 1084033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen LLVMPositionBuilderBefore(Builder_val(B), I); 1085033d778249e59548c495f39166a53fa80f48eb91Gordon Henriksen } 10868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen return Val_unit; 10878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} 108846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1089dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/* llbuilder -> llbasicblock */ 1090628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim LLVMBasicBlockRef llvm_insertion_block(value B) { 1091dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen LLVMBasicBlockRef InsertBlock = LLVMGetInsertBlock(Builder_val(B)); 1092dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen if (!InsertBlock) 1093dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen raise_not_found(); 1094dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen return InsertBlock; 1095dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen} 1096dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen 10975c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar/* llvalue -> string -> llbuilder -> unit */ 1098628b76ecb326d104d2a00c47990c26b22ca9fd42Erick TryzelaarCAMLprim value llvm_insert_into_builder(LLVMValueRef I, value Name, value B) { 1099628b76ecb326d104d2a00c47990c26b22ca9fd42Erick Tryzelaar LLVMInsertIntoBuilderWithName(Builder_val(B), I, String_val(Name)); 11005c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar return Val_unit; 11015c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar} 11025c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar 110346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--... Metadata ...........................................................--*/ 110446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 110546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 110646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_current_debug_location(value B, LLVMValueRef V) { 110746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), V); 110846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 110946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 111046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 111146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> unit */ 111246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_clear_current_debug_location(value B) { 111346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetCurrentDebugLocation(Builder_val(B), NULL); 111446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 111546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 111646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 111746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue option */ 111846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_current_debug_location(value B) { 111946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLparam0(); 112046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMValueRef L; 112146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar if ((L = LLVMGetCurrentDebugLocation(Builder_val(B)))) { 112246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar value Option = alloc(1, 0); 112346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar Field(Option, 0) = (value) L; 112446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Option); 112546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar } 112646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar CAMLreturn(Val_int(0)); 112746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 112846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 112946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* llbuilder -> llvalue -> unit */ 113046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarCAMLprim value llvm_set_inst_debug_location(value B, LLVMValueRef V) { 113146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar LLVMSetInstDebugLocation(Builder_val(B), V); 113246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar return Val_unit; 113346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar} 113446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 113546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar 113646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Terminators ........................................................--*/ 113746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 113846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 113946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret_void(value B) { 114046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRetVoid(Builder_val(B)); 114146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 114246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 114346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbuilder -> llvalue */ 114446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ret(LLVMValueRef Val, value B) { 114546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildRet(Builder_val(B), Val); 114646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 114746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 11486793dd9769047706acf34420586716450344fb66Erick Tryzelaar/* llvalue array -> llbuilder -> llvalue */ 11496793dd9769047706acf34420586716450344fb66Erick TryzelaarCAMLprim LLVMValueRef llvm_build_aggregate_ret(value RetVals, value B) { 11506793dd9769047706acf34420586716450344fb66Erick Tryzelaar return LLVMBuildAggregateRet(Builder_val(B), (LLVMValueRef *) Op_val(RetVals), 11516793dd9769047706acf34420586716450344fb66Erick Tryzelaar Wosize_val(RetVals)); 11526793dd9769047706acf34420586716450344fb66Erick Tryzelaar} 11536793dd9769047706acf34420586716450344fb66Erick Tryzelaar 115446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbasicblock -> llbuilder -> llvalue */ 115546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_br(LLVMBasicBlockRef BB, value B) { 115646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBr(Builder_val(B), BB); 115746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 115846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 115946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> llbasicblock -> llbuilder -> llvalue */ 116046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_cond_br(LLVMValueRef If, 116146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 116246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 116346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 116446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCondBr(Builder_val(B), If, Then, Else); 116546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 116646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 116746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llbasicblock -> int -> llbuilder -> llvalue */ 116846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_switch(LLVMValueRef Of, 116946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Else, 117046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value EstimatedCount, 117146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 117246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSwitch(Builder_val(B), Of, Else, Int_val(EstimatedCount)); 117346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 117446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 11751430425539fd8004e47ab664c5e5fe5dc23c6d58Erick Tryzelaar/* llvalue -> llvalue -> llbasicblock -> unit */ 11761430425539fd8004e47ab664c5e5fe5dc23c6d58Erick TryzelaarCAMLprim value llvm_add_case(LLVMValueRef Switch, LLVMValueRef OnVal, 117721491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMBasicBlockRef Dest) { 117821491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen LLVMAddCase(Switch, OnVal, Dest); 117921491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen return Val_unit; 118021491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen} 118121491edbf4027df4db559eb1a9aa8fbf3779cfabGordon Henriksen 1182c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar/* llvalue -> llbasicblock -> llbuilder -> llvalue */ 1183c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarCAMLprim LLVMValueRef llvm_build_indirect_br(LLVMValueRef Addr, 1184c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar value EstimatedDests, 1185c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar value B) { 1186c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar return LLVMBuildIndirectBr(Builder_val(B), Addr, EstimatedDests); 1187c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar} 1188c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar 1189c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar/* llvalue -> llvalue -> llbasicblock -> unit */ 1190c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarCAMLprim value llvm_add_destination(LLVMValueRef IndirectBr, 1191c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar LLVMBasicBlockRef Dest) { 1192c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar LLVMAddDestination(IndirectBr, Dest); 1193c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar return Val_unit; 1194c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar} 1195c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar 119646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 119746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 119846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_nat(LLVMValueRef Fn, value Args, 119946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Then, 120046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMBasicBlockRef Catch, 120146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 120246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInvoke(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Args), 120346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Args), Then, Catch, String_val(Name)); 120446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 120546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 120646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> llbasicblock -> llbasicblock -> string -> 120746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen llbuilder -> llvalue */ 120846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_invoke_bc(value Args[], int NumArgs) { 120946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return llvm_build_invoke_nat((LLVMValueRef) Args[0], Args[1], 121046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[2], 121146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMBasicBlockRef) Args[3], 121246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Args[4], Args[5]); 121346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 121446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 121548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok EdwinCAMLprim LLVMValueRef llvm_build_landingpad(LLVMTypeRef Ty, LLVMValueRef PersFn, 121648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin value NumClauses, value Name, 121748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin value B) { 121848488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin return LLVMBuildLandingPad(Builder_val(B), Ty, PersFn, Int_val(NumClauses), 121948488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin String_val(Name)); 122048488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin} 122148488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin 122248488a64fadb2f99706029e51ae4c06fcfac5cdbTorok EdwinCAMLprim value llvm_set_cleanup(LLVMValueRef LandingPadInst, value flag) 122348488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin{ 122448488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin LLVMSetCleanup(LandingPadInst, Bool_val(flag)); 122548488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin return Val_unit; 122648488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin} 122748488a64fadb2f99706029e51ae4c06fcfac5cdbTorok Edwin 122846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llbuilder -> llvalue */ 122946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_unreachable(value B) { 123046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUnreachable(Builder_val(B)); 123146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 123246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 123346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Arithmetic .........................................................--*/ 123446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 123546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 123646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_add(LLVMValueRef LHS, LLVMValueRef RHS, 123746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 123846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAdd(Builder_val(B), LHS, RHS, String_val(Name)); 123946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 124046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 124146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1242e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_add(LLVMValueRef LHS, LLVMValueRef RHS, 1243e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1244e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildNSWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1245e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1246e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1247e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 124819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_add(LLVMValueRef LHS, LLVMValueRef RHS, 124919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 125019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWAdd(Builder_val(B), LHS, RHS, String_val(Name)); 125119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 125219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 125319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1254e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fadd(LLVMValueRef LHS, LLVMValueRef RHS, 1255e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1256e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFAdd(Builder_val(B), LHS, RHS, String_val(Name)); 1257e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1258e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1259e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 126046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sub(LLVMValueRef LHS, LLVMValueRef RHS, 126146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 126246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSub(Builder_val(B), LHS, RHS, String_val(Name)); 126346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 126446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 126546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 126619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 126719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 126819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWSub(Builder_val(B), LHS, RHS, String_val(Name)); 126919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 127019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 127119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 127219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_sub(LLVMValueRef LHS, LLVMValueRef RHS, 127319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 127419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWSub(Builder_val(B), LHS, RHS, String_val(Name)); 127519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 127619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 127719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1278e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fsub(LLVMValueRef LHS, LLVMValueRef RHS, 1279e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1280e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFSub(Builder_val(B), LHS, RHS, String_val(Name)); 1281e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1282e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1283e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 128446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_mul(LLVMValueRef LHS, LLVMValueRef RHS, 128546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 128646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildMul(Builder_val(B), LHS, RHS, String_val(Name)); 128746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 128846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 128946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 129019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 129119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 129219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWMul(Builder_val(B), LHS, RHS, String_val(Name)); 129319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 129419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 129519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 129619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_mul(LLVMValueRef LHS, LLVMValueRef RHS, 129719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 129819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWMul(Builder_val(B), LHS, RHS, String_val(Name)); 129919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 130019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 130119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1302e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fmul(LLVMValueRef LHS, LLVMValueRef RHS, 1303e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1304e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFMul(Builder_val(B), LHS, RHS, String_val(Name)); 1305e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1306e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1307e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 130846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_udiv(LLVMValueRef LHS, LLVMValueRef RHS, 130946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 131046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUDiv(Builder_val(B), LHS, RHS, String_val(Name)); 131146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 131246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 131446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 131546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 131646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 131746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 131846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 131946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1320e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_exact_sdiv(LLVMValueRef LHS, LLVMValueRef RHS, 1321e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1322e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExactSDiv(Builder_val(B), LHS, RHS, String_val(Name)); 1323e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1324e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1325e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 132646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fdiv(LLVMValueRef LHS, LLVMValueRef RHS, 132746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 132846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFDiv(Builder_val(B), LHS, RHS, String_val(Name)); 132946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 133046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 133146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 133246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_urem(LLVMValueRef LHS, LLVMValueRef RHS, 133346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 133446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildURem(Builder_val(B), LHS, RHS, String_val(Name)); 133546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 133646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 133746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 133846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_srem(LLVMValueRef LHS, LLVMValueRef RHS, 133946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 134046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSRem(Builder_val(B), LHS, RHS, String_val(Name)); 134146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 134346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 134446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_frem(LLVMValueRef LHS, LLVMValueRef RHS, 134546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 134646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFRem(Builder_val(B), LHS, RHS, String_val(Name)); 134746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 134846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 134946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 135046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shl(LLVMValueRef LHS, LLVMValueRef RHS, 135146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 135246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShl(Builder_val(B), LHS, RHS, String_val(Name)); 135346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 135446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 135546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 135646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_lshr(LLVMValueRef LHS, LLVMValueRef RHS, 135746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 135846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLShr(Builder_val(B), LHS, RHS, String_val(Name)); 135946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 136046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 136146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 136246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_ashr(LLVMValueRef LHS, LLVMValueRef RHS, 136346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 136446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAShr(Builder_val(B), LHS, RHS, String_val(Name)); 136546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 136646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 136746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 136846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_and(LLVMValueRef LHS, LLVMValueRef RHS, 136946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 137046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAnd(Builder_val(B), LHS, RHS, String_val(Name)); 137146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 137246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 137346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 137446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_or(LLVMValueRef LHS, LLVMValueRef RHS, 137546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 137646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildOr(Builder_val(B), LHS, RHS, String_val(Name)); 137746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 137846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 137946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 138046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_xor(LLVMValueRef LHS, LLVMValueRef RHS, 138146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 138246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildXor(Builder_val(B), LHS, RHS, String_val(Name)); 138346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 138446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 138546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 138646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_neg(LLVMValueRef X, 138746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 138846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNeg(Builder_val(B), X, String_val(Name)); 138946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 139046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 139146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 139219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nsw_neg(LLVMValueRef X, 139319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 139419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNSWNeg(Builder_val(B), X, String_val(Name)); 139519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 139619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 139719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 139819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_nuw_neg(LLVMValueRef X, 139919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 140019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildNUWNeg(Builder_val(B), X, String_val(Name)); 140119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 140219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 140319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 140419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarCAMLprim LLVMValueRef llvm_build_fneg(LLVMValueRef X, 140519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar value Name, value B) { 140619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar return LLVMBuildFNeg(Builder_val(B), X, String_val(Name)); 140719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar} 140819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar 140919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 141046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_not(LLVMValueRef X, 141146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 141246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildNot(Builder_val(B), X, String_val(Name)); 141346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 141446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 141546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Memory .............................................................--*/ 141646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 141746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> string -> llbuilder -> llvalue */ 141846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_alloca(LLVMTypeRef Ty, 141946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 142046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildAlloca(Builder_val(B), Ty, String_val(Name)); 142146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 142246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 142346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* lltype -> llvalue -> string -> llbuilder -> llvalue */ 142446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_array_alloca(LLVMTypeRef Ty, LLVMValueRef Size, 142546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 142646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildArrayAlloca(Builder_val(B), Ty, Size, String_val(Name)); 142746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 142846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 142946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> string -> llbuilder -> llvalue */ 143046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_load(LLVMValueRef Pointer, 143146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 143246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildLoad(Builder_val(B), Pointer, String_val(Name)); 143346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 143446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 143546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llbuilder -> llvalue */ 143646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_store(LLVMValueRef Value, LLVMValueRef Pointer, 143746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value B) { 143846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildStore(Builder_val(B), Value, Pointer); 143946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 144046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 144146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 144246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_gep(LLVMValueRef Pointer, value Indices, 144346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 144446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildGEP(Builder_val(B), Pointer, 144546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen (LLVMValueRef *) Op_val(Indices), Wosize_val(Indices), 144646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 144746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 144846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1449e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 1450e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_in_bounds_gep(LLVMValueRef Pointer, 1451e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Indices, value Name, 1452e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1453e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInBoundsGEP(Builder_val(B), Pointer, 1454e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar (LLVMValueRef *) Op_val(Indices), 1455e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar Wosize_val(Indices), String_val(Name)); 1456e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1457e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1458e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1459e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_struct_gep(LLVMValueRef Pointer, 1460c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner value Index, value Name, 1461e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1462c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner return LLVMBuildStructGEP(Builder_val(B), Pointer, 1463c3c3be582de556f2a199f9154ec48f00be8eb077Chris Lattner Int_val(Index), String_val(Name)); 1464e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1465e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1466e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1467e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_string(value Str, value Name, value B) { 1468e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalString(Builder_val(B), String_val(Str), 1469e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1470e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1471e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1472e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* string -> string -> llbuilder -> llvalue */ 1473e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_global_stringptr(value Str, value Name, 1474e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1475e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildGlobalStringPtr(Builder_val(B), String_val(Str), 1476e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1477e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1478e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 147946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Casts ..............................................................--*/ 148046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 148146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 148246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_trunc(LLVMValueRef X, LLVMTypeRef Ty, 148346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 148446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildTrunc(Builder_val(B), X, Ty, String_val(Name)); 148546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 148646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 148746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 148846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_zext(LLVMValueRef X, LLVMTypeRef Ty, 148946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 149046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildZExt(Builder_val(B), X, Ty, String_val(Name)); 149146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 149246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 149346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 149446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sext(LLVMValueRef X, LLVMTypeRef Ty, 149546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 149646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSExt(Builder_val(B), X, Ty, String_val(Name)); 149746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 149846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 149946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 150046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptoui(LLVMValueRef X, LLVMTypeRef Ty, 150146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 150246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToUI(Builder_val(B), X, Ty, String_val(Name)); 150346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 150446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 150546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 150646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptosi(LLVMValueRef X, LLVMTypeRef Ty, 150746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 150846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPToSI(Builder_val(B), X, Ty, String_val(Name)); 150946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 151046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 151146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 151246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_uitofp(LLVMValueRef X, LLVMTypeRef Ty, 151346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 151446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildUIToFP(Builder_val(B), X, Ty, String_val(Name)); 151546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 151646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 151746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 151846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_sitofp(LLVMValueRef X, LLVMTypeRef Ty, 151946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 152046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSIToFP(Builder_val(B), X, Ty, String_val(Name)); 152146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 152246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 152346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 152446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fptrunc(LLVMValueRef X, LLVMTypeRef Ty, 152546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 152646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPTrunc(Builder_val(B), X, Ty, String_val(Name)); 152746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 152846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 152946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 153046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fpext(LLVMValueRef X, LLVMTypeRef Ty, 153146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 153246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFPExt(Builder_val(B), X, Ty, String_val(Name)); 153346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 153446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 153546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 153646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_prttoint(LLVMValueRef X, LLVMTypeRef Ty, 153746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildPtrToInt(Builder_val(B), X, Ty, String_val(Name)); 153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 154046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 154146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 154246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_inttoptr(LLVMValueRef X, LLVMTypeRef Ty, 154346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 154446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildIntToPtr(Builder_val(B), X, Ty, String_val(Name)); 154546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 154646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 154746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 154846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 154946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 155046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildBitCast(Builder_val(B), X, Ty, String_val(Name)); 155146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1553e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1554e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_zext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1555e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1556e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildZExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1557e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1558e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1559e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1560e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_sext_or_bitcast(LLVMValueRef X, LLVMTypeRef Ty, 1561e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1562e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildSExtOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1563e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1564e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1565e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1566e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_trunc_or_bitcast(LLVMValueRef X, 1567e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMTypeRef Ty, value Name, 1568e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1569e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildTruncOrBitCast(Builder_val(B), X, Ty, String_val(Name)); 1570e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1571e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1572e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1573e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_pointercast(LLVMValueRef X, LLVMTypeRef Ty, 1574e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1575e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPointerCast(Builder_val(B), X, Ty, String_val(Name)); 1576e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1577e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1578e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1579e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_intcast(LLVMValueRef X, LLVMTypeRef Ty, 1580e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1581e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIntCast(Builder_val(B), X, Ty, String_val(Name)); 1582e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1583e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1584e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 1585e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_fpcast(LLVMValueRef X, LLVMTypeRef Ty, 1586e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1587e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildFPCast(Builder_val(B), X, Ty, String_val(Name)); 1588e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1589e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 159046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Comparisons ........................................................--*/ 159146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1592404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Icmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 159346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_icmp(value Pred, 159446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 159546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 159646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildICmp(Builder_val(B), Int_val(Pred) + LLVMIntEQ, LHS, RHS, 159746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 159846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 159946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1600404a1942e43ca967700cc2608eb97b863add2677Gordon Henriksen/* Fcmp.t -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 160146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_fcmp(value Pred, 160246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef LHS, LLVMValueRef RHS, 160346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 160446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildFCmp(Builder_val(B), Int_val(Pred), LHS, RHS, 160546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 160646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 160746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 160846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--... Miscellaneous instructions .........................................--*/ 160946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 16102618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/* (llvalue * llbasicblock) list -> string -> llbuilder -> llvalue */ 16112618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenCAMLprim LLVMValueRef llvm_build_phi(value Incoming, value Name, value B) { 16122618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd, Tl; 16132618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMValueRef FirstValue, PhiNode; 16142618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 16152618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen assert(Incoming != Val_int(0) && "Empty list passed to Llvm.build_phi!"); 16162618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 16172618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen Hd = Field(Incoming, 0); 16182618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen FirstValue = (LLVMValueRef) Field(Hd, 0); 16192618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen PhiNode = LLVMBuildPhi(Builder_val(B), LLVMTypeOf(FirstValue), 16202618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen String_val(Name)); 16212618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 16222618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen for (Tl = Incoming; Tl != Val_int(0); Tl = Field(Tl, 1)) { 16232618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen value Hd = Field(Tl, 0); 16242618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen LLVMAddIncoming(PhiNode, (LLVMValueRef*) &Field(Hd, 0), 16252618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen (LLVMBasicBlockRef*) &Field(Hd, 1), 1); 16262618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen } 16272618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen 16282618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen return PhiNode; 162946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 163046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 163146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue array -> string -> llbuilder -> llvalue */ 163246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_call(LLVMValueRef Fn, value Params, 163346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 163446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildCall(Builder_val(B), Fn, (LLVMValueRef *) Op_val(Params), 163546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Wosize_val(Params), String_val(Name)); 163646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 163746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 163946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_select(LLVMValueRef If, 164046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Then, LLVMValueRef Else, 164146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 164246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildSelect(Builder_val(B), If, Then, Else, String_val(Name)); 164346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 164446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 164546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> lltype -> string -> llbuilder -> llvalue */ 164646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_va_arg(LLVMValueRef List, LLVMTypeRef Ty, 164746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 164846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildVAArg(Builder_val(B), List, Ty, String_val(Name)); 164946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 165046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 165146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 165246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_extractelement(LLVMValueRef Vec, 165346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 165446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 165546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildExtractElement(Builder_val(B), Vec, Idx, String_val(Name)); 165646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 165746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 165846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 165946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_insertelement(LLVMValueRef Vec, 166046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Element, 166146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Idx, 166246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 166346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildInsertElement(Builder_val(B), Vec, Element, Idx, 166446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen String_val(Name)); 166546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 166646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 166746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* llvalue -> llvalue -> llvalue -> string -> llbuilder -> llvalue */ 166846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenCAMLprim LLVMValueRef llvm_build_shufflevector(LLVMValueRef V1, LLVMValueRef V2, 166946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LLVMValueRef Mask, 167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen value Name, value B) { 167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen return LLVMBuildShuffleVector(Builder_val(B), V1, V2, Mask, String_val(Name)); 167246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} 167346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 1674e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> int -> string -> llbuilder -> llvalue */ 1675e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_extractvalue(LLVMValueRef Aggregate, 1676e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Idx, value Name, value B) { 1677e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildExtractValue(Builder_val(B), Aggregate, Int_val(Idx), 1678e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1679e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1680e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1681e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> int -> string -> llbuilder -> llvalue */ 1682e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_insertvalue(LLVMValueRef Aggregate, 1683e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar LLVMValueRef Val, value Idx, 1684e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1685e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildInsertValue(Builder_val(B), Aggregate, Val, Int_val(Idx), 1686e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar String_val(Name)); 1687e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1688e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1689e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1690e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_null(LLVMValueRef Val, value Name, 1691e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1692e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNull(Builder_val(B), Val, String_val(Name)); 1693e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1694e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1695e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> string -> llbuilder -> llvalue */ 1696e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_is_not_null(LLVMValueRef Val, value Name, 1697e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value B) { 1698e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildIsNotNull(Builder_val(B), Val, String_val(Name)); 1699e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 1700e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar 1701e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar/* llvalue -> llvalue -> string -> llbuilder -> llvalue */ 1702e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick TryzelaarCAMLprim LLVMValueRef llvm_build_ptrdiff(LLVMValueRef LHS, LLVMValueRef RHS, 1703e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar value Name, value B) { 1704e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar return LLVMBuildPtrDiff(Builder_val(B), LHS, RHS, String_val(Name)); 1705e0f8bf6cbe1bee904021a8ae45008e3703dde283Erick Tryzelaar} 17061ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen 1707da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1708da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/ 1709da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1710da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* string -> llmemorybuffer 1711da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1712da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_of_file(value Path) { 1713da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLparam1(Path); 1714da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1715da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1716da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1717da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithContentsOfFile(String_val(Path), 1718da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen &MemBuf, &Message)) 1719da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1720da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1721da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen CAMLreturn((value) MemBuf); 1722da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1723da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1724da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* unit -> llmemorybuffer 1725da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raises IoError msg on error */ 1726da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim LLVMMemoryBufferRef llvm_memorybuffer_of_stdin(value Unit) { 1727da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen char *Message; 1728da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMMemoryBufferRef MemBuf; 1729da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1730da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen if (LLVMCreateMemoryBufferWithSTDIN(&MemBuf, &Message)) 1731da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen llvm_raise(llvm_ioerror_exn, Message); 1732da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1733da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return MemBuf; 1734da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1735da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1736da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/* llmemorybuffer -> unit */ 1737da1435f86ebc9886dd7704294e01d192d79e069cGordon HenriksenCAMLprim value llvm_memorybuffer_dispose(LLVMMemoryBufferRef MemBuf) { 1738da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen LLVMDisposeMemoryBuffer(MemBuf); 1739da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen return Val_unit; 1740da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen} 1741da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 1742d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/*===-- Pass Managers -----------------------------------------------------===*/ 1743d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1744d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* unit -> [ `Module ] PassManager.t */ 1745d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim LLVMPassManagerRef llvm_passmanager_create(value Unit) { 1746d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return LLVMCreatePassManager(); 1747d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1748d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1749d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llmodule -> [ `Function ] PassManager.t -> bool */ 1750d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_module(LLVMModuleRef M, 1751d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef PM) { 1752d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunPassManager(PM, M)); 1753d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1754d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1755d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1756d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_initialize(LLVMPassManagerRef FPM) { 1757d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMInitializeFunctionPassManager(FPM)); 1758d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1759d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1760d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* llvalue -> [ `Function ] PassManager.t -> bool */ 1761d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_run_function(LLVMValueRef F, 1762d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMPassManagerRef FPM) { 1763d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMRunFunctionPassManager(FPM, F)); 1764d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1765d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1766d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* [ `Function ] PassManager.t -> bool */ 1767d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_finalize(LLVMPassManagerRef FPM) { 1768d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_bool(LLVMFinalizeFunctionPassManager(FPM)); 1769d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1770d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen 1771d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/* PassManager.any PassManager.t -> unit */ 1772d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenCAMLprim value llvm_passmanager_dispose(LLVMPassManagerRef PM) { 1773d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen LLVMDisposePassManager(PM); 1774d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen return Val_unit; 1775d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen} 1776