Anaconda Enterprise: Documentation

# 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.