gh-139757: Treat call specially in JIT assembly backend optimizer on x86-64 and AArch64#142907
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.
On x86-64 and AArch64, a call is effectively a jump to a label with some caveats. As such, the assembly flow optimizer must treat it as such, or it risks emitting invalid optimizations.
The bug triggers in the following code:
The assembly optimizer currently doesn't see
PyStackRef_CLOSEas being used, and just optimizes the whole thing away.The fix informs the assembly optimizer we might jump to
PyStackRef_CLOSE, thus the label is used and to preserve it.I verified it fixes the crash on FT builds on my system.
The reason why we didn't see this earlier is that our stencils were at -O3 and that squashed them all into one function. After we switched to -Os, bigger stencils get outlined. It just so happens the biggest stencils are on FT.