-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
GH-139922: Tail calling for MSVC (VS 2026) #143068
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
In the future, please communicate if you want to supercede a PR for other contributors. It's often considered not good etiquette to take over another person's PR unless they explicitly allow it. However, I'm more than happy to let you take over the PR in this case. |
Objects/abstract.c
Outdated
| // MSVC fails during a tail call release build with loads of | ||
| // error C4737: Unable to perform required tail call. | ||
| // without using Py_NO_INLINE here, but PGO works fine. | ||
| #if defined(_MSC_VER) && !defined(__clang__) && _Py_TAIL_CALL_INTERP && !defined(_Py_USING_PGO) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It needed lots of trial and error to come up with this unintuive minimal change needed to convince MSVC that the local variable passed by reference into result here does not escape the tail call.
Using it as an return value in PyMapping_GetOptionalItem2 is more explicit, but might have other drawbacks?
Sorry, wasn't ment as superseding, more as a follow up and maybe just a draft for new discussions. Thought about you're gonna take whatever deems appropriate back into your original PR ... If this here is going to fly, I'd like to include you and Brandt as authors for the commits, but don't know how atm ... |
|
Oh I'm happy to be superseded. If you'd like to attribute commit history though, you can just push a trivial commit with the co-author info like Hugo pointed out, and when I squash and merge I'll use that. |
Co-Authored-By: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Co-Authored-By: Brandt Bucher <brandt@python.org>
|
Try pulling |
Done |
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
I could not add this one to batch, so have to do it separately Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
|
https://github.com/python/cpython/actions/runs/20437258430/job/58722460806 failed inbetween I've found this: #143073 Hopefully, this will fix it ... |
try to fix "Native Windows MSVC (release)"
|
Just ignore the JIT problems for now. The new JIT executor management has a known bug #143026 |
|
🤖 New build scheduled with the buildbot fleet by @Fidget-Spinner for commit da1adaf 🤖 Results will be shown at: https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F143068%2Fmerge If you want to schedule another build, you need to add the 🔨 test-with-refleak-buildbots label again. |
|
Benchmark results are within noise for the default interpreter https://github.com/facebookexperimental/free-threading-benchmarking/blob/main/results/bm-20251222-3.15.0a3%2B-da1adaf/bm-20251222-vultr-x86_64-chris%252deibl-msvc_tail_call_new-3.15.0a3%2B-da1adaf-vs-base.md Refleak bots are green. |
Fidget-Spinner
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Once again:
- This PR is the successor of one that has been up for 2 months already #139962 . We've had enough discussion there to get a sensing of what we want.
- Refleak tests are green, performance results are within noise for the default (computed goto) interpreter.
- This PR adds CI for the new configuration, which is also green.
- I have discussed this feature with the other core devs a few months back on our bi-weekly perf meetings. Everyone was in agreement that adding scopes to MSVC is fine as it isn't that invasive.
- This PR is the minimal changeset required to get TC working on MSVC.
- It uses the techniques suggested by Mark in the other PR (just adding scopes and commenting on them). So I expect he should be okay with the overall design I hope. I understand he might disagree on some of the smaller changes.
- It LGTM, from my review of the changes.
Therefore, I'm merging this PR.
Any follow-ups can be done on future PRs. Any discussion about the design can be done on the issue itself.
So much has happened on main that I started fresh over and sqash merged the needed things from #139962 onto latest main (mostly because I wanted to use it for my own experiments on main again).
Based on @markshannon's work in #142228 I've factored out
_Py_VectorCallInstrumentation_StackRefSteal, because then @Fidget-Spinner's #138115 is not needed in this PR and can be done in a follow-up. An alternative would be to keep it and pasststateinto thePy_*_StackRefStealfunctions.