4.7. Optimization passes

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.

class llvmlite.binding.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.

class llvmlite.binding.PassManager

The base class for pass managers. Use individual add_* methods or PassManagerBuilder.populate() to add optimization passes.

add_constant_merge_pass()

See constmerge pass documentation.

add_dead_arg_elimination_pass()

See deadargelim pass documentation.

add_function_attrs_pass()

See functionattrs pass documentation.

add_function_inlining_pass(self)

See inline pass documentation.

add_global_dce_pass()

See globaldce pass documentation.

add_global_optimizer_pass()

See globalopt pass documentation.

add_ipsccp_pass()

See ipsccp pass documentation.

add_dead_code_elimination_pass()

See dce pass documentation.

add_cfg_simplification_pass()

See simplifycfg pass documentation.

add_gvn_pass()

See gvn pass documentation.

add_instruction_combining_pass()

See instcombine pass documentation.

add_licm_pass()

See licm pass documentation.

add_sccp_pass()

See sccp pass documentation.

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()

See basicaa pass documentation.

class llvmlite.binding.ModulePassManager

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.

class llvmlite.binding.FunctionPassManager(module)

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.