]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
fix a tracing bug, ifdef out code
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 23 Oct 2025 23:49:18 +0000 (00:49 +0100)
committerKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 23 Oct 2025 23:49:18 +0000 (00:49 +0100)
Python/bytecodes.c
Python/ceval_macros.h
Python/generated_cases.c.h
Python/optimizer.c

index 9c0759af7c897d46fd049fa1dbe4de6d32d7aa1a..be98f34ce819e4322093aa181cd8a911aa653819 100644 (file)
@@ -5219,6 +5219,7 @@ dummy_func(
         }
 
         tier1 no_save_ip inst(RECORD_PREVIOUS_INST, (--)) {
+#if _Py_TIER2
             assert(IS_JIT_TRACING());
             int opcode = next_instr->op.code;
             int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr);
@@ -5236,6 +5237,9 @@ dummy_func(
             tstate->interp->jit_state.prev_instr_oparg = oparg;
             tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL();
             DISPATCH_GOTO_NON_TRACING();
+#else
+            Py_FatalError("JIT instruction executed in non-jit build.");
+#endif
         }
         ///////// Tier-2 only opcodes /////////
 
index 27cc8b19f715c3dfc4326981e28e33163fe6c362..b741707377ae223de404de0a62d4c2b612e1edd3 100644 (file)
@@ -413,7 +413,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer)
 
 #define TIER1_TO_TIER2(EXECUTOR)                        \
 do {                                                   \
-    LEAVE_TRACING(); \
     OPT_STAT_INC(traces_executed);                     \
     next_instr = _Py_jit_entry((EXECUTOR), frame, stack_pointer, tstate); \
     frame = tstate->current_frame;                     \
index 516d42a3972d7668e36dd6746e61bc74027bfd6c..0665f985ff08cc28605086103ef111808008feee 100644 (file)
 
         TARGET(RECORD_PREVIOUS_INST) {
             INSTRUCTION_STATS(RECORD_PREVIOUS_INST);
+            #if _Py_TIER2
             assert(IS_JIT_TRACING());
             int opcode = next_instr->op.code;
             _PyFrame_SetStackPointer(frame, stack_pointer);
             tstate->interp->jit_state.prev_instr_oparg = oparg;
             tstate->interp->jit_state.prev_instr_stacklevel = STACK_LEVEL();
             DISPATCH_GOTO_NON_TRACING();
+            #else
+            Py_FatalError("JIT instruction executed in non-jit build.");
+            #endif
         }
 
         TARGET(RERAISE) {
index a3d847b6eab8849ab17ab0d33f21e5c7a497f40c..c11cd22cf9dfbc536da8e39c99a162c2f0dc9764 100644 (file)
@@ -884,14 +884,17 @@ _PyJit_translate_single_bytecode_to_trace(
         ADD_TO_TRACE(_JUMP_TO_TOP, 0, 0, 0);
         goto done;
     }
+    DPRINTF(2, "Trace continuing\n");
     tstate->interp->jit_state.code_curr_size = trace_length;
     tstate->interp->jit_state.code_max_size = max_length;
     return 1;
 done:
+    DPRINTF(2, "Trace done\n");
     tstate->interp->jit_state.code_curr_size = trace_length;
     tstate->interp->jit_state.code_max_size = max_length;
     return 0;
 full:
+    DPRINTF(2, "Trace full\n");
     if (!is_terminator(&tstate->interp->jit_state.code_buffer[trace_length-1])) {
         // Undo the last few instructions.
         trace_length = tstate->interp->jit_state.code_curr_size;