-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Less aggressive stfld
spilling
#71663
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsUsing the CI to see what breaks.
|
/azp run Antigen, Fuzzlyn |
Azure Pipelines successfully started running 2 pipeline(s). |
Fuzzer failures look preexisting. @dotnet/jit-contrib |
Can you look into some of the larger diffs? eg x64 win libraries pmi:
|
The larger regressions are due to us inlining more as we now have fewer temps. |
I can see that for some of the larger methods, but the one above is fairly small. |
Hmm, for ./diff-dasm 242426
; rsp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 25 single block inlinees; 17 inlinees without PGO data
+; 0 inlinees with PGO data; 30 single block inlinees; 21 inlinees without PGO data
; Final local variable assignments However, the other methods from the list do not have inlining diffs. Will dig deeper, though I suspect these are the usual consequences of reducing/altering the number and uses of temps. Edit: curiously enough, local SPMI for Windows x64 specifically is visibly nicer, suggesting that there has been a change between the my fork and upstream which affects the numbers... |
How many temps do we end up with in that case? I though we only backed off inlining once we got near the tracking limit. |
Overall in the diff (i. e. with the new inlinees) we have only 83 locals.
I think it's this heuristic that's responsible: runtime/src/coreclr/jit/inlinepolicy.cpp Lines 1707 to 1714 in 0ab2c1e
|
06a6b27
to
9e59f3c
Compare
Ah, right. Thanks for investigating. |
The spilling logic for
st[s]fld
was quite quite complex, and not complete. Replace it with the simple spilling of side effects and global data accesses, which is all that's needed.The new logic is less conservative because it doesn't spill invariant nodes when the assign is to a struct field, so we see a good number of positive diffs.
Fixes #71638.
Diffs.