Skip to content

Commit

Permalink
gh-115999: Don't take a reason in unspecialize (#127030)
Browse files Browse the repository at this point in the history
Don't take a reason in unspecialize

We only want to compute the reason if stats are enabled. Optimizing
compilers should optimize this away for us (gcc and clang do), but
it's better to be safe than sorry.
  • Loading branch information
mpage authored Nov 20, 2024
1 parent 0af4ec3 commit 32428cf
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions Python/specialize.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,7 @@ specialize(_Py_CODEUNIT *instr, uint8_t specialized_opcode)
}

static inline void
unspecialize(_Py_CODEUNIT *instr, int reason)
unspecialize(_Py_CODEUNIT *instr)
{
assert(!PyErr_Occurred());
uint8_t opcode = FT_ATOMIC_LOAD_UINT8_RELAXED(instr->op.code);
Expand All @@ -729,7 +729,6 @@ unspecialize(_Py_CODEUNIT *instr, int reason)
SPECIALIZATION_FAIL(generic_opcode, SPEC_FAIL_OTHER);
return;
}
SPECIALIZATION_FAIL(generic_opcode, reason);
_Py_BackoffCounter *counter = (_Py_BackoffCounter *)instr + 1;
_Py_BackoffCounter cur = load_counter(counter);
set_counter(counter, adaptive_counter_backoff(cur));
Expand Down Expand Up @@ -2243,6 +2242,7 @@ _Py_Specialize_CallKw(_PyStackRef callable_st, _Py_CODEUNIT *instr, int nargs)
}
}

#ifdef Py_STATS
static int
binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs)
{
Expand Down Expand Up @@ -2310,6 +2310,7 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs)
}
Py_UNREACHABLE();
}
#endif

void
_Py_Specialize_BinaryOp(_PyStackRef lhs_st, _PyStackRef rhs_st, _Py_CODEUNIT *instr,
Expand Down Expand Up @@ -2373,7 +2374,8 @@ _Py_Specialize_BinaryOp(_PyStackRef lhs_st, _PyStackRef rhs_st, _Py_CODEUNIT *in
}
break;
}
unspecialize(instr, binary_op_fail_kind(oparg, lhs, rhs));
SPECIALIZATION_FAIL(BINARY_OP, binary_op_fail_kind(oparg, lhs, rhs));
unspecialize(instr);
}


Expand Down Expand Up @@ -2760,6 +2762,7 @@ _Py_Specialize_ToBool(_PyStackRef value_o, _Py_CODEUNIT *instr)
cache->counter = adaptive_counter_cooldown();
}

#ifdef Py_STATS
static int
containsop_fail_kind(PyObject *value) {
if (PyUnicode_CheckExact(value)) {
Expand All @@ -2776,6 +2779,7 @@ containsop_fail_kind(PyObject *value) {
}
return SPEC_FAIL_OTHER;
}
#endif

void
_Py_Specialize_ContainsOp(_PyStackRef value_st, _Py_CODEUNIT *instr)
Expand All @@ -2793,7 +2797,8 @@ _Py_Specialize_ContainsOp(_PyStackRef value_st, _Py_CODEUNIT *instr)
return;
}

unspecialize(instr, containsop_fail_kind(value));
SPECIALIZATION_FAIL(CONTAINS_OP, containsop_fail_kind(value));
unspecialize(instr);
return;
}

Expand Down

0 comments on commit 32428cf

Please sign in to comment.