mirror of
https://github.com/python/cpython.git
synced 2026-04-20 02:40:59 +00:00
gh-131798: do not watch immutable types in JIT (#148383)
This commit is contained in:
parent
9c9df8ac8c
commit
ba1e1c192b
3 changed files with 19 additions and 10 deletions
|
|
@ -397,8 +397,10 @@ lookup_attr(JitOptContext *ctx, _PyBloomFilter *dependencies, _PyUOpInstruction
|
|||
if (suffix != _NOP) {
|
||||
ADD_OP(suffix, 2, 0);
|
||||
}
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)type);
|
||||
_Py_BloomFilter_Add(dependencies, type);
|
||||
if ((type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)type);
|
||||
_Py_BloomFilter_Add(dependencies, type);
|
||||
}
|
||||
return sym_new_const(ctx, lookup);
|
||||
}
|
||||
}
|
||||
|
|
@ -466,10 +468,13 @@ lookup_super_attr(JitOptContext *ctx, _PyBloomFilter *dependencies,
|
|||
if (suffix != _NOP) {
|
||||
ADD_OP(suffix, 2, 0);
|
||||
}
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)su_type);
|
||||
_Py_BloomFilter_Add(dependencies, su_type);
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)obj_type);
|
||||
_Py_BloomFilter_Add(dependencies, obj_type);
|
||||
// if obj_type is immutable, then all its superclasses are immutable
|
||||
if ((obj_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)su_type);
|
||||
_Py_BloomFilter_Add(dependencies, su_type);
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)obj_type);
|
||||
_Py_BloomFilter_Add(dependencies, obj_type);
|
||||
}
|
||||
return sym_new_const_steal(ctx, lookup);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -142,8 +142,10 @@ dummy_func(void) {
|
|||
PyTypeObject *probable_type = sym_get_probable_type(owner);
|
||||
if (probable_type->tp_version_tag == type_version && sym_set_type_version(owner, type_version)) {
|
||||
// Promote the probable type version to a known one.
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
|
||||
_Py_BloomFilter_Add(dependencies, probable_type);
|
||||
if ((probable_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
|
||||
_Py_BloomFilter_Add(dependencies, probable_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
6
Python/optimizer_cases.c.h
generated
6
Python/optimizer_cases.c.h
generated
|
|
@ -2451,8 +2451,10 @@
|
|||
} else {
|
||||
PyTypeObject *probable_type = sym_get_probable_type(owner);
|
||||
if (probable_type->tp_version_tag == type_version && sym_set_type_version(owner, type_version)) {
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
|
||||
_Py_BloomFilter_Add(dependencies, probable_type);
|
||||
if ((probable_type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
|
||||
PyType_Watch(TYPE_WATCHER_ID, (PyObject *)probable_type);
|
||||
_Py_BloomFilter_Add(dependencies, probable_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue