Open
Description
According to stats and profiling only about 40% of bytecode instructions are executed by tier 2 and the remaining 60% by tier 1.
We the expected improvements to the JIT and tier 2 optimizer we expect tier 2 (with JIT) to have a significantly faster than tier 1.
It therefore make sense to get the fraction of instructions executed by tier 2 up from 40% to nearer 90%.
To do that we need to:
- Enter tier 2 at some function entry points as well as back edges. #118094
- Stay in tier 2 when exiting executors in most cases Trace stitching #112354
- Increase the number of micro-ops that we can handle in tier 2 #118095
Linked PRs
- GH-118093: Add tier two support to several instructions #121884
- GH-118093: Remove invalidated executors from side exits #121885
- GH-118093: Better handling of short and mid-loop traces #122252
- GH-118093: Add tier two support for
BINARY_OP_INPLACE_ADD_UNICODE
#122253 - GH-118093: Add tier two support for
LOAD_ATTR_PROPERTY
#122283 - GH-118093: Handle some polymorphism before requiring progress in tier two #122843
- GH-118093: Turn some
DEOPT_IF
s intoEXIT_IF
s #122998 - GH-118093: Specialize
CALL_KW
#123006 - GH-118093: Specialize
CALL_FUNCTION_EX
#123034 - GH-118093: Make
CALL_ALLOC_AND_ENTER_INIT
suitable for tier 2. #123140 - GH-118093: Specialize calls to non-vectorcall classes as
CALL_NON_PY_GENERAL
#123212 - GH-118093: Fix off-by-one errors in tier-up thresholds #124447
- GH-118093: Don't lose confidence when tracing through 100% biased branches #124813