mirror of https://github.com/python/cpython
gh-115999: Don't take a reason in unspecialize (#127030)
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.
This commit is contained in:
parent
0af4ec30bd
commit
32428cf9ea
|
@ -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);
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2760,6 +2762,7 @@ success:
|
|||
cache->counter = adaptive_counter_cooldown();
|
||||
}
|
||||
|
||||
#ifdef Py_STATS
|
||||
static int
|
||||
containsop_fail_kind(PyObject *value) {
|
||||
if (PyUnicode_CheckExact(value)) {
|
||||
|
@ -2776,6 +2779,7 @@ containsop_fail_kind(PyObject *value) {
|
|||
}
|
||||
return SPEC_FAIL_OTHER;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
_Py_Specialize_ContainsOp(_PyStackRef value_st, _Py_CODEUNIT *instr)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue