llvmlite.binding
LLVM gives you the possibility to fine-tune optimization passes. llvmlite exposes several of these parameters. Optimization passes are managed by a pass manager; there are two kinds thereof: FunctionPassManager
, for optimizations which work on single functions, and ModulePassManager
, for optimizations which work on whole modules.
To instantiate any of those pass managers, you first have to create and configure a PassManagerBuilder
.
Create a new pass manager builder. This object centralizes optimization settings. The following method is available:
populate(pm)
Populate the pass manager pm with the optimization passes configured in this pass manager builder.
The following writable properties are also available:
disable_unroll_loops
If true, disable loop unrolling.
inlining_threshold
The integer threshold for inlining a function into another. The higher, the more likely inlining a function is. This attribute is write-only.
loop_vectorize
If true, allow vectorizing loops.
opt_level
The general optimization level as an integer between 0 and 3.
size_level
Whether and how much to optimize for size. An integer between 0 and 2.
slp_vectorize
If true, enable the "SLP vectorizer", which uses a different algorithm from the loop vectorizer. Both may be enabled at the same time.
The base class for pass managers. Use individual add_*
methods or PassManagerBuilder.populate
to add optimization passes.
add_constant_merge_pass()
add_dead_arg_elimination_pass()
add_function_attrs_pass()
add_function_inlining_pass(self, )
add_global_dce_pass()
add_global_optimizer_pass()
add_ipsccp_pass()
add_dead_code_elimination_pass()
add_cfg_simplification_pass()
add_gvn_pass()
add_instruction_combining_pass()
add_licm_pass()
add_sccp_pass()
add_sroa_pass()
See scalarrepl pass documentation.
Note that while the link above describes the transformation performed by the pass added by this function, it corresponds to the opt -sroa
command-line option and not opt -scalarrepl
.
add_type_based_alias_analysis_pass()
add_basic_alias_analysis_pass()
Create a new pass manager to run optimization passes on a module.
The following method is available:
run(module)
Run optimization passes on the module (a ModuleRef
instance). True is returned if the optimizations made any modification to the module, False instead.
Create a new pass manager to run optimization passes on a function of the given module (an ModuleRef
instance).
The following methods are available:
finalize()
Run all the finalizers of the optimization passes.
initialize()
Run all the initializers of the optimization passes.
run(function)
Run optimization passes on the function (a ValueRef
instance). True is returned if the optimizations made any modification to the module, False instead.