You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Random jit stress failures in JIT\Directed\arglist\vararg #81049
This misses some GTF_GLOB_REF markings on the [000247]-[000249] uses. Later fgFindOperOrder comes along and reverses the operands of the EQ node, which causes the problem.
There is a fundamental problem here which is that we don't set GTF_GLOB_REF on accesses of locals until during morph, yet the last-use copy elision is marking an existing local as address exposed during morph. So previous uses will not be marked GTF_GLOB_REF. Which is actually correct, those uses will not be global uses, but only as long as they not reordered with the future call argument.
Need to ponder a bit how to fix it. The temporary simple workaround might be to revisit the current statement and recompute GTF_GLOB_REF flags when we do this optimization, but that doesn't really prevent something downstream from coming along and reordering previous statements/local uses with the call. We might need to mark these as address exposed before morph to handle this (this could maybe be done together with #76926).
Activity
AndyAyersMS commentedon Jan 30, 2023
Also failed again this week, same two parts of the tests
JulieLeeMSFT commentedon Jan 30, 2023
Assigning to @jakobbotsch for struct related failure.
jakobbotsch commentedon Jan 31, 2023
I bisected this to 559aa0e, i.e. the new stress mode I added recently. Investigating in more detail now.
jakobbotsch commentedon Jan 31, 2023
After some forward subs, morph and some stress cloning we end up with:
This misses some
GTF_GLOB_REFmarkings on the[000247]-[000249]uses. LaterfgFindOperOrdercomes along and reverses the operands of theEQnode, which causes the problem.There is a fundamental problem here which is that we don't set
GTF_GLOB_REFon accesses of locals until during morph, yet the last-use copy elision is marking an existing local as address exposed during morph. So previous uses will not be markedGTF_GLOB_REF. Which is actually correct, those uses will not be global uses, but only as long as they not reordered with the future call argument.Need to ponder a bit how to fix it. The temporary simple workaround might be to revisit the current statement and recompute
GTF_GLOB_REFflags when we do this optimization, but that doesn't really prevent something downstream from coming along and reordering previous statements/local uses with the call. We might need to mark these as address exposed before morph to handle this (this could maybe be done together with #76926).JIT: Update GTF_GLOB_REF after last-use copy omission
JIT: Update GTF_GLOB_REF after last-use copy omission (#81430)