summaryrefslogtreecommitdiffstats
path: root/Python/specialize.c
diff options
context:
space:
mode:
authormpage <mpage@meta.com>2024-11-20 22:54:48 (GMT)
committerGitHub <noreply@github.com>2024-11-20 22:54:48 (GMT)
commit32428cf9ea03bce6d64c7acd28e0b7d92774eb53 (patch)
treec0294db777d23ac082715b83d8fe2d5824e0c456 /Python/specialize.c
parent0af4ec30bd2e3a52350344d1011c0c125d6dcd71 (diff)
downloadcpython-32428cf9ea03bce6d64c7acd28e0b7d92774eb53.zip
cpython-32428cf9ea03bce6d64c7acd28e0b7d92774eb53.tar.gz
cpython-32428cf9ea03bce6d64c7acd28e0b7d92774eb53.tar.bz2
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.
Diffstat (limited to 'Python/specialize.c')
-rw-r--r--Python/specialize.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/specialize.c b/Python/specialize.c
index 4c8cf85..ad41dfc 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -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;
}