]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
move strange control flow detection up
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 6 Nov 2025 20:33:05 +0000 (20:33 +0000)
committerKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 6 Nov 2025 20:33:05 +0000 (20:33 +0000)
Python/optimizer.c

index cef8ae4fadce9504f08159dd8ec8078eec20301c..b31b4ddfefe2f548b124de2b9775f2ba12576c29 100644 (file)
@@ -628,6 +628,14 @@ _PyJit_translate_single_bytecode_to_trace(
         goto done;
     }
 
+    // Strange control-flow
+    bool has_dynamic_jump_taken = OPCODE_HAS_UNPREDICTABLE_JUMP(opcode) &&
+        (next_instr != this_instr + 1 + _PyOpcode_Caches[_PyOpcode_Deopt[opcode]]);
+    if (has_dynamic_jump_taken) {
+        DPRINTF(2, "Unsupported: dynamic jump taken\n");
+        goto unsupported;
+    }
+
     /* Special case the first instruction,
     * so that we can guarantee forward progress */
     if (progress_needed && tstate->interp->jit_state.code_curr_size <= 2) {
@@ -638,14 +646,6 @@ _PyJit_translate_single_bytecode_to_trace(
         assert(!OPCODE_HAS_DEOPT(opcode));
     }
 
-    // Strange control-flow
-    bool has_dynamic_jump_taken = OPCODE_HAS_UNPREDICTABLE_JUMP(opcode) &&
-        (next_instr != this_instr + 1 + _PyOpcode_Caches[_PyOpcode_Deopt[opcode]]);
-    if (has_dynamic_jump_taken) {
-        DPRINTF(2, "Unsupported: dynamic jump taken\n");
-        goto unsupported;
-    }
-
     // This happens when a recursive call happens that we can't trace. Such as Python -> C -> Python calls
     // If we haven't guarded the IP, then it's untraceable.
     if (frame != tstate->interp->jit_state.prev_instr_frame && !needs_guard_ip) {