From eec3dcd20c3bebba57138488c1a15ee7f1e9099b Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Sat, 11 Apr 2026 19:20:49 +0530 Subject: [PATCH 1/3] do not watch immutable types in JIT --- Python/optimizer_analysis.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c index 069f4aeffa64fc..8d4eaf8f47ccee 100644 --- a/Python/optimizer_analysis.c +++ b/Python/optimizer_analysis.c @@ -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,12 @@ 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->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); } From 35dfa53299e26fabfabcd889a7341c675c264fa7 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Sat, 11 Apr 2026 19:35:27 +0530 Subject: [PATCH 2/3] add comment --- Python/optimizer_analysis.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c index 8d4eaf8f47ccee..ca9bcc8a40c35e 100644 --- a/Python/optimizer_analysis.c +++ b/Python/optimizer_analysis.c @@ -468,6 +468,7 @@ lookup_super_attr(JitOptContext *ctx, _PyBloomFilter *dependencies, if (suffix != _NOP) { ADD_OP(suffix, 2, 0); } + // 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); From 4a67422c1c98f1058f4b953fb7430bfb011f7431 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Sat, 11 Apr 2026 20:45:22 +0530 Subject: [PATCH 3/3] do the same for _GUARD_TYPE_VERSION_LOCKED --- Python/optimizer_bytecodes.c | 6 ++++-- Python/optimizer_cases.c.h | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Python/optimizer_bytecodes.c b/Python/optimizer_bytecodes.c index c7fe34bf785c0b..c12a4f4131bc7e 100644 --- a/Python/optimizer_bytecodes.c +++ b/Python/optimizer_bytecodes.c @@ -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); + } } } } diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 98287e7f841761..2db2c87cb3610b 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -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;