1 /*===-- ipo_ocaml.c - LLVM OCaml Glue ---------------------------*- C++ -*-===*\ 2 |* *| 3 |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| 4 |* Exceptions. *| 5 |* See https://llvm.org/LICENSE.txt for license information. *| 6 |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| 7 |* *| 8 |*===----------------------------------------------------------------------===*| 9 |* *| 10 |* This file glues LLVM's OCaml interface to its C interface. These functions *| 11 |* are by and large transparent wrappers to the corresponding C functions. *| 12 |* *| 13 |* Note that these functions intentionally take liberties with the CAMLparamX *| 14 |* macros, since most of the parameters are not GC heap objects. *| 15 |* *| 16 \*===----------------------------------------------------------------------===*/ 17 18 #include "llvm-c/Transforms/IPO.h" 19 #include "caml/mlvalues.h" 20 #include "caml/misc.h" 21 22 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_constant_merge(LLVMPassManagerRef PM)23value llvm_add_constant_merge(LLVMPassManagerRef PM) { 24 LLVMAddConstantMergePass(PM); 25 return Val_unit; 26 } 27 28 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_merge_functions(LLVMPassManagerRef PM)29value llvm_add_merge_functions(LLVMPassManagerRef PM) { 30 LLVMAddMergeFunctionsPass(PM); 31 return Val_unit; 32 } 33 34 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_dead_arg_elimination(LLVMPassManagerRef PM)35value llvm_add_dead_arg_elimination(LLVMPassManagerRef PM) { 36 LLVMAddDeadArgEliminationPass(PM); 37 return Val_unit; 38 } 39 40 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_function_attrs(LLVMPassManagerRef PM)41value llvm_add_function_attrs(LLVMPassManagerRef PM) { 42 LLVMAddFunctionAttrsPass(PM); 43 return Val_unit; 44 } 45 46 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_function_inlining(LLVMPassManagerRef PM)47value llvm_add_function_inlining(LLVMPassManagerRef PM) { 48 LLVMAddFunctionInliningPass(PM); 49 return Val_unit; 50 } 51 52 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_always_inliner(LLVMPassManagerRef PM)53value llvm_add_always_inliner(LLVMPassManagerRef PM) { 54 LLVMAddAlwaysInlinerPass(PM); 55 return Val_unit; 56 } 57 58 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_global_dce(LLVMPassManagerRef PM)59value llvm_add_global_dce(LLVMPassManagerRef PM) { 60 LLVMAddGlobalDCEPass(PM); 61 return Val_unit; 62 } 63 64 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_global_optimizer(LLVMPassManagerRef PM)65value llvm_add_global_optimizer(LLVMPassManagerRef PM) { 66 LLVMAddGlobalOptimizerPass(PM); 67 return Val_unit; 68 } 69 70 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_ipsccp(LLVMPassManagerRef PM)71value llvm_add_ipsccp(LLVMPassManagerRef PM) { 72 LLVMAddIPSCCPPass(PM); 73 return Val_unit; 74 } 75 76 /* [`Module] Llvm.PassManager.t -> all_but_main:bool -> unit */ llvm_add_internalize(LLVMPassManagerRef PM,value AllButMain)77value llvm_add_internalize(LLVMPassManagerRef PM, value AllButMain) { 78 LLVMAddInternalizePass(PM, Bool_val(AllButMain)); 79 return Val_unit; 80 } 81 82 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_strip_dead_prototypes(LLVMPassManagerRef PM)83value llvm_add_strip_dead_prototypes(LLVMPassManagerRef PM) { 84 LLVMAddStripDeadPrototypesPass(PM); 85 return Val_unit; 86 } 87 88 /* [`Module] Llvm.PassManager.t -> unit */ llvm_add_strip_symbols(LLVMPassManagerRef PM)89value llvm_add_strip_symbols(LLVMPassManagerRef PM) { 90 LLVMAddStripSymbolsPass(PM); 91 return Val_unit; 92 } 93