gh-124153: Clean up workarounds for PyType_GetBaseByToken() performance
#124323
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This moves down
PyType_GetBaseByToken()'s sub functions intypeobject.c.Regarding MSVC, most of the PGO performance depends on the initial layout of
*.objfile compiled at the collection phase (PGInsturment). Hopefully,PyType_GetBaseByToken()could have a stable performance, once we find a good formation of the family, as the performance defference between 3.9 and 3.10.X, which has come from theceval.clayout, is still constant in a good PGO health.Without this, any functions in
typeobject.ccan be slower if they have a similar branch:Currently,
PyType_GetSlot(),PyType_GetModule()andPyType_GetModuleBydef()have it as well as the family.PyType_GetModuleBydef()actually misses about 10% on thetelcobenchmark.If this patch is too OS specific, alternative ways to recover the
PyType_GetModuleBydef()performance would be:_PyType_HasFeature()an alias ofPyType_HasFeature().if-elsein the loop, which needs to be checked after_PyType_GetModuleBydef2()is removed.PyType_GetBaseByTokenfunction withPy_tp_tokenslot #124153