diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 7ae0f20369641a..e362a1f5c88942 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -2624,15 +2624,16 @@ dummy_func( } _PyExecutorObject *executor; int optimized = _PyOptimizer_Optimize(frame, start, stack_pointer, &executor, 0); - ERROR_IF(optimized < 0, error); - if (optimized) { + if (optimized <= 0) { + this_instr[1].counter = restart_backoff_counter(counter); + ERROR_IF(optimized < 0, error); + } + else { + this_instr[1].counter = initial_jump_backoff_counter(); assert(tstate->previous_executor == NULL); tstate->previous_executor = Py_None; GOTO_TIER_TWO(executor); } - else { - this_instr[1].counter = restart_backoff_counter(counter); - } } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); @@ -4869,6 +4870,9 @@ dummy_func( tstate->previous_executor = (PyObject *)current_executor; GOTO_TIER_ONE(target); } + else { + exit->temperature = initial_temperature_backoff_counter(); + } } exit->executor = executor; } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 1d63402214db5d..46107209684cde 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -5738,6 +5738,9 @@ tstate->previous_executor = (PyObject *)current_executor; GOTO_TIER_ONE(target); } + else { + exit->temperature = initial_temperature_backoff_counter(); + } } exit->executor = executor; } diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 03b4d2224922f0..5b693892cc50a0 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -5092,15 +5092,18 @@ _PyFrame_SetStackPointer(frame, stack_pointer); int optimized = _PyOptimizer_Optimize(frame, start, stack_pointer, &executor, 0); stack_pointer = _PyFrame_GetStackPointer(frame); - if (optimized < 0) goto error; - if (optimized) { + if (optimized <= 0) { + this_instr[1].counter = restart_backoff_counter(counter); + if (optimized < 0) goto error; + } + else { + _PyFrame_SetStackPointer(frame, stack_pointer); + this_instr[1].counter = initial_jump_backoff_counter(); + stack_pointer = _PyFrame_GetStackPointer(frame); assert(tstate->previous_executor == NULL); tstate->previous_executor = Py_None; GOTO_TIER_TWO(executor); } - else { - this_instr[1].counter = restart_backoff_counter(counter); - } } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);