Skip to content

gh-145866: Implement POP_ITER as macro op using POP_TOP#146185

Open
brijkapadia wants to merge 6 commits into
python:mainfrom
brijkapadia:pop-iter-macro-op
Open

gh-145866: Implement POP_ITER as macro op using POP_TOP#146185
brijkapadia wants to merge 6 commits into
python:mainfrom
brijkapadia:pop-iter-macro-op

Conversation

@brijkapadia

@brijkapadia brijkapadia commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

As the JIT can optimize _POP_TOP uops, I implemented POP_TOP for the POP_ITER instruction. I am fairly confident that this is the right solution but I am new to the JIT and would welcome any feedback.

As the JIT can optimize `_POP_TOP` uops, I implemented `POP_TOP` for
the `POP_ITER` instruction. I am fairly confident that this is the right
solution but I am new to the JIT and would welcome any feedback.
Comment thread Python/bytecodes.c Outdated
Comment thread Lib/test/test_capi/test_opt.py
Comment thread Lib/test/test_capi/test_opt.py Outdated
@brijkapadia brijkapadia deleted the pop-iter-macro-op branch May 29, 2026 22:05
@brijkapadia brijkapadia restored the pop-iter-macro-op branch June 28, 2026 16:02
@brijkapadia brijkapadia reopened this Jun 28, 2026
@read-the-docs-community

Copy link
Copy Markdown

@brijkapadia

Copy link
Copy Markdown
Contributor Author

Okay, I reopened as I found a case where POP_ITER makes it to a tier 2 trace.

Here is one case:

for _ in range(5000):
    for _ in range(5):
        pass

PYTHON_LLTRACE=2 gave this output:

Trace info

   1 ADD_TO_TRACE: _START_EXECUTOR (0, target=27, operand0=0x7f098c758146, operand1=0)
   2 ADD_TO_TRACE: _MAKE_WARM (0, target=0, operand0=0, operand1=0)
0x7f098c758040 27: POP_ITER(0) 0
   3 ADD_TO_TRACE: _CHECK_VALIDITY (0, target=27, operand0=0, operand1=0)
   4 ADD_TO_TRACE: _SET_IP (0, target=27, operand0=0x7f098c758146, operand1=0)
   5 ADD_TO_TRACE: _POP_TOP_NOP (0, target=27, operand0=0, operand1=0)
   6 ADD_TO_TRACE: _POP_TOP (0, target=27, operand0=0, operand1=0)
Trace continuing
   7 ADD_TO_TRACE: _EXIT_TRACE (0, target=28, operand0=0, operand1=0)
Trace done
   8 ADD_TO_TRACE: _EXIT_TRACE (0, target=28, operand0=0, operand1=0)
Optimized trace (length 8):
   0 OPTIMIZED: _START_EXECUTOR_r00 (0, jump_target=7, operand0=0x7f098c755ff0, operand1=0)
   1 OPTIMIZED: _MAKE_WARM_r00 (0, target=0, operand0=0, operand1=0)
   2 OPTIMIZED: _SET_IP_r00 (0, target=27, operand0=0x7f098c758146, operand1=0)
   3 OPTIMIZED: _POP_TOP_NOP_r00 (0, target=27, operand0=0, operand1=0)
   4 OPTIMIZED: _SPILL_OR_RELOAD_r01 (0, target=0, operand0=0, operand1=0)
   5 OPTIMIZED: _POP_TOP_r10 (0, target=27, operand0=0, operand1=0)
   6 OPTIMIZED: _EXIT_TRACE_r00 (0, target=28, operand0=0x7f098c756050, operand1=0)
   7 OPTIMIZED: _DEOPT_r00 (0, target=27, operand0=0, operand1=0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants