Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AbstractInterpreter: refactor the lifetimes of OptimizationState and IRCode #43994

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on May 30, 2022

  1. AbstractInterpreter: refactor the lifetimes of OptimizationState

    …and `IRCode`
    
    This commit limits the lifetimes of `OptimizationState` and `IRCode`
    for a more dataflow clarity. It also avoids duplicated calls of `ir_to_codeinf!`.
    
    Note that external `AbstractInterpreter`s can still extend their
    lifetimes to cache additional information, as described by this
    newly added documentation of `finish!`:
    
    >     finish!(interp::AbstractInterpreter,
    >         opt::OptimizationState, ir::IRCode, caller::InferenceResult)
    >
    > Runs post-Julia-level optimization process and caches information for later uses:
    > - computes "purity" (i.e. side-effect-freeness) of the optimized frame
    > - computes inlining cost and cache the inlineability in `opt.src.inlineable`
    > - stores the result of optimization in `caller.src`
    > * by default, `caller.src` will be an optimized `CodeInfo` object transformed from `ir`
    > * in a case when this frame has been proven pure, `ConstAPI` object wrapping the constant
    > value will be kept in `caller.src` instead, so that the runtime system will use
    > the constant calling convention
    >
    > !!! note
    >     The lifetimes of `opt` and `ir` end by the end of this process.
    >     Still external `AbstractInterpreter` can override this method as necessary to cache them.
    >     Note that `transform_result_for_cache` should be overloaded also in such cases,
    >     otherwise the default `transform_result_for_cache` implmentation will discard any information
    >     other than `CodeInfo`, `Vector{UInt8}` or `ConstAPI`.
    
    This commit also adds a new overload `infresult_iterator` so that external
    interpreters can tweak the behavior of post processings of `_typeinf`.
    Especially, this change is motivated by the need for JET, whose post-optimization
    processing needs references of `InferenceState`.
    aviatesk committed May 30, 2022
    Configuration menu
    Copy the full SHA
    2efe155 View commit details
    Browse the repository at this point in the history