xref: /llvm-project/llvm/bindings/ocaml/transforms/passbuilder/llvm_passbuilder.mli (revision 49610edd49cfbf9962729cf39c13cab2ac3cb0f9)
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