]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Remove dynamic exit for _FOR_ITER_TIER_TWO
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 30 Oct 2025 18:26:37 +0000 (18:26 +0000)
committerKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 30 Oct 2025 18:26:37 +0000 (18:26 +0000)
Include/internal/pycore_uop_metadata.h
Python/bytecodes.c
Python/executor_cases.c.h
Python/optimizer.c

index c7fbfb0fafa2f6b20fbb2cd4675e4591fd91be27..148b3d9c1fc94c0873099755bf2a88061697c672 100644 (file)
@@ -213,7 +213,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
     [_MATCH_KEYS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_GET_ITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_GET_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
-    [_FOR_ITER_TIER_TWO] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
+    [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
     [_ITER_CHECK_LIST] = HAS_EXIT_FLAG,
     [_GUARD_NOT_EXHAUSTED_LIST] = HAS_EXIT_FLAG,
     [_ITER_NEXT_LIST_TIER_TWO] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
index ba3b1df3d1ca33c57877c8386e59622768db10ba..d62a7515963ff03a06c652ffdfdac10a330ed9c6 100644 (file)
@@ -3251,8 +3251,7 @@ dummy_func(
                     ERROR_NO_POP();
                 }
                 /* iterator ended normally */
-                /* This just sets the IP to what it expects (see normal _FOR_ITER) */
-                frame->instr_ptr += (oparg + 2 + INLINE_CACHE_ENTRIES_FOR_ITER);
+                /* The translator sets the deopt target just past the matching END_FOR */
                 EXIT_IF(true);
             }
             next = item;
index 1534dd6995f6cbd85f40cfcf8a13efe7ef017534..88ef5a8656e0098b51fcbcc3bb76fad33cbb4cfe 100644 (file)
             _PyStackRef null_or_index;
             _PyStackRef iter;
             _PyStackRef next;
-            oparg = CURRENT_OPARG();
             null_or_index = stack_pointer[-1];
             iter = stack_pointer[-2];
             _PyFrame_SetStackPointer(frame, stack_pointer);
                 if (PyStackRef_IsError(item)) {
                     JUMP_TO_ERROR();
                 }
-                frame->instr_ptr += (oparg + 2 + INLINE_CACHE_ENTRIES_FOR_ITER);
                 if (true) {
                     UOP_STAT_INC(uopcode, miss);
                     JUMP_TO_JUMP_TARGET();
index d11108dcddfb9323a79e4268d36ef4e40a132b52..97b891ac97f3813be49c8f26a2cf7bdbb408621d 100644 (file)
@@ -1075,10 +1075,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length)
             }
             int32_t jump_target = target;
             bool unique_target = false;
-            if (opcode == _FOR_ITER_TIER_TWO) {
-                exit_op = _DYNAMIC_EXIT;
-            }
-            else if (
+            if (
                 opcode == _GUARD_IP__PUSH_FRAME ||
                 opcode == _GUARD_IP_RETURN_VALUE ||
                 opcode == _GUARD_IP_YIELD_VALUE ||