Warning
The custom pipeline feature is for expert use only. Modifying the compiler behavior can invalidate internal assumptions in the numba source code.
For library developers looking for a way to extend or modify the compiler
behavior, you can do so by defining a custom compiler pipeline by inheriting
from numba.compiler.BasePipeline. The default numba pipeline is defined
as numba.compiler.Pipeline, implementing the .define_pipelines()
method, which adds the nopython-mode, object-mode and interpreted-mode
pipelines. These three pipelines are defined in BasePipeline by the
methods .define_nopython_pipeline, .define_objectmode_pipeline
and .define_interpreted_pipeline, respectively..
To use a custom subclass of BasePipeline, supply it as the
pipeline_class keyword argument to the @jit and @generated_jit
decorators. By doing so, the effect of the custom pipeline is limited to the
function being decorated.
Below are the common methods available to implementors of the BasePipeline
class:
numba.compiler.BasePipeline(typingctx, targetctx, library, args, return_type, flags, locals)¶Stores and manages states for the compiler pipeline
add_cleanup_stage(pm)¶Add the clean-up stage to remove intermediate results.
add_lowering_stage(pm)¶Add the lowering (code-generation) stage for nopython-mode
add_optimization_stage(pm)¶Add optimization stages.
add_pre_typing_stage(pm)¶Add any stages that go before type-inference. The current stages contain type-agnostic rewrite passes.
add_preprocessing_stage(pm)¶Add the preprocessing stage that analyzes the bytecode to prepare the Numba IR.
add_typing_stage(pm)¶Add the type-inference stage necessary for nopython mode.
define_interpreted_pipeline(pm, name='interp')¶Add the interpreted-mode (fallback) pipeline to the pipeline manager
define_nopython_pipeline(pm, name='nopython')¶Add the nopython-mode pipeline to the pipeline manager
define_objectmode_pipeline(pm, name='object')¶Add the object-mode pipeline to the pipeline manager