gh-146558: JIT optimize dict access for objects with known hash (#146559)

This commit is contained in:
Kumar Aditya 2026-03-30 19:53:29 +05:30 committed by GitHub
parent 76c554bcdf
commit 8e9d21c64b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 1558 additions and 1257 deletions

View file

@ -1175,6 +1175,26 @@ dummy_func(
macro(BINARY_OP_SUBSCR_DICT) =
_GUARD_NOS_ANY_DICT + unused/5 + _BINARY_OP_SUBSCR_DICT + POP_TOP + POP_TOP;
tier2 op(_BINARY_OP_SUBSCR_DICT_KNOWN_HASH, (dict_st, sub_st, hash/4 -- res, ds, ss)) {
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
assert(PyAnyDict_CheckExact(dict));
STAT_INC(BINARY_OP, hit);
PyObject *res_o;
int rc = _PyDict_GetItemRef_KnownHash((PyDictObject *)dict, sub, (Py_hash_t)hash, &res_o);
if (rc == 0) {
_PyErr_SetKeyError(sub);
}
if (rc <= 0) {
ERROR_NO_POP();
}
res = PyStackRef_FromPyObjectSteal(res_o);
ds = dict_st;
ss = sub_st;
INPUTS_DEAD();
}
op(_BINARY_OP_SUBSCR_DICT, (dict_st, sub_st -- res, ds, ss)) {
PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
@ -1319,6 +1339,24 @@ dummy_func(
st = dict_st;
}
tier2 op(_STORE_SUBSCR_DICT_KNOWN_HASH, (value, dict_st, sub, hash/4 -- st)) {
PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
assert(PyDict_CheckExact(dict));
STAT_INC(STORE_SUBSCR, hit);
int err = _PyDict_SetItem_Take2_KnownHash((PyDictObject *)dict,
PyStackRef_AsPyObjectSteal(sub),
PyStackRef_AsPyObjectSteal(value),
(Py_hash_t)hash);
if (err) {
PyStackRef_CLOSE(dict_st);
ERROR_IF(1);
}
DEAD(dict_st);
st = dict_st;
}
inst(DELETE_SUBSCR, (container, sub --)) {
/* del container[sub] */
int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container),