mirror of
https://github.com/python/cpython.git
synced 2025-07-19 17:25:54 +00:00
GH-104909: Move unused cache entries from uops to macros (#107444)
There's no need to use a dummy uop to skip unused cache entries. The macro syntax lets you write `unused/1` instead. Similarly, move `unused/5` from op `_LOAD_ATTR_INSTANCE_VALUE` to macro `LOAD_ATTR_INSTANCE_VALUE`.
This commit is contained in:
parent
a22ff8e11c
commit
5eb80a61f5
4 changed files with 31 additions and 47 deletions
|
@ -1348,9 +1348,6 @@ dummy_func(
|
|||
null = NULL;
|
||||
}
|
||||
|
||||
op(_SKIP_CACHE, (unused/1 -- )) {
|
||||
}
|
||||
|
||||
op(_GUARD_GLOBALS_VERSION, (version/1 --)) {
|
||||
PyDictObject *dict = (PyDictObject *)GLOBALS();
|
||||
DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL);
|
||||
|
@ -1386,13 +1383,13 @@ dummy_func(
|
|||
}
|
||||
|
||||
macro(LOAD_GLOBAL_MODULE) =
|
||||
_SKIP_CACHE + // Skip over the counter
|
||||
unused/1 + // Skip over the counter
|
||||
_GUARD_GLOBALS_VERSION +
|
||||
_SKIP_CACHE + // Skip over the builtins version
|
||||
unused/1 + // Skip over the builtins version
|
||||
_LOAD_GLOBAL_MODULE;
|
||||
|
||||
macro(LOAD_GLOBAL_BUILTIN) =
|
||||
_SKIP_CACHE + // Skip over the counter
|
||||
unused/1 + // Skip over the counter
|
||||
_GUARD_GLOBALS_VERSION +
|
||||
_GUARD_BUILTINS_VERSION +
|
||||
_LOAD_GLOBAL_BUILTINS;
|
||||
|
@ -1824,7 +1821,7 @@ dummy_func(
|
|||
DEOPT_IF(!_PyDictOrValues_IsValues(dorv), LOAD_ATTR);
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (index/1, unused/5, owner -- res2 if (oparg & 1), res)) {
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (index/1, owner -- res2 if (oparg & 1), res)) {
|
||||
PyDictOrValues dorv = *_PyObject_DictOrValuesPointer(owner);
|
||||
res = _PyDictOrValues_GetValues(dorv)->values[index];
|
||||
DEOPT_IF(res == NULL, LOAD_ATTR);
|
||||
|
@ -1835,10 +1832,11 @@ dummy_func(
|
|||
}
|
||||
|
||||
macro(LOAD_ATTR_INSTANCE_VALUE) =
|
||||
_SKIP_CACHE + // Skip over the counter
|
||||
unused/1 + // Skip over the counter
|
||||
_GUARD_TYPE_VERSION +
|
||||
_CHECK_MANAGED_OBJECT_HAS_VALUES +
|
||||
_LOAD_ATTR_INSTANCE_VALUE;
|
||||
_LOAD_ATTR_INSTANCE_VALUE +
|
||||
unused/5; // Skip over rest of cache
|
||||
|
||||
inst(LOAD_ATTR_MODULE, (unused/1, type_version/2, index/1, unused/5, owner -- res2 if (oparg & 1), res)) {
|
||||
DEOPT_IF(!PyModule_CheckExact(owner), LOAD_ATTR);
|
||||
|
|
4
Python/executor_cases.c.h
generated
4
Python/executor_cases.c.h
generated
|
@ -1009,10 +1009,6 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _SKIP_CACHE: {
|
||||
break;
|
||||
}
|
||||
|
||||
case _GUARD_GLOBALS_VERSION: {
|
||||
uint16_t version = (uint16_t)operand;
|
||||
PyDictObject *dict = (PyDictObject *)GLOBALS();
|
||||
|
|
8
Python/generated_cases.c.h
generated
8
Python/generated_cases.c.h
generated
|
@ -1663,8 +1663,6 @@
|
|||
TARGET(LOAD_GLOBAL_MODULE) {
|
||||
PyObject *_tmp_1;
|
||||
PyObject *_tmp_2;
|
||||
{
|
||||
}
|
||||
{
|
||||
uint16_t version = read_u16(&next_instr[1].cache);
|
||||
PyDictObject *dict = (PyDictObject *)GLOBALS();
|
||||
|
@ -1672,8 +1670,6 @@
|
|||
DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL);
|
||||
assert(DK_IS_UNICODE(dict->ma_keys));
|
||||
}
|
||||
{
|
||||
}
|
||||
{
|
||||
PyObject *null = NULL;
|
||||
PyObject *res;
|
||||
|
@ -1699,8 +1695,6 @@
|
|||
TARGET(LOAD_GLOBAL_BUILTIN) {
|
||||
PyObject *_tmp_1;
|
||||
PyObject *_tmp_2;
|
||||
{
|
||||
}
|
||||
{
|
||||
uint16_t version = read_u16(&next_instr[1].cache);
|
||||
PyDictObject *dict = (PyDictObject *)GLOBALS();
|
||||
|
@ -2243,8 +2237,6 @@
|
|||
TARGET(LOAD_ATTR_INSTANCE_VALUE) {
|
||||
PyObject *_tmp_1;
|
||||
PyObject *_tmp_2 = stack_pointer[-1];
|
||||
{
|
||||
}
|
||||
{
|
||||
PyObject *owner = _tmp_2;
|
||||
uint32_t type_version = read_u32(&next_instr[1].cache);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue