https://github.com/python/cpython/commit/32428cf9ea03bce6d64c7acd28e0b7d92774eb53
commit: 32428cf9ea03bce6d64c7acd28e0b7d92774eb53
branch: main
author: mpage <[email protected]>
committer: mpage <[email protected]>
date: 2024-11-20T14:54:48-08:00
summary:

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.

files:
M Python/specialize.c

diff --git a/Python/specialize.c b/Python/specialize.c
index 4c8cf8534b3dc7..ad41dfc39c0147 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 @@ _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)) {
@@ -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;
 }
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to