Closed
Description
The RETURN_VALUE
and RETURN_CONST
instructions return the value on top of the stack and a constant, respectively.
RETURN_CONST
is effectively a superinstruction: LOAD_CONST + RETURN_VALUE
.
This worked well up to 3.13, but is likely to be an impediment to further optimizations:
- The JIT already breaks
RETURN_CONST
intoLOAD_CONST
andRETURN_VALUE
so the superinstruction has no value. RETURN_VALUE
has two different paths internally, one for normal functions and the other for generators. We know statically which sort of function we are in, so we should emit different bytecodes for the different behavior- With the proposed changes to reference counting, it will help in the interpreter (we already do this in the JIT) to have a different instruction for immortal constants. (This might only be temporarily, as we expect to be able to defer reference counting on all constants)
Changes to the instruction set:
RETURN_CONST
andINSTRUMENTED_RETURN_CONST
will be removed.RETURN_VALUE_GEN
,INSTRUMENTED_RETURN_GEN
andLOAD_CONST_IMMORTAL
will be added.
We expect that LOAD_CONST_IMMORTAL
will be removed again before 3.14, but that is not a requirement.
Linked PRs
Metadata
Metadata
Assignees
Labels
bugs and security fixesbugs and security fixes(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)Performance or resource usagePerformance or resource usage