mirror of
https://github.com/python/cpython.git
synced 2026-02-07 18:30:30 +00:00
gh-144005: Eliminate redundant refcounting in the JIT for BINARY_OP_EXTEND (#144006)
This commit is contained in:
parent
70e67f579e
commit
2f42f83344
11 changed files with 109 additions and 53 deletions
|
|
@ -829,7 +829,7 @@ dummy_func(
|
|||
DEOPT_IF(!res);
|
||||
}
|
||||
|
||||
op(_BINARY_OP_EXTEND, (descr/4, left, right -- res)) {
|
||||
op(_BINARY_OP_EXTEND, (descr/4, left, right -- res, l, r)) {
|
||||
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
|
||||
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
|
||||
assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5);
|
||||
|
|
@ -838,13 +838,18 @@ dummy_func(
|
|||
STAT_INC(BINARY_OP, hit);
|
||||
|
||||
PyObject *res_o = d->action(left_o, right_o);
|
||||
DECREF_INPUTS();
|
||||
ERROR_IF(res_o == NULL);
|
||||
if (res_o == NULL) {
|
||||
ERROR_NO_POP();
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
l = left;
|
||||
r = right;
|
||||
DEAD(left);
|
||||
DEAD(right);
|
||||
}
|
||||
|
||||
macro(BINARY_OP_EXTEND) =
|
||||
unused/1 + _GUARD_BINARY_OP_EXTEND + rewind/-4 + _BINARY_OP_EXTEND;
|
||||
unused/1 + _GUARD_BINARY_OP_EXTEND + rewind/-4 + _BINARY_OP_EXTEND + POP_TOP + POP_TOP;
|
||||
|
||||
macro(BINARY_OP_INPLACE_ADD_UNICODE) =
|
||||
_GUARD_TOS_UNICODE + _GUARD_NOS_UNICODE + unused/5 + _BINARY_OP_INPLACE_ADD_UNICODE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue