mirror of
https://github.com/python/cpython.git
synced 2026-03-09 22:40:43 +00:00
gh-142908: Don't use DK_IS_UNICODE in interpreter (gh-142909)
`DK_IS_UNICODE()` includes split keys and we don't want to specialize on those accesses..
This commit is contained in:
parent
49c3b0a67a
commit
8cf5c4d89a
4 changed files with 17 additions and 17 deletions
|
|
@ -1844,7 +1844,7 @@ dummy_func(
|
|||
DEOPT_IF(!PyDict_CheckExact(dict));
|
||||
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
|
||||
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
}
|
||||
|
||||
op(_LOAD_GLOBAL_MODULE, (version/1, unused/1, index/1 -- res))
|
||||
|
|
@ -1853,7 +1853,7 @@ dummy_func(
|
|||
DEOPT_IF(!PyDict_CheckExact(dict));
|
||||
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
|
||||
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
assert(index < DK_SIZE(keys));
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
|
|
@ -1873,7 +1873,7 @@ dummy_func(
|
|||
DEOPT_IF(!PyDict_CheckExact(dict));
|
||||
PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
|
||||
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version);
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
DEOPT_IF(res_o == NULL);
|
||||
|
|
@ -2668,7 +2668,7 @@ dummy_func(
|
|||
assert(PyDict_CheckExact((PyObject *)dict));
|
||||
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
|
||||
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
|
||||
!DK_IS_UNICODE(dict->ma_keys)) {
|
||||
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
|
||||
UNLOCK_OBJECT(dict);
|
||||
DEOPT_IF(true);
|
||||
}
|
||||
|
|
|
|||
14
Python/executor_cases.c.h
generated
14
Python/executor_cases.c.h
generated
|
|
@ -7463,7 +7463,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(0);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
SET_CURRENT_CACHED_VALUES(0);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
break;
|
||||
|
|
@ -7488,7 +7488,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(1);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
_tos_cache0 = _stack_item_0;
|
||||
SET_CURRENT_CACHED_VALUES(1);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
|
|
@ -7517,7 +7517,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(2);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
_tos_cache1 = _stack_item_1;
|
||||
_tos_cache0 = _stack_item_0;
|
||||
SET_CURRENT_CACHED_VALUES(2);
|
||||
|
|
@ -7550,7 +7550,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(3);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
_tos_cache2 = _stack_item_2;
|
||||
_tos_cache1 = _stack_item_1;
|
||||
_tos_cache0 = _stack_item_0;
|
||||
|
|
@ -7577,7 +7577,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(0);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
assert(index < DK_SIZE(keys));
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
|
|
@ -7623,7 +7623,7 @@
|
|||
SET_CURRENT_CACHED_VALUES(0);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
if (res_o == NULL) {
|
||||
|
|
@ -9768,7 +9768,7 @@
|
|||
assert(PyDict_CheckExact((PyObject *)dict));
|
||||
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
|
||||
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
|
||||
!DK_IS_UNICODE(dict->ma_keys)) {
|
||||
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
|
||||
UNLOCK_OBJECT(dict);
|
||||
if (true) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
|
|
|
|||
8
Python/generated_cases.c.h
generated
8
Python/generated_cases.c.h
generated
|
|
@ -9213,7 +9213,7 @@
|
|||
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
|
||||
JUMP_TO_PREDICTED(LOAD_GLOBAL);
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
}
|
||||
// _LOAD_GLOBAL_BUILTINS
|
||||
{
|
||||
|
|
@ -9231,7 +9231,7 @@
|
|||
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
|
||||
JUMP_TO_PREDICTED(LOAD_GLOBAL);
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
if (res_o == NULL) {
|
||||
|
|
@ -9297,7 +9297,7 @@
|
|||
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
|
||||
JUMP_TO_PREDICTED(LOAD_GLOBAL);
|
||||
}
|
||||
assert(DK_IS_UNICODE(keys));
|
||||
assert(keys->dk_kind == DICT_KEYS_UNICODE);
|
||||
PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
|
||||
assert(index < DK_SIZE(keys));
|
||||
PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value);
|
||||
|
|
@ -10989,7 +10989,7 @@
|
|||
assert(PyDict_CheckExact((PyObject *)dict));
|
||||
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
|
||||
if (hint >= (size_t)dict->ma_keys->dk_nentries ||
|
||||
!DK_IS_UNICODE(dict->ma_keys)) {
|
||||
dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
|
||||
UNLOCK_OBJECT(dict);
|
||||
if (true) {
|
||||
UPDATE_MISS_STATS(STORE_ATTR);
|
||||
|
|
|
|||
|
|
@ -1285,7 +1285,7 @@ specialize_load_global_lock_held(
|
|||
goto fail;
|
||||
}
|
||||
PyDictKeysObject * globals_keys = ((PyDictObject *)globals)->ma_keys;
|
||||
if (!DK_IS_UNICODE(globals_keys)) {
|
||||
if (globals_keys->dk_kind != DICT_KEYS_UNICODE) {
|
||||
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -1320,7 +1320,7 @@ specialize_load_global_lock_held(
|
|||
goto fail;
|
||||
}
|
||||
PyDictKeysObject * builtin_keys = ((PyDictObject *)builtins)->ma_keys;
|
||||
if (!DK_IS_UNICODE(builtin_keys)) {
|
||||
if (builtin_keys->dk_kind != DICT_KEYS_UNICODE) {
|
||||
SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue