mirror of
https://github.com/python/cpython.git
synced 2026-05-04 09:31:02 +00:00
gh-148380: remove all uses of _PyType_LookupByVersion in optimizer_bytecodes.c (GH-148394)
This commit is contained in:
parent
efcac6f281
commit
2ca6333065
5 changed files with 43 additions and 39 deletions
|
|
@ -2984,6 +2984,7 @@ dummy_func(
|
|||
|
||||
macro(LOAD_ATTR_CLASS) =
|
||||
unused/1 +
|
||||
_RECORD_TOS +
|
||||
_CHECK_ATTR_CLASS +
|
||||
unused/2 +
|
||||
_LOAD_ATTR_CLASS +
|
||||
|
|
@ -2991,7 +2992,7 @@ dummy_func(
|
|||
|
||||
macro(LOAD_ATTR_CLASS_WITH_METACLASS_CHECK) =
|
||||
unused/1 +
|
||||
_RECORD_TOS_TYPE +
|
||||
_RECORD_TOS +
|
||||
_GUARD_TYPE_VERSION +
|
||||
_CHECK_ATTR_CLASS +
|
||||
_LOAD_ATTR_CLASS +
|
||||
|
|
|
|||
|
|
@ -229,8 +229,8 @@ dummy_func(void) {
|
|||
}
|
||||
|
||||
op(_CHECK_ATTR_CLASS, (type_version/2, owner -- owner)) {
|
||||
PyObject *type = (PyObject *)_PyType_LookupByVersion(type_version);
|
||||
if (type) {
|
||||
PyObject *type = sym_get_probable_value(owner);
|
||||
if (type != NULL && ((PyTypeObject *)type)->tp_version_tag == type_version) {
|
||||
if (type == sym_get_const(ctx, owner)) {
|
||||
ADD_OP(_NOP, 0, 0);
|
||||
}
|
||||
|
|
@ -246,7 +246,7 @@ dummy_func(void) {
|
|||
|
||||
op(_GUARD_TYPE_VERSION, (type_version/2, owner -- owner)) {
|
||||
assert(type_version);
|
||||
assert(this_instr[-1].opcode == _RECORD_TOS_TYPE);
|
||||
assert(this_instr[-1].opcode == _RECORD_TOS_TYPE || this_instr[-1].opcode == _RECORD_TOS);
|
||||
if (sym_matches_type_version(owner, type_version)) {
|
||||
ADD_OP(_NOP, 0, 0);
|
||||
}
|
||||
|
|
|
|||
6
Python/optimizer_cases.c.h
generated
6
Python/optimizer_cases.c.h
generated
|
|
@ -2518,7 +2518,7 @@
|
|||
owner = stack_pointer[-1];
|
||||
uint32_t type_version = (uint32_t)this_instr->operand0;
|
||||
assert(type_version);
|
||||
assert(this_instr[-1].opcode == _RECORD_TOS_TYPE);
|
||||
assert(this_instr[-1].opcode == _RECORD_TOS_TYPE || this_instr[-1].opcode == _RECORD_TOS);
|
||||
if (sym_matches_type_version(owner, type_version)) {
|
||||
ADD_OP(_NOP, 0, 0);
|
||||
}
|
||||
|
|
@ -2676,8 +2676,8 @@
|
|||
JitOptRef owner;
|
||||
owner = stack_pointer[-1];
|
||||
uint32_t type_version = (uint32_t)this_instr->operand0;
|
||||
PyObject *type = (PyObject *)_PyType_LookupByVersion(type_version);
|
||||
if (type) {
|
||||
PyObject *type = sym_get_probable_value(owner);
|
||||
if (type != NULL && ((PyTypeObject *)type)->tp_version_tag == type_version) {
|
||||
if (type == sym_get_const(ctx, owner)) {
|
||||
ADD_OP(_NOP, 0, 0);
|
||||
}
|
||||
|
|
|
|||
61
Python/record_functions.c.h
generated
61
Python/record_functions.c.h
generated
|
|
@ -101,10 +101,11 @@ void _PyOpcode_RecordFunction_CODE(_PyInterpreterFrame *frame, _PyStackRef *stac
|
|||
#define _RECORD_TOS_TYPE_INDEX 1
|
||||
#define _RECORD_NOS_INDEX 2
|
||||
#define _RECORD_3OS_GEN_FUNC_INDEX 3
|
||||
#define _RECORD_NOS_GEN_FUNC_INDEX 4
|
||||
#define _RECORD_CALLABLE_INDEX 5
|
||||
#define _RECORD_CALLABLE_KW_INDEX 6
|
||||
#define _RECORD_4OS_INDEX 7
|
||||
#define _RECORD_TOS_INDEX 4
|
||||
#define _RECORD_NOS_GEN_FUNC_INDEX 5
|
||||
#define _RECORD_CALLABLE_INDEX 6
|
||||
#define _RECORD_CALLABLE_KW_INDEX 7
|
||||
#define _RECORD_4OS_INDEX 8
|
||||
|
||||
const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
|
||||
[TO_BOOL_BOOL] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
|
|
@ -136,15 +137,15 @@ const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
|
|||
[STORE_ATTR] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_SUPER_ATTR] = {1, {_RECORD_NOS_INDEX}},
|
||||
[LOAD_SUPER_ATTR_METHOD] = {1, {_RECORD_NOS_INDEX}},
|
||||
[LOAD_ATTR] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_MODULE] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_WITH_HINT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_SLOT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_CLASS] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_PROPERTY] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_MODULE] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_WITH_HINT] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_SLOT] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_CLASS] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_PROPERTY] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = {1, {_RECORD_TOS_INDEX}},
|
||||
[STORE_ATTR_INSTANCE_VALUE] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[STORE_ATTR_WITH_HINT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[STORE_ATTR_SLOT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
|
|
@ -158,11 +159,11 @@ const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
|
|||
[FOR_ITER_RANGE] = {1, {_RECORD_NOS_GEN_FUNC_INDEX}},
|
||||
[FOR_ITER_GEN] = {1, {_RECORD_NOS_GEN_FUNC_INDEX}},
|
||||
[LOAD_SPECIAL] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_METHOD_WITH_VALUES] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_METHOD_NO_DICT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_METHOD_LAZY_DICT] = {1, {_RECORD_TOS_TYPE_INDEX}},
|
||||
[LOAD_ATTR_METHOD_WITH_VALUES] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_METHOD_NO_DICT] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = {1, {_RECORD_TOS_INDEX}},
|
||||
[LOAD_ATTR_METHOD_LAZY_DICT] = {1, {_RECORD_TOS_INDEX}},
|
||||
[CALL] = {1, {_RECORD_CALLABLE_INDEX}},
|
||||
[CALL_PY_GENERAL] = {1, {_RECORD_CALLABLE_INDEX}},
|
||||
[CALL_BOUND_METHOD_GENERAL] = {1, {_RECORD_CALLABLE_INDEX}},
|
||||
|
|
@ -199,12 +200,13 @@ const _PyOpcodeRecordSlotMap _PyOpcode_RecordSlotMaps[256] = {
|
|||
[BINARY_OP_SUBSCR_GETITEM] = {1, 0, {0}},
|
||||
[SEND_GEN] = {1, 0, {0}},
|
||||
[LOAD_SUPER_ATTR_METHOD] = {1, 0, {0}},
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = {1, 0, {0}},
|
||||
[LOAD_ATTR_WITH_HINT] = {1, 0, {0}},
|
||||
[LOAD_ATTR_SLOT] = {1, 0, {0}},
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = {1, 1, {0}},
|
||||
[LOAD_ATTR_WITH_HINT] = {1, 1, {0}},
|
||||
[LOAD_ATTR_SLOT] = {1, 1, {0}},
|
||||
[LOAD_ATTR_CLASS] = {1, 0, {0}},
|
||||
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = {1, 0, {0}},
|
||||
[LOAD_ATTR_PROPERTY] = {1, 0, {0}},
|
||||
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = {1, 0, {0}},
|
||||
[LOAD_ATTR_PROPERTY] = {1, 1, {0}},
|
||||
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = {1, 1, {0}},
|
||||
[STORE_ATTR_INSTANCE_VALUE] = {1, 0, {0}},
|
||||
[STORE_ATTR_WITH_HINT] = {1, 0, {0}},
|
||||
[STORE_ATTR_SLOT] = {1, 0, {0}},
|
||||
|
|
@ -213,11 +215,11 @@ const _PyOpcodeRecordSlotMap _PyOpcode_RecordSlotMaps[256] = {
|
|||
[GET_ITER_VIRTUAL] = {1, 0, {0}},
|
||||
[FOR_ITER_GEN] = {1, 0, {0}},
|
||||
[LOAD_SPECIAL] = {1, 0, {0}},
|
||||
[LOAD_ATTR_METHOD_WITH_VALUES] = {1, 0, {0}},
|
||||
[LOAD_ATTR_METHOD_NO_DICT] = {1, 0, {0}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = {1, 0, {0}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = {1, 0, {0}},
|
||||
[LOAD_ATTR_METHOD_LAZY_DICT] = {1, 0, {0}},
|
||||
[LOAD_ATTR_METHOD_WITH_VALUES] = {1, 1, {0}},
|
||||
[LOAD_ATTR_METHOD_NO_DICT] = {1, 1, {0}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = {1, 1, {0}},
|
||||
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = {1, 1, {0}},
|
||||
[LOAD_ATTR_METHOD_LAZY_DICT] = {1, 1, {0}},
|
||||
[CALL_PY_GENERAL] = {1, 0, {0}},
|
||||
[CALL_BOUND_METHOD_GENERAL] = {1, 1, {0}},
|
||||
[CALL_NON_PY_GENERAL] = {1, 0, {0}},
|
||||
|
|
@ -237,11 +239,12 @@ const _PyOpcodeRecordSlotMap _PyOpcode_RecordSlotMaps[256] = {
|
|||
[BINARY_OP] = {2, 2, {1, 0}},
|
||||
};
|
||||
|
||||
const _Py_RecordFuncPtr _PyOpcode_RecordFunctions[8] = {
|
||||
const _Py_RecordFuncPtr _PyOpcode_RecordFunctions[9] = {
|
||||
[0] = NULL,
|
||||
[_RECORD_TOS_TYPE_INDEX] = _PyOpcode_RecordFunction_TOS_TYPE,
|
||||
[_RECORD_NOS_INDEX] = _PyOpcode_RecordFunction_NOS,
|
||||
[_RECORD_3OS_GEN_FUNC_INDEX] = _PyOpcode_RecordFunction_3OS_GEN_FUNC,
|
||||
[_RECORD_TOS_INDEX] = _PyOpcode_RecordFunction_TOS,
|
||||
[_RECORD_NOS_GEN_FUNC_INDEX] = _PyOpcode_RecordFunction_NOS_GEN_FUNC,
|
||||
[_RECORD_CALLABLE_INDEX] = _PyOpcode_RecordFunction_CALLABLE,
|
||||
[_RECORD_CALLABLE_KW_INDEX] = _PyOpcode_RecordFunction_CALLABLE_KW,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue