-
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
Resolving an antigen failure #105260
Resolving an antigen failure #105260
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1570,6 +1570,21 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node) | |
op2->SetUnusedValue(); | ||
} | ||
|
||
// Since we have a double negation, it's possible that gtNext | ||
// is op1 or user. If it is op1, then it's also possible the | ||
// subsequent gtNext is user. We need to make sure to skip both | ||
// in such a scenario since we're removing them. | ||
|
||
if (nextNode == op1) | ||
{ | ||
nextNode = nextNode->gtNext; | ||
} | ||
|
||
if (nextNode == user) | ||
{ | ||
nextNode = nextNode->gtNext; | ||
} | ||
Comment on lines
+1573
to
+1586
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This isn't my favorite fix, but given where we are in .NET 9 it's probably the safest one. The That is, rather than saying "I am a Such handling would avoid issues like this and also allow us to more easily take into account whether the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I notably wasn't able to get a simplified repro for this either, even running through the Antigen trimmer the smallest repro it found was 2100 lines of code. Morph and other phases normally recognize/handle the double NOT much earlier and so its not typically found in practice. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think I can understand the logic and the reason why you have to skip |
||
|
||
BlockRange().Remove(op3); | ||
BlockRange().Remove(op1); | ||
BlockRange().Remove(user); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
|
||
using System.Runtime.CompilerServices; | ||
using System.Runtime.Intrinsics; | ||
using Xunit; | ||
|
||
#nullable disable | ||
|
||
public class Runtime_105255_A | ||
{ | ||
private static Vector512<uint> s_v512_uint_62 = Vector512<uint>.Zero; | ||
|
||
public void Method0() | ||
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build coreclr Common Pri0 Test Build AnyOS AnyCPU checked)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build linux-x64 Release AllSubsets_Mono_LLVMAot_RuntimeTests llvmaot)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build linux-arm64 Release AllSubsets_Mono_Minijit_RuntimeTests minijit)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build osx-x64 Release AllSubsets_Mono_Minijit_RuntimeTests minijit)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build osx-x64 Release AllSubsets_Mono_Interpreter_RuntimeTests monointerpreter)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtime (Build browser-wasm linux Release AllSubsets_Mono_RuntimeTests monointerpreter)src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtimesrc/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
Check failure on line 14 in src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs Azure Pipelines / runtimesrc/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs#L14
|
||
{ | ||
s_v512_uint_62 = Vector512.LessThan<uint>(s_v512_uint_62, Vector512<uint>.Zero); | ||
try | ||
{ | ||
} | ||
finally | ||
{ | ||
for (int i = 0; i < 1; i++) ; | ||
} | ||
} | ||
|
||
[Fact] | ||
public static void TestEntryPoint() => new Runtime_105255_A().Method0(); | ||
|
||
/* | ||
Assert failure(PID 5828 [0x000016c4], Thread: 6044 [0x179c]): Assertion failed '((tree->gtDebugFlags & GTF_DEBUG_NODE_MORPHED) == 0) && "ERROR: Already morphed this node!"' in 'TestClass:Method0():this' during 'Morph - Global' (IL size 22846; hash 0x46e9aa75; Tier0-FullOpts) | ||
File: D:\a\_work\1\s\src\coreclr\jit\morph.cpp:12227 | ||
Image: C:\h\w\A715090A\p\CoreRoot\corerun.exe | ||
|
||
Assertion failed '((tree->gtDebugFlags & GTF_DEBUG_NODE_MORPHED) == 0) && "ERROR: Already morphed this node!"' during 'Morph - Global' | ||
*/ | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<Optimize>True</Optimize> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Compile Include="$(MSBuildProjectName).cs" /> | ||
</ItemGroup> | ||
</Project> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The other
INDEBUG(vectorNode->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED);
are properly underif (fgGlobalMorph)
alreadyThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
generally, it's enough to call
fgMorphTreeDone(vectorNode)
in thesegtFoldExpr*
apis - it will take care aboutfgGlobalMorph
and theGTF_DEBUG_NODE_MORPHED
flag (it also clears local assertionprop info, but that is important only if your function is called from morph and on an existing tree).