gh-124153: Clean up workarounds for PyType_GetBaseByToken() performance#124323
Uh oh!
There was an error while loading. Please reload this page.
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