-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Test failure JIT\\Performance\\CodeQuality\\Roslyn\\CscBench\\CscBench.cmd #74900
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsRun: runtime-coreclr jitstress 20220830.1 Failed test:
Error message:
|
@jakobbotsch PTAL for the assert during 'VN based copy prop'. |
Probably from #74384 |
Not 7.0. |
@jakobbotsch happy to take this one off your hands if you don't want to fix it. |
Sure, go ahead -- you can probably fix it much more quickly than I can. |
We copy prop a promotable "can be replaced with its field" struct into a return during morph. Later VN copy prop expects there to be an SSA num on the use; there isn't one.
|
This comes up under stress because normally we'd have promoted
If V18 is promoted, morph replaces its appearance in the GT_RETURN:
So the question is, why doesn't this replacement also happen when we copy prop V21 there? Instead we keep the struct local.
And the reason is that morph does this local swap in the pre-order processing for a return, and runs assertion prop on the child afterwards. So if optimizing the child does a copy prop, we miss out on swapping the copy propped new local. |
Experimenting with running local AP before the return swap (as well as later when the child is morphed). Fixes the test case, anyways, with the struct being propped to another struct, then swapped to a local, and then that local being propped to another local. If this doesn't show any non-stress diffs it might be a bit odd to leave it in there. One thing I see looking at diffs here is that we might also want to consider copy propping a LCL_FLD into a LCL_VAR. |
There are a few diffs, so this might work. But first am going to try deferring the swap until after op1's been morphed. |
…to field In some rare cases (currently only jitstress) morph may miss out in updating a return of a "struct that can be replaced by its field" with the field, because we run local assertion prop afterward we check for this update, and assertion prop, and it may change the local from one that could not be updated into one that could be. So do a special run of assertion prop before this update, so that the local we analyze for possible update is same the one we'll be using in the end. I tried moving all of this to post-order so local assertion prop only ran once but that lead to more diffs and some regressions. Fixes dotnet#74900.
Failed again in: runtime-coreclr jitstress 20220911.1 Failed test:
Error message:
|
…r for returns (#75304) * JIT: run local assertion prop before morphing return of local struct to field In some rare cases (currently only jitstress) morph may miss out in updating a return of a "struct that can be replaced by its field" with the field, because we run local assertion prop afterward we check for this update, and assertion prop, and it may change the local from one that could not be updated into one that could be. So do a special run of assertion prop before this update, so that the local we analyze for possible update is same the one we'll be using in the end. I tried moving all of this to post-order so local assertion prop only ran once but that lead to more diffs and some regressions. Fixes #74900. * revise to try the update pre and post with ap in between
Run: runtime-coreclr jitstress 20220830.1
Failed test:
Error message:
The text was updated successfully, but these errors were encountered: