-
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
Assertion failed 'unused->OperIs(GT_CNS_INT)' #77152
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue Detailsruntime-coreclr jitstress-random https://dev.azure.com/dnceng-public/public/_build/results?buildId=54121&view=logs&j=63f2a02a-7891-5505-e9da-45b13105e16b&t=af4e7a65-4894-5021-63d1-400b0a3e36a0
cc @dotnet/jit-contrib
|
There's some confusion in this bug report. The arm64 link is to a GitHub_23159 failure, previously opened as #76880 and now fixed. The assert above is from an x86 run. |
The question is whether for |
The (pre-lower) stress-generated tree here is:
|
Long decomposition inserts a temp for the "GT_CAST(long<-int)(GT_CNS_INT(3))" which makes it even more complex:
|
This is all due to |
Issue dotnet#77152 is an assert in unoptimized code where the IR constructs an addressing mode from a tree including a GT_MUL with op2 of zero, hence it ignores op1, but then asserts because it only expects a limited set of IR nodes to be in the op1 tree. This fixes this one particular case by avoiding creating the extra nodes in this stress mode. In normal optimized code, the MUL with zero would be folded. Fixes dotnet#77152
This is a general solution to dotnet#77152, allowing for deleting any set of nodes that contributed to an address mode, especially those nodes on the `op1` side of a GT_MUL with a zero `op2`. Note that for the dotnet#77152 case, this deletes all the `op1` nodes, but leaves behind a dead temp var that was created as part of long MUL rationalization. Fixes dotnet#77152.
* Allow deleting any kind of nodes after address mode formation This is a general solution to #77152, allowing for deleting any set of nodes that contributed to an address mode, especially those nodes on the `op1` side of a GT_MUL with a zero `op2`. Note that for the #77152 case, this deletes all the `op1` nodes, but leaves behind a dead temp var that was created as part of long MUL rationalization. Fixes #77152. * Add DEBUG_DESTROY_NODE
runtime-coreclr jitstress-random
coreclr Pri1 Runtime Tests Run windows x86 checked
[updated] https://dev.azure.com/dnceng-public/public/_build/results?buildId=54121&view=logs&j=9c28ef9e-8a10-596f-95ff-bea6927d5d94&t=14c2c9a6-52b0-53ea-b9dd-44cd3ba342a9
https://helixre107v0xdeko0k025g8.blob.core.windows.net/dotnet-runtime-refs-heads-main-7d574e4ebff54bd58d/JIT.Regression/1/console.f4fb506d.log?helixlogtype=result
cc @dotnet/jit-contrib
The text was updated successfully, but these errors were encountered: