summaryrefslogtreecommitdiffstats
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@microsoft.com>2025-02-07 17:52:49 (GMT)
committerGitHub <noreply@github.com>2025-02-07 17:52:49 (GMT)
commit70e387c990c98d0fba9f2518061713809cff2f53 (patch)
tree98cbfef2eabfa0145208f725102da88aa5e9e1af /Python/bytecodes.c
parentfbaa6c8ff06cf885d9b8c8ea6cf25bab3781a2bd (diff)
downloadcpython-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.c40
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