mirror of
https://github.com/python/cpython.git
synced 2025-08-23 18:24:46 +00:00
GH-118093: Turn some DEOPT_IFs into EXIT_IFs (GH-122998)
This commit is contained in:
parent
51185923a8
commit
f84754b705
5 changed files with 42 additions and 42 deletions
14
Include/internal/pycore_opcode_metadata.h
generated
14
Include/internal/pycore_opcode_metadata.h
generated
|
@ -1022,7 +1022,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[264] = {
|
||||||
[CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_FUNCTION_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_FUNCTION_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
|
@ -1030,10 +1030,10 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[264] = {
|
||||||
[CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_LEN] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_LEN] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG },
|
[CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG },
|
||||||
[CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
[CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
||||||
[CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
[CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
|
||||||
|
@ -1109,7 +1109,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[264] = {
|
||||||
[LIST_APPEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
|
[LIST_APPEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
|
||||||
[LIST_EXTEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[LIST_EXTEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
|
[LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG },
|
||||||
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
|
[LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
[LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
||||||
[LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
[LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
||||||
|
@ -1171,7 +1171,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[264] = {
|
||||||
[SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
|
[SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[SET_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[SET_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[STORE_ATTR] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[STORE_ATTR] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
[STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG },
|
||||||
[STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG },
|
[STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG },
|
||||||
[STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
[STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[STORE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG },
|
[STORE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG },
|
||||||
|
|
16
Include/internal/pycore_uop_metadata.h
generated
16
Include/internal/pycore_uop_metadata.h
generated
|
@ -147,17 +147,17 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
||||||
[_LOAD_ATTR_INSTANCE_VALUE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_OPARG_AND_1_FLAG,
|
[_LOAD_ATTR_INSTANCE_VALUE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_OPARG_AND_1_FLAG,
|
||||||
[_CHECK_ATTR_MODULE] = HAS_DEOPT_FLAG,
|
[_CHECK_ATTR_MODULE] = HAS_DEOPT_FLAG,
|
||||||
[_LOAD_ATTR_MODULE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
|
[_LOAD_ATTR_MODULE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
|
||||||
[_CHECK_ATTR_WITH_HINT] = HAS_DEOPT_FLAG,
|
[_CHECK_ATTR_WITH_HINT] = HAS_EXIT_FLAG,
|
||||||
[_LOAD_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG,
|
[_LOAD_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG,
|
||||||
[_LOAD_ATTR_SLOT_0] = HAS_DEOPT_FLAG,
|
[_LOAD_ATTR_SLOT_0] = HAS_DEOPT_FLAG,
|
||||||
[_LOAD_ATTR_SLOT_1] = HAS_DEOPT_FLAG,
|
[_LOAD_ATTR_SLOT_1] = HAS_DEOPT_FLAG,
|
||||||
[_LOAD_ATTR_SLOT] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_OPARG_AND_1_FLAG,
|
[_LOAD_ATTR_SLOT] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_OPARG_AND_1_FLAG,
|
||||||
[_CHECK_ATTR_CLASS] = HAS_DEOPT_FLAG,
|
[_CHECK_ATTR_CLASS] = HAS_EXIT_FLAG,
|
||||||
[_LOAD_ATTR_CLASS_0] = 0,
|
[_LOAD_ATTR_CLASS_0] = 0,
|
||||||
[_LOAD_ATTR_CLASS_1] = 0,
|
[_LOAD_ATTR_CLASS_1] = 0,
|
||||||
[_LOAD_ATTR_CLASS] = HAS_ARG_FLAG | HAS_OPARG_AND_1_FLAG,
|
[_LOAD_ATTR_CLASS] = HAS_ARG_FLAG | HAS_OPARG_AND_1_FLAG,
|
||||||
[_LOAD_ATTR_PROPERTY_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
[_LOAD_ATTR_PROPERTY_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_GUARD_DORV_NO_DICT] = HAS_DEOPT_FLAG,
|
[_GUARD_DORV_NO_DICT] = HAS_EXIT_FLAG,
|
||||||
[_STORE_ATTR_INSTANCE_VALUE] = 0,
|
[_STORE_ATTR_INSTANCE_VALUE] = 0,
|
||||||
[_STORE_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
[_STORE_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_STORE_ATTR_SLOT] = 0,
|
[_STORE_ATTR_SLOT] = 0,
|
||||||
|
@ -227,16 +227,16 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
||||||
[_CALL_TUPLE_1] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_TUPLE_1] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_EXIT_INIT_CHECK] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
[_EXIT_INIT_CHECK] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_BUILTIN_CLASS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_BUILTIN_CLASS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_BUILTIN_O] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_BUILTIN_O] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_BUILTIN_FAST] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_BUILTIN_FAST] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_BUILTIN_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_BUILTIN_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_LEN] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_LEN] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_ISINSTANCE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_ISINSTANCE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_LIST_APPEND] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG,
|
[_CALL_LIST_APPEND] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG,
|
||||||
[_CALL_METHOD_DESCRIPTOR_O] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_METHOD_DESCRIPTOR_O] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_METHOD_DESCRIPTOR_NOARGS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_METHOD_DESCRIPTOR_NOARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_CALL_METHOD_DESCRIPTOR_FAST] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_CALL_METHOD_DESCRIPTOR_FAST] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_MAKE_FUNCTION] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
[_MAKE_FUNCTION] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_SET_FUNCTION_ATTRIBUTE] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG,
|
[_SET_FUNCTION_ATTRIBUTE] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_RETURN_GENERATOR] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
[_RETURN_GENERATOR] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
|
||||||
|
|
|
@ -2061,7 +2061,7 @@ dummy_func(
|
||||||
|
|
||||||
assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
|
assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
|
||||||
PyDictObject *dict = _PyObject_GetManagedDict(owner_o);
|
PyDictObject *dict = _PyObject_GetManagedDict(owner_o);
|
||||||
DEOPT_IF(dict == NULL);
|
EXIT_IF(dict == NULL);
|
||||||
assert(PyDict_CheckExact((PyObject *)dict));
|
assert(PyDict_CheckExact((PyObject *)dict));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2112,9 +2112,9 @@ dummy_func(
|
||||||
op(_CHECK_ATTR_CLASS, (type_version/2, owner -- owner)) {
|
op(_CHECK_ATTR_CLASS, (type_version/2, owner -- owner)) {
|
||||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||||
|
|
||||||
DEOPT_IF(!PyType_Check(owner_o));
|
EXIT_IF(!PyType_Check(owner_o));
|
||||||
assert(type_version != 0);
|
assert(type_version != 0);
|
||||||
DEOPT_IF(((PyTypeObject *)owner_o)->tp_version_tag != type_version);
|
EXIT_IF(((PyTypeObject *)owner_o)->tp_version_tag != type_version);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2189,8 +2189,8 @@ dummy_func(
|
||||||
|
|
||||||
assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
|
assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
|
||||||
assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
|
assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
|
||||||
DEOPT_IF(_PyObject_GetManagedDict(owner_o));
|
EXIT_IF(_PyObject_GetManagedDict(owner_o));
|
||||||
DEOPT_IF(_PyObject_InlineValues(owner_o)->valid == 0);
|
EXIT_IF(_PyObject_InlineValues(owner_o)->valid == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
op(_STORE_ATTR_INSTANCE_VALUE, (index/1, value, owner --)) {
|
op(_STORE_ATTR_INSTANCE_VALUE, (index/1, value, owner --)) {
|
||||||
|
@ -3655,11 +3655,11 @@ dummy_func(
|
||||||
args--;
|
args--;
|
||||||
total_args++;
|
total_args++;
|
||||||
}
|
}
|
||||||
DEOPT_IF(total_args != 1);
|
EXIT_IF(total_args != 1);
|
||||||
DEOPT_IF(!PyCFunction_CheckExact(callable_o));
|
EXIT_IF(!PyCFunction_CheckExact(callable_o));
|
||||||
DEOPT_IF(PyCFunction_GET_FLAGS(callable_o) != METH_O);
|
EXIT_IF(PyCFunction_GET_FLAGS(callable_o) != METH_O);
|
||||||
// CPython promises to check all non-vectorcall function calls.
|
// CPython promises to check all non-vectorcall function calls.
|
||||||
DEOPT_IF(tstate->c_recursion_remaining <= 0);
|
EXIT_IF(tstate->c_recursion_remaining <= 0);
|
||||||
STAT_INC(CALL, hit);
|
STAT_INC(CALL, hit);
|
||||||
PyCFunction cfunc = PyCFunction_GET_FUNCTION(callable_o);
|
PyCFunction cfunc = PyCFunction_GET_FUNCTION(callable_o);
|
||||||
_PyStackRef arg = args[0];
|
_PyStackRef arg = args[0];
|
||||||
|
@ -3851,15 +3851,15 @@ dummy_func(
|
||||||
}
|
}
|
||||||
|
|
||||||
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
||||||
DEOPT_IF(total_args != 2);
|
EXIT_IF(total_args != 2);
|
||||||
DEOPT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
EXIT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
||||||
PyMethodDef *meth = method->d_method;
|
PyMethodDef *meth = method->d_method;
|
||||||
DEOPT_IF(meth->ml_flags != METH_O);
|
EXIT_IF(meth->ml_flags != METH_O);
|
||||||
// CPython promises to check all non-vectorcall function calls.
|
// CPython promises to check all non-vectorcall function calls.
|
||||||
DEOPT_IF(tstate->c_recursion_remaining <= 0);
|
EXIT_IF(tstate->c_recursion_remaining <= 0);
|
||||||
_PyStackRef arg_stackref = args[1];
|
_PyStackRef arg_stackref = args[1];
|
||||||
_PyStackRef self_stackref = args[0];
|
_PyStackRef self_stackref = args[0];
|
||||||
DEOPT_IF(!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref),
|
EXIT_IF(!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref),
|
||||||
method->d_common.d_type));
|
method->d_common.d_type));
|
||||||
STAT_INC(CALL, hit);
|
STAT_INC(CALL, hit);
|
||||||
PyCFunction cfunc = meth->ml_meth;
|
PyCFunction cfunc = meth->ml_meth;
|
||||||
|
@ -3891,12 +3891,12 @@ dummy_func(
|
||||||
total_args++;
|
total_args++;
|
||||||
}
|
}
|
||||||
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
||||||
DEOPT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
EXIT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
||||||
PyMethodDef *meth = method->d_method;
|
PyMethodDef *meth = method->d_method;
|
||||||
DEOPT_IF(meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS));
|
EXIT_IF(meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS));
|
||||||
PyTypeObject *d_type = method->d_common.d_type;
|
PyTypeObject *d_type = method->d_common.d_type;
|
||||||
PyObject *self = PyStackRef_AsPyObjectBorrow(args[0]);
|
PyObject *self = PyStackRef_AsPyObjectBorrow(args[0]);
|
||||||
DEOPT_IF(!Py_IS_TYPE(self, d_type));
|
EXIT_IF(!Py_IS_TYPE(self, d_type));
|
||||||
STAT_INC(CALL, hit);
|
STAT_INC(CALL, hit);
|
||||||
int nargs = total_args - 1;
|
int nargs = total_args - 1;
|
||||||
PyCFunctionFastWithKeywords cfunc =
|
PyCFunctionFastWithKeywords cfunc =
|
||||||
|
@ -3935,16 +3935,16 @@ dummy_func(
|
||||||
args--;
|
args--;
|
||||||
total_args++;
|
total_args++;
|
||||||
}
|
}
|
||||||
DEOPT_IF(total_args != 1);
|
EXIT_IF(total_args != 1);
|
||||||
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
||||||
DEOPT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
EXIT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
||||||
PyMethodDef *meth = method->d_method;
|
PyMethodDef *meth = method->d_method;
|
||||||
_PyStackRef self_stackref = args[0];
|
_PyStackRef self_stackref = args[0];
|
||||||
PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref);
|
PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref);
|
||||||
DEOPT_IF(!Py_IS_TYPE(self, method->d_common.d_type));
|
EXIT_IF(!Py_IS_TYPE(self, method->d_common.d_type));
|
||||||
DEOPT_IF(meth->ml_flags != METH_NOARGS);
|
EXIT_IF(meth->ml_flags != METH_NOARGS);
|
||||||
// CPython promises to check all non-vectorcall function calls.
|
// CPython promises to check all non-vectorcall function calls.
|
||||||
DEOPT_IF(tstate->c_recursion_remaining <= 0);
|
EXIT_IF(tstate->c_recursion_remaining <= 0);
|
||||||
STAT_INC(CALL, hit);
|
STAT_INC(CALL, hit);
|
||||||
PyCFunction cfunc = meth->ml_meth;
|
PyCFunction cfunc = meth->ml_meth;
|
||||||
_Py_EnterRecursiveCallTstateUnchecked(tstate);
|
_Py_EnterRecursiveCallTstateUnchecked(tstate);
|
||||||
|
@ -3973,11 +3973,11 @@ dummy_func(
|
||||||
}
|
}
|
||||||
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
|
||||||
/* Builtin METH_FASTCALL methods, without keywords */
|
/* Builtin METH_FASTCALL methods, without keywords */
|
||||||
DEOPT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
EXIT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type));
|
||||||
PyMethodDef *meth = method->d_method;
|
PyMethodDef *meth = method->d_method;
|
||||||
DEOPT_IF(meth->ml_flags != METH_FASTCALL);
|
EXIT_IF(meth->ml_flags != METH_FASTCALL);
|
||||||
PyObject *self = PyStackRef_AsPyObjectBorrow(args[0]);
|
PyObject *self = PyStackRef_AsPyObjectBorrow(args[0]);
|
||||||
DEOPT_IF(!Py_IS_TYPE(self, method->d_common.d_type));
|
EXIT_IF(!Py_IS_TYPE(self, method->d_common.d_type));
|
||||||
STAT_INC(CALL, hit);
|
STAT_INC(CALL, hit);
|
||||||
PyCFunctionFast cfunc =
|
PyCFunctionFast cfunc =
|
||||||
(PyCFunctionFast)(void(*)(void))meth->ml_meth;
|
(PyCFunctionFast)(void(*)(void))meth->ml_meth;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue