1(*===-- llvm_passbuilder.mli - LLVM OCaml Interface ------------*- OCaml -*-===* 2 * 3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 * See https://llvm.org/LICENSE.txt for license information. 5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 * 7 *===----------------------------------------------------------------------===*) 8 9type llpassbuilder_options 10 11(** [run_passes m passes tm opts] runs a set of passes over a module. The 12 format of the string [passes] is the same as opt's -passes argument for 13 the new pass manager. Individual passes may be specified, separated by 14 commas. Full pipelines may also be invoked. See [LLVMRunPasses]. *) 15val run_passes 16 : Llvm.llmodule 17 -> string 18 -> Llvm_target.TargetMachine.t 19 -> llpassbuilder_options 20 -> (unit, string) result 21 22(** Creates a new set of options for a PassBuilder. See 23 [llvm::LLVMPassBuilderOptions::LLVMPassBuilderOptions]. *) 24val create_passbuilder_options : unit -> llpassbuilder_options 25 26(** Toggles adding the VerifierPass for the PassBuilder. See 27 [llvm::LLVMPassBuilderOptions::VerifyEach]. *) 28val passbuilder_options_set_verify_each 29 : llpassbuilder_options -> bool -> unit 30 31(** Toggles debug logging. See [llvm::LLVMPassBuilderOptions::DebugLogging]. *) 32val passbuilder_options_set_debug_logging 33 : llpassbuilder_options -> bool -> unit 34 35(** Tuning option to set loop interleaving on/off, set based on opt level. 36 See [llvm::PipelineTuningOptions::LoopInterleaving]. *) 37val passbuilder_options_set_loop_interleaving 38 : llpassbuilder_options -> bool -> unit 39 40(** Tuning option to enable/disable loop vectorization, set based on opt level. 41 See [llvm::PipelineTuningOptions::LoopVectorization]. *) 42val passbuilder_options_set_loop_vectorization 43 : llpassbuilder_options -> bool -> unit 44 45(** Tuning option to enable/disable slp loop vectorization, set based on opt 46 level. See [llvm::PipelineTuningOptions::SLPVectorization]. *) 47val passbuilder_options_set_slp_vectorization 48 : llpassbuilder_options -> bool -> unit 49 50(** Tuning option to enable/disable loop unrolling. Its default value is true. 51 See [llvm::PipelineTuningOptions::LoopUnrolling]. *) 52val passbuilder_options_set_loop_unrolling 53 : llpassbuilder_options -> bool -> unit 54 55(** Tuning option to forget all SCEV loops in LoopUnroll. 56 See [llvm::PipelineTuningOptions::ForgetAllSCEVInLoopUnroll]. *) 57val passbuilder_options_set_forget_all_scev_in_loop_unroll 58 : llpassbuilder_options -> bool -> unit 59 60(** Tuning option to cap the number of calls to retrive clobbering accesses in 61 MemorySSA, in LICM. See [llvm::PipelineTuningOptions::LicmMssaOptCap]. *) 62val passbuilder_options_set_licm_mssa_opt_cap 63 : llpassbuilder_options -> int -> unit 64 65(** Tuning option to disable promotion to scalars in LICM with MemorySSA, if 66 the number of accesses is too large. See 67 [llvm::PipelineTuningOptions::LicmMssaNoAccForPromotionCap]. *) 68val passbuilder_options_set_licm_mssa_no_acc_for_promotion_cap 69 : llpassbuilder_options -> int -> unit 70 71(** Tuning option to enable/disable call graph profile. See 72 [llvm::PipelineTuningOptions::CallGraphProfile]. *) 73val passbuilder_options_set_call_graph_profile 74 : llpassbuilder_options -> bool -> unit 75 76(** Tuning option to enable/disable function merging. See 77 [llvm::PipelineTuningOptions::MergeFunctions]. *) 78val passbuilder_options_set_merge_functions 79 : llpassbuilder_options -> bool -> unit 80 81(** Tuning option to override the default inliner threshold. See 82 [llvm::PipelineTuningOptions::InlinerThreshold]. *) 83val passbuilder_options_set_inliner_threshold 84 : llpassbuilder_options -> int -> unit 85 86(** Disposes of the options. *) 87val dispose_passbuilder_options : llpassbuilder_options -> unit 88