diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2025-02-07 17:52:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-07 17:52:49 (GMT) |
commit | 70e387c990c98d0fba9f2518061713809cff2f53 (patch) | |
tree | 98cbfef2eabfa0145208f725102da88aa5e9e1af /Python/bytecodes.c | |
parent | fbaa6c8ff06cf885d9b8c8ea6cf25bab3781a2bd (diff) | |
download | cpython-70e387c990c98d0fba9f2518061713809cff2f53.zip cpython-70e387c990c98d0fba9f2518061713809cff2f53.tar.gz cpython-70e387c990c98d0fba9f2518061713809cff2f53.tar.bz2 |
GH-129709: Clean up tier two (GH-129710)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r-- | Python/bytecodes.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 07022e9..9fb58b9 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3526,6 +3526,7 @@ dummy_func( } op(_MAYBE_EXPAND_METHOD, (callable[1], self_or_null[1], args[oparg] -- func[1], maybe_self[1], args[oparg])) { + (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *self = ((PyMethodObject *)callable_o)->im_self; @@ -3892,6 +3893,7 @@ dummy_func( _CHECK_PERIODIC; op(_CHECK_AND_ALLOCATE_OBJECT, (type_version/2, callable[1], null[1], args[oparg] -- init[1], self[1], args[oparg])) { + (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); DEOPT_IF(!PyStackRef_IsNull(null[0])); DEOPT_IF(!PyType_Check(callable_o)); @@ -4119,7 +4121,7 @@ dummy_func( PyObject *res_o = PyLong_FromSsize_t(len_i); assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); if (res_o == NULL) { - GOTO_ERROR(error); + ERROR_NO_POP(); } PyStackRef_CLOSE(arg_stackref); DEAD(args); @@ -4364,6 +4366,7 @@ dummy_func( } op(_MAYBE_EXPAND_METHOD_KW, (callable[1], self_or_null[1], args[oparg], kwnames_in -- func[1], maybe_self[1], args[oparg], kwnames_out)) { + (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *self = ((PyMethodObject *)callable_o)->im_self; @@ -5022,7 +5025,7 @@ dummy_func( if (frame->lltrace >= 2) { printf("SIDE EXIT: [UOp "); _PyUOpPrint(&next_uop[-1]); - printf(", exit %u, temp %d, target %d -> %s]\n", + printf(", exit %lu, temp %d, target %d -> %s]\n", exit - current_executor->exits, exit->temperature.value_and_backoff, (int)(target - _PyFrame_GetBytecode(frame)), _PyOpcode_OpName[target->op.code]); @@ -5032,11 +5035,11 @@ dummy_func( exit->temperature = initial_temperature_backoff_counter(); Py_CLEAR(exit->executor); } + tstate->previous_executor = (PyObject *)current_executor; if (exit->executor == NULL) { _Py_BackoffCounter temperature = exit->temperature; if (!backoff_counter_triggers(temperature)) { exit->temperature = advance_backoff_counter(temperature); - tstate->previous_executor = (PyObject *)current_executor; GOTO_TIER_ONE(target); } _PyExecutorObject *executor; @@ -5049,20 +5052,13 @@ dummy_func( int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); if (optimized <= 0) { exit->temperature = restart_backoff_counter(temperature); - if (optimized < 0) { - GOTO_UNWIND(); - } - tstate->previous_executor = (PyObject *)current_executor; - GOTO_TIER_ONE(target); - } - else { - exit->temperature = initial_temperature_backoff_counter(); + GOTO_TIER_ONE(optimized < 0 ? NULL : target); } + exit->temperature = initial_temperature_backoff_counter(); } exit->executor = executor; } Py_INCREF(exit->executor); - tstate->previous_executor = (PyObject *)current_executor; GOTO_TIER_TWO(exit->executor); } @@ -5130,7 +5126,7 @@ dummy_func( if (frame->lltrace >= 2) { printf("DYNAMIC EXIT: [UOp "); _PyUOpPrint(&next_uop[-1]); - printf(", exit %u, temp %d, target %d -> %s]\n", + printf(", exit %lu, temp %d, target %d -> %s]\n", exit - current_executor->exits, exit->temperature.value_and_backoff, (int)(target - _PyFrame_GetBytecode(frame)), _PyOpcode_OpName[target->op.code]); @@ -5150,21 +5146,15 @@ dummy_func( int optimized = _PyOptimizer_Optimize(frame, target, &executor, 0); if (optimized <= 0) { exit->temperature = restart_backoff_counter(exit->temperature); - if (optimized < 0) { - GOTO_UNWIND(); - } - GOTO_TIER_ONE(target); - } - else { - exit->temperature = initial_temperature_backoff_counter(); + GOTO_TIER_ONE(optimized < 0 ? NULL : target); } + exit->temperature = initial_temperature_backoff_counter(); } GOTO_TIER_TWO(executor); } tier2 op(_START_EXECUTOR, (executor/4 --)) { - Py_DECREF(tstate->previous_executor); - tstate->previous_executor = NULL; + Py_CLEAR(tstate->previous_executor); #ifndef _Py_JIT current_executor = (_PyExecutorObject*)executor; #endif @@ -5190,14 +5180,16 @@ dummy_func( } tier2 op(_DEOPT, (--)) { - EXIT_TO_TIER1(); + tstate->previous_executor = (PyObject *)current_executor; + GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); } tier2 op(_ERROR_POP_N, (target/2 --)) { + tstate->previous_executor = (PyObject *)current_executor; assert(oparg == 0); frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; SYNC_SP(); - GOTO_UNWIND(); + GOTO_TIER_ONE(NULL); } /* Progress is guaranteed if we DEOPT on the eval breaker, because |