-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
base: master
Are you sure you want to change the base?
Conversation
7569d68
to
bc2ee03
Compare
Cthulhu can be updated like this PR: JuliaDebug/Cthulhu.jl#264 |
27afd1b
to
37dc402
Compare
to make it easier to customize the behaviors of post processing of `_typeinf`. Especially, this change is motivated by a need for JET, whose post processing requires references of `InferenceState`s. Separated from #43994.
seems good to me, if it works for you to make things better |
to make it easier to customize the behaviors of post processing of `_typeinf`. Especially, this change is motivated by a need for JET, whose post processing requires references of `InferenceState`s. Separated from #43994.
8e88697
to
8eb7175
Compare
@nanosoldier |
@nanosoldier |
Something went wrong when running your job:
Logs and partial data can be found here |
Something went wrong when running your job:
Logs and partial data can be found here |
@nanosoldier |
Your benchmark job has completed - possible performance regressions were detected. A full report can be found here. |
@nanosoldier |
Your benchmark job has completed - no performance regressions were detected. A full report can be found here. |
4deac14
to
33c709d
Compare
…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`.
This commit limits the lifetimes of
OptimizationState
andIRCode
for a more dataflow clarity. It also avoids duplicated calls of
ir_to_codeinf!
.With this change, for
NativeInterpreter
, Julia-level optimization-specificinformation won't leak to other parts of the compilation pipeline, and
such information gets transformed to cacheable information at the end of
the optimization phase.
Note that external
AbstractInterpreter
s can still extend theirlifetimes to cache additional information, as described by this
newly added documentation of
finish!
:This commit also adds a new overload
infresult_iterator
so that externalinterpreters 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
.