Uh oh!
There was an error while loading. Please reload this page.
Set lvSingleDef for non TYP_REF locals - #85398
Conversation
ghost
commented
Apr 26, 2023
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsSets lvSingleDef for non TYP_REF locals, currently this should only affect reuse of RET_EXPR spills. Split off from #85197.
|
b132f2d to
6c69793CompareMichalPetryka
commented
Apr 29, 2023
Diffs are mostly moves being shuffled around and more places being affected by #85547. |
AndyAyersMS
left a comment
There was a problem hiding this comment.
Can you write up a summary of the diffs this causes? Make sure to include some of the ASP.NET regressions, eg:
Top method regressions (percentages):
27 (18.88 % of base) : 24443.dasm - System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1+StateMachineBox`1[int,Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream+<ReadAsyncInternal>d__30]:RentFromCache():System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1+StateMachineBox`1[int,Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream+<ReadAsyncInternal>d__30]
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: Andy Ayers <andya@microsoft.com>
MichalPetryka
commented
Apr 29, 2023
That specific one is caused by PGO marking a block as zero weight which blocks CSE, as per @SingleAccretion handling that would be tricky. |
jakobbotsch
commented
Apr 30, 2023
That issue is just the reason why it looks less efficient than it could be, but what is the reason that jump threading kicks in now but not before? |
MichalPetryka
commented
Apr 30, 2023
It's because inlinees now assign their returns directly to the variable in the method they're inlined to, instead of to a temp that's later assigned to the variable which I assume happend to block it. |
AndyAyersMS
commented
Apr 30, 2023
Jump threading can't handle cases where the block to thread has side effects, so it could be by reusing a temp we're avoiding a temp to temp copy in an unfortunate spot. |
AndyAyersMS
left a comment
There was a problem hiding this comment.
Looks good to me now. Thanks!
Sets lvSingleDef for non TYP_REF locals, currently this should only affect reuse of RET_EXPR spills.
Split off from #85197.