gh-134584: Eliminate redundant refcounting from _STORE_SUBSCR_DICT (G… · python/cpython@abaaeee · GitHub
Skip to content

Commit abaaeee

Browse files
gh-134584: Eliminate redundant refcounting from _STORE_SUBSCR_DICT (GH-142712)
Co-authored-by: Ken Jin <kenjin4096@gmail.com>
1 parent 872ab51 commit abaaeee

9 files changed

Lines changed: 74 additions & 23 deletions

File tree

Include/internal/pycore_opcode_metadata.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_uop_ids.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_uop_metadata.h

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Lib/test/test_capi/test_opt.py

Lines changed: 19 additions & 0 deletions

Python/bytecodes.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,18 +1158,22 @@ dummy_func(
11581158
}
11591159

11601160
macro(STORE_SUBSCR_DICT) =
1161-
_GUARD_NOS_DICT + unused/1 + _STORE_SUBSCR_DICT;
1161+
_GUARD_NOS_DICT + unused/1 + _STORE_SUBSCR_DICT + POP_TOP;
11621162

1163-
op(_STORE_SUBSCR_DICT, (value, dict_st, sub -- )) {
1163+
op(_STORE_SUBSCR_DICT, (value, dict_st, sub -- st)) {
11641164
PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
11651165

11661166
assert(PyDict_CheckExact(dict));
11671167
STAT_INC(STORE_SUBSCR, hit);
11681168
int err = _PyDict_SetItem_Take2((PyDictObject *)dict,
11691169
PyStackRef_AsPyObjectSteal(sub),
11701170
PyStackRef_AsPyObjectSteal(value));
1171-
PyStackRef_CLOSE(dict_st);
1172-
ERROR_IF(err);
1171+
if (err) {
1172+
PyStackRef_CLOSE(dict_st);
1173+
ERROR_IF(1);
1174+
}
1175+
DEAD(dict_st);
1176+
st = dict_st;
11731177
}
11741178

11751179
inst(DELETE_SUBSCR, (container, sub --)) {

Python/executor_cases.c.h

Lines changed: 12 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/generated_cases.c.h

Lines changed: 15 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/optimizer_bytecodes.c

Lines changed: 5 additions & 0 deletions

Python/optimizer_cases.c.h

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)