Uh oh!
There was an error while loading. Please reload this page.
JIT: Remove a quirk in regular promotion - #88130
Conversation
Also fix a bug in LSRA: if we undo promotion of one field of a multi-reg struct and as a result undo for the other fields as well, we must also clear out the largeVectorVars bitset to indicate these are no longer candidates.
ghost
commented
Jun 28, 2023
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsAlso fix a bug in LSRA: if we undo promotion of one field of a multi-reg struct and as a result undo for the other fields as well, we must also clear out the largeVectorVars bitset to indicate these are no longer candidates.
|
jakobbotsch
commented
Jun 28, 2023
/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, runtime-coreclr outerloop |
|
Azure Pipelines successfully started running 3 pipeline(s). |
jakobbotsch
commented
Jun 28, 2023
cc @dotnet/jit-contrib PTAL @kunalspathak Some decent diffs (mostly in tests, but a few KB in other collections too). |
jakobbotsch
commented
Jul 1, 2023
Ping @kunalspathak, can you please take a look at this simple change? It will likely end up blocking #88238 otherwise. |
| localVarIntervals[fieldVarDsc->lvVarIndex] = nullptr; | ||
| VarSetOps::RemoveElemD(compiler, registerCandidateVars, fieldVarDsc->lvVarIndex); | ||
| #if FEATURE_PARTIAL_SIMD_CALLEE_SAVE | ||
| VarSetOps::RemoveElemD(compiler, largeVectorVars, fieldVarDsc->lvVarIndex); |
There was a problem hiding this comment.
Not sure if it makes sense to check if fieldVarDsc->lvVarIndex was part of largeVectorVars to begin with.
There was a problem hiding this comment.
Hmm, I think just clearing it unconditionally should be ok.
Also fix a bug in LSRA: if we undo promotion of one field of a multi-reg struct and as a result undo for the other fields as well, we must also clear out the largeVectorVars bitset to indicate these are no longer candidates. This was hitting crashes with some of the new promotions done by this change.