GeezerVison is showing github.com — gh-131798: Add tier-2 list specialization for STORE_SLICE by eendebakpt · Pull Request #149446 · python/cpython
Conversation
eendebakpt
commented
May 6, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
The JIT currently dispatches STORE_SLICE (container[start:stop] = value) through PyObject_SetItem even when the trace has proven the container is an exact list. Adding a tier-2 specialization _STORE_SLICE_LIST skips the slice-object allocation and the generic lookup.
The optimizer rewrites _STORE_SLICE → _STORE_SLICE_LIST only when the container's type is statically known, so non-list callers and tier-1 are unaffected. A second commit for bytearray was added but reverted.
Benchmark results on pyperformance fannkuch (tier-2 / JIT enabled):
main (252 ± 3 ms) -> PR (223 ± 2 ms): 1.13x faster
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Adds a tier-2 only `_STORE_SLICE_LIST` op and a guard `_GUARD_THIRD_LIST`,
plus an optimizer rule that rewrites generic `_STORE_SLICE` to the list
fast path when the LHS container is (or can be guarded as) an exact list.
The list path calls a new `_PyList_StoreSlice` helper that adjusts the
slice indices and dispatches into `list_ass_slice_lock_held` directly,
skipping the slice-object allocation and the generic
`PyObject_SetItem` lookup.
The tier-1 `_STORE_SLICE` opcode is left unchanged so non-list callers
incur no extra branch.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
eendebakpt
changed the title
gh-131798: Add tier2 coverage for STORE_SLICE
gh-131798: Add tier-2 list specialization for STORE_SLICE
May 6, 2026
Resolved generated pycore_uop_ids.h conflict by regenerating from
bytecodes.c / optimizer_bytecodes.c.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One question, otherwise looks good.
It would be good to optimize constant slices, but that would need a change to the bytecode compiler. For another PR.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Picks up the dead-local removal from the latest commit
('Apply suggestion from @eendebakpt') in optimizer_bytecodes.c.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
eendebakpt
commented
Jun 2, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
One question, otherwise looks good.
It would be good to optimize constant slices, but that would need a change to the bytecode compiler. For another PR.
Ah yes. So the mechanism is: for x[1:2] = ... there is a constant slice. The compiler optimizes this to LOAD_CONST and STORE_SUBSCR (which is not specialized), which means we will never get to the specialized STORE_SLICE introduced in this PR.
We could:
- Skip the optimization now that STORE_SLICE has more specializations (compiler change).
- Specialize
STORE_SUBSCR for lists (and more types?)
I am leaning towards the second option (initially only in tier2 to avoid adding a tier1 opcode).
Update: a branch with STORE_SUBSCR specialized is main...eendebakpt:cpython:gh-131798-store-subscr-list-slice, but there is hardly any performance gain.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
This PR is stale because it has been open for 90 days with no activity.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
ambv
commented
Oct 20, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
|
This PR is superseded by #157011, a newer open pull request for the same issue (gh-131798), and it no longer merges cleanly. Closing to cull the number of open pull requests. Do not reopen this pull request without getting a go-ahead from a triager or core developer.
Sorry, incorrectly flagged as a duplicate.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
This is is a jit optimization, so closing for now.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|