GeezerVison is showing github.com — gh-146381: Fold frozendict(key=const, ...) calls to LOAD_CONST by corona10 · Pull Request #146423 · python/cpython
Conversation
corona10
commented
Mar 25, 2026
•
edited by brianschubert
Loading
Uh oh!
There was an error while loading. Please reload this page.
This PR folds frozendict calls into LOAD_CONST at compile time.
This is a prerequisite for JIT constant folding of frozendict lookups. Without this, frozendict compiles to CALL_KW, which the JIT cannot recognize as a constant. With this change, it becomes LOAD_CONST frozendict(...), enabling the JIT to promote it and fold subscript operations like d['x'] at optimization time.
Without codegen-level folding like this, supporting frozendict constants in the JIT would likely require introducing a new literal syntax (e.g., <1: 3, 5: 6>) at the language level, and it might need a PEP for this change.
cc @vstinner
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
corona10
commented
Mar 25, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
## main
5 LOAD_GLOBAL 1 (frozendict + NULL)
LOAD_SMALL_INT 1
LOAD_SMALL_INT 2
LOAD_CONST 1 (('x', 'y'))
CALL_KW 2
STORE_FAST 0 (d)
## gh-146381
5 LOAD_GLOBAL 0 (frozendict)
COPY 1
LOAD_COMMON_CONSTANT 7 (frozendict)
IS_OP 0 (is)
POP_JUMP_IF_FALSE 4 (to L1)
NOT_TAKEN
POP_TOP
LOAD_CONST 0 (frozendict({'x': 1, 'y': 2})) ← compile-time constant
JUMP_FORWARD 8 (to L2)
L1: PUSH_NULL
LOAD_SMALL_INT 1
LOAD_SMALL_INT 2
LOAD_CONST 1 (('x', 'y'))
CALL_KW 2 ← fallback
L2: STORE_FAST 0 (d)
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Since @Fidget-Spinner suggeted to optimize from JIT pipeline directly, I covert this PR to the draft.
|
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.
|