Skip to content

Commit

Permalink
bpo-45885: Don't un-adapt COMPARE_OP when collecting stats (GH-31516)
Browse files Browse the repository at this point in the history
  • Loading branch information
brandtbucher authored Feb 23, 2022
1 parent 424023e commit 375a56b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Don't un-adapt :opcode:`COMPARE_OP` when collecting specialization stats.
10 changes: 8 additions & 2 deletions Python/specialize.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 375a56b

Please sign in to comment.