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
*.obj
file 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.c
layout, is still constant in a good PGO health.Without this, any functions in
typeobject.c
can 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 thetelco
benchmark.If this patch is too OS specific, alternative ways to recover the
PyType_GetModuleBydef()
performance would be:_PyType_HasFeature()
an alias ofPyType_HasFeature()
.if-else
in the loop, which needs to be checked after_PyType_GetModuleBydef2()
is removed.PyType_GetBaseByToken
function withPy_tp_token
slot #124153