From 1798ab1b338399bd8559819faceb54fd71c2bf90 Mon Sep 17 00:00:00 2001 From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Sun, 19 Oct 2025 15:51:26 +0100 Subject: [PATCH] Fix _CHECK_PERIODIC insertion --- Python/bytecodes.c | 6 ++++-- Python/generated_cases.c.h | 5 ++++- Python/generated_tracer_cases.c.h | 3 +++ Python/optimizer.c | 15 +-------------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 38ac989e6652..e75f1d05a484 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -2981,8 +2981,10 @@ dummy_func( _PyJIT_InitializeTracing(tstate, frame, this_instr, STACK_LEVEL(), 0, NULL); ENTER_TRACING(); } - // Don't add the JUMP_BACKWARD_JIT instruction to the trace. - DISPATCH(); + int _jump_taken = false; + PyCodeObject *old_code = _PyFrame_GetCode(frame); + PyFunctionObject *old_func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + TRACING_DISPATCH(); } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 5080df123dc0..7b7d10e52650 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -7674,7 +7674,10 @@ _PyJIT_InitializeTracing(tstate, frame, this_instr, STACK_LEVEL(), 0, NULL); ENTER_TRACING(); } - DISPATCH(); + int _jump_taken = false; + PyCodeObject *old_code = _PyFrame_GetCode(frame); + PyFunctionObject *old_func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + TRACING_DISPATCH(); } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); diff --git a/Python/generated_tracer_cases.c.h b/Python/generated_tracer_cases.c.h index 67c240669b9d..3feeb0d05362 100644 --- a/Python/generated_tracer_cases.c.h +++ b/Python/generated_tracer_cases.c.h @@ -8717,6 +8717,9 @@ _PyJIT_InitializeTracing(tstate, frame, this_instr, STACK_LEVEL(), 0, NULL); ENTER_TRACING(); } + int _jump_taken = false; + PyCodeObject *old_code = _PyFrame_GetCode(frame); + PyFunctionObject *old_func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); TRACING_DISPATCH(); } else { diff --git a/Python/optimizer.c b/Python/optimizer.c index a6d9c7904ee6..18b7d1d5aa29 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -673,7 +673,6 @@ _PyJIT_translate_single_bytecode_to_trace( // Loop back to the start if (is_first_instr && tstate->interp->jit_state.jit_tracer_code_curr_size > 2) { - ADD_TO_TRACE(_CHECK_PERIODIC, 0, 0, target); ADD_TO_TRACE(_JUMP_TO_TOP, 0, 0, 0); goto done; } @@ -705,19 +704,7 @@ _PyJIT_translate_single_bytecode_to_trace( break; } case JUMP_BACKWARD_JIT: - // This is possible as the JIT might have re-activated after it was disabled. // if (next_uop->opcode != _START_EXECUTOR) { - // if (next_uop->format == UOP_FORMAT_TARGET) { - // _Py_CODEUNIT *aim = _PyFrame_GetBytecode(frame) + next_uop->target; - // printf(" aim=[%s]\n", _PyOpcode_OpName[aim->op.code]); - // } - // else if (next_uop->format == UOP_FORMAT_JUMP) { - // _PyUOpInstruction *aim_uop = current_executor->trace + next_uop->jump_target; - // if (aim_uop->format == UOP_FORMAT_TARGET) { - // _Py_CODEUNIT *aim = _PyFrame_GetBytecode(frame) + aim_uop->target; - // printf(" aim=[%s]\n", _PyOpcode_OpName[aim->op.code]); - // } - // } - // } + // This is possible as the JIT might have re-activated after it was disabled case JUMP_BACKWARD_NO_JIT: case JUMP_BACKWARD: ADD_TO_TRACE(_CHECK_PERIODIC, 0, 0, target); -- 2.47.3