1624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/*===-- ipo_ocaml.c - LLVM Ocaml Glue -------------------*- C++ -*-===*\ 2624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 3624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* The LLVM Compiler Infrastructure *| 4624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 5624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* This file is distributed under the University of Illinois Open Source *| 6624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* License. See LICENSE.TXT for details. *| 7624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 8624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|*===----------------------------------------------------------------------===*| 9624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 10624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* This file glues LLVM's ocaml interface to its C interface. These functions *| 11624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* are by and large transparent wrappers to the corresponding C functions. *| 12624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 13624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* Note that these functions intentionally take liberties with the CAMLparamX *| 14624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* macros, since most of the parameters are not GC heap objects. *| 15624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin|* *| 16624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin\*===----------------------------------------------------------------------===*/ 17624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 18624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin#include "llvm-c/Transforms/IPO.h" 19624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin#include "caml/mlvalues.h" 20624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin#include "caml/misc.h" 21624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 22624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 23624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_argument_promotion(LLVMPassManagerRef PM) { 24624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddArgumentPromotionPass(PM); 25624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 26624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 27624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 28624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 29624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_constant_merge(LLVMPassManagerRef PM) { 30624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddConstantMergePass(PM); 31624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 32624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 33624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 34624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 35624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_dead_arg_elimination(LLVMPassManagerRef PM) { 36624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddDeadArgEliminationPass(PM); 37624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 38624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 39624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 40624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 41624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_function_attrs(LLVMPassManagerRef PM) { 42624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddFunctionAttrsPass(PM); 43624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 44624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 45624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 46624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 47624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_function_inlining(LLVMPassManagerRef PM) { 48624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddFunctionInliningPass(PM); 49624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 50624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 51624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 52624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 53624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_always_inliner_pass(LLVMPassManagerRef PM) { 54624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddAlwaysInlinerPass(PM); 55624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 56624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 57624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 58624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 59624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_global_dce(LLVMPassManagerRef PM) { 60624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddGlobalDCEPass(PM); 61624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 62624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 63624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 64624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 65624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_global_optimizer(LLVMPassManagerRef PM) { 66624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddGlobalOptimizerPass(PM); 67624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 68624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 69624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 70624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 71624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_ipc_propagation(LLVMPassManagerRef PM) { 72624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddIPConstantPropagationPass(PM); 73624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 74624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 75624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 76624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 77624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_prune_eh(LLVMPassManagerRef PM) { 78624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddPruneEHPass(PM); 79624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 80624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 81624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 82624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 83624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_ipsccp(LLVMPassManagerRef PM) { 84624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddIPSCCPPass(PM); 85624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 86624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 87624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 88624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> bool -> unit */ 89624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_internalize(LLVMPassManagerRef PM, value AllButMain) { 90624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddInternalizePass(PM, Bool_val(AllButMain)); 91624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 92624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 93624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 94624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 95624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_strip_dead_prototypes(LLVMPassManagerRef PM) { 96624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddStripDeadPrototypesPass(PM); 97624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 98624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 99624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin 100624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin/* [`Module] Llvm.PassManager.t -> unit */ 101624c5edcd485a210faa61113f38938bdb6a0cc58Torok EdwinCAMLprim value llvm_add_strip_symbols(LLVMPassManagerRef PM) { 102624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin LLVMAddStripSymbolsPass(PM); 103624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin return Val_unit; 104624c5edcd485a210faa61113f38938bdb6a0cc58Torok Edwin} 105