[Python-checkins] bpo-45885: Don't un-adapt `COMPARE_OP` when collecting stats (GH-31516)

markshannon webhook-mailer at python.org
Wed Feb 23 06:06:36 EST 2022


https://github.com/python/cpython/commit/375a56bd4015596c0cf44129c8842a1fe7199785
commit: 375a56bd4015596c0cf44129c8842a1fe7199785
branch: main
author: Brandt Bucher <brandtbucher at microsoft.com>
committer: markshannon <mark at hotpy.org>
date: 2022-02-23T11:06:25Z
summary:

bpo-45885: Don't un-adapt `COMPARE_OP` when collecting stats (GH-31516)

files:
A Misc/NEWS.d/next/Core and Builtins/2022-02-22-15-48-32.bpo-45885.W2vkaI.rst
M Python/specialize.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-02-22-15-48-32.bpo-45885.W2vkaI.rst b/Misc/NEWS.d/next/Core and Builtins/2022-02-22-15-48-32.bpo-45885.W2vkaI.rst
new file mode 100644
index 0000000000000..4339f501fd3fb
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-02-22-15-48-32.bpo-45885.W2vkaI.rst	
@@ -0,0 +1 @@
+Don't un-adapt :opcode:`COMPARE_OP` when collecting specialization stats.
diff --git a/Python/specialize.c b/Python/specialize.c
index 91010a5be3c06..0fc992d30bdc8 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -2013,9 +2013,15 @@ _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs,
     int op = adaptive->original_oparg;
     int next_opcode = _Py_OPCODE(instr[1]);
     if (next_opcode != POP_JUMP_IF_FALSE && next_opcode != POP_JUMP_IF_TRUE) {
-        // Can't ever combine, so don't don't bother being adaptive.
-        SPECIALIZATION_FAIL(COMPARE_OP, SPEC_FAIL_COMPARE_OP_NOT_FOLLOWED_BY_COND_JUMP);
+        // Can't ever combine, so don't don't bother being adaptive (unless
+        // we're collecting stats, where it's more important to get accurate hit
+        // counts for the unadaptive version and each of the different failure
+        // types):
+#ifndef Py_STATS
         *instr = _Py_MAKECODEUNIT(COMPARE_OP, adaptive->original_oparg);
+        return;
+#endif
+        SPECIALIZATION_FAIL(COMPARE_OP, SPEC_FAIL_COMPARE_OP_NOT_FOLLOWED_BY_COND_JUMP);
         goto failure;
     }
     assert(op <= Py_GE);



More information about the Python-checkins mailing list