Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ed870bb

Browse files
committed
Merge branch 'main' into intrinsics
2 parents fcf2806 + f20c553 commit ed870bb

File tree

8 files changed

+42
-97
lines changed

8 files changed

+42
-97
lines changed

Include/internal/pycore_opcode.h

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/opcode.h

Lines changed: 16 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Lib/opcode.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,6 @@ def pseudo_op(name, op, real_ops):
334334
# These will always push [unbound method, self] onto the stack.
335335
"LOAD_ATTR_METHOD_LAZY_DICT",
336336
"LOAD_ATTR_METHOD_NO_DICT",
337-
"LOAD_ATTR_METHOD_WITH_DICT",
338337
"LOAD_ATTR_METHOD_WITH_VALUES",
339338
],
340339
"LOAD_CONST": [
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Remove the LOAD_ATTR_METHOD_WITH_DICT specialized instruction. Stats show it
2+
is not useful.

Python/bytecodes.c

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2534,33 +2534,6 @@ dummy_func(
25342534
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
25352535
}
25362536

2537-
// error: LOAD_ATTR has irregular stack effect
2538-
inst(LOAD_ATTR_METHOD_WITH_DICT) {
2539-
/* Can be either a managed dict, or a tp_dictoffset offset.*/
2540-
assert(cframe.use_tracing == 0);
2541-
PyObject *self = TOP();
2542-
PyTypeObject *self_cls = Py_TYPE(self);
2543-
_PyLoadMethodCache *cache = (_PyLoadMethodCache *)next_instr;
2544-
2545-
DEOPT_IF(self_cls->tp_version_tag != read_u32(cache->type_version),
2546-
LOAD_ATTR);
2547-
/* Treat index as a signed 16 bit value */
2548-
Py_ssize_t dictoffset = self_cls->tp_dictoffset;
2549-
assert(dictoffset > 0);
2550-
PyDictObject **dictptr = (PyDictObject**)(((char *)self)+dictoffset);
2551-
PyDictObject *dict = *dictptr;
2552-
DEOPT_IF(dict == NULL, LOAD_ATTR);
2553-
DEOPT_IF(dict->ma_keys->dk_version != read_u32(cache->keys_version),
2554-
LOAD_ATTR);
2555-
STAT_INC(LOAD_ATTR, hit);
2556-
PyObject *res = read_obj(cache->descr);
2557-
assert(res != NULL);
2558-
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
2559-
SET_TOP(Py_NewRef(res));
2560-
PUSH(self);
2561-
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
2562-
}
2563-
25642537
// error: LOAD_ATTR has irregular stack effect
25652538
inst(LOAD_ATTR_METHOD_NO_DICT) {
25662539
assert(cframe.use_tracing == 0);
@@ -3446,7 +3419,7 @@ family(load_attr) = {
34463419
LOAD_ATTR, LOAD_ATTR_CLASS,
34473420
LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN, LOAD_ATTR_INSTANCE_VALUE, LOAD_ATTR_MODULE,
34483421
LOAD_ATTR_PROPERTY, LOAD_ATTR_SLOT, LOAD_ATTR_WITH_HINT,
3449-
LOAD_ATTR_METHOD_LAZY_DICT, LOAD_ATTR_METHOD_NO_DICT, LOAD_ATTR_METHOD_WITH_DICT,
3422+
LOAD_ATTR_METHOD_LAZY_DICT, LOAD_ATTR_METHOD_NO_DICT,
34503423
LOAD_ATTR_METHOD_WITH_VALUES };
34513424
family(load_global) = {
34523425
LOAD_GLOBAL, LOAD_GLOBAL_BUILTIN,

Python/generated_cases.c.h

Lines changed: 0 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/opcode_targets.h

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/specialize.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,9 +1091,8 @@ PyObject *descr, DescriptorClassification kind)
10911091
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_HAS_MANAGED_DICT);
10921092
goto fail;
10931093
case OFFSET_DICT:
1094-
assert(owner_cls->tp_dictoffset > 0 && owner_cls->tp_dictoffset <= INT16_MAX);
1095-
_py_set_opcode(instr, LOAD_ATTR_METHOD_WITH_DICT);
1096-
break;
1094+
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_NOT_MANAGED_DICT);
1095+
goto fail;
10971096
case LAZY_DICT:
10981097
assert(owner_cls->tp_dictoffset > 0 && owner_cls->tp_dictoffset <= INT16_MAX);
10991098
_py_set_opcode(instr, LOAD_ATTR_METHOD_LAZY_DICT);

0 commit comments

Comments
 (0)