Skip to content

Commit

Permalink
Resolving an antigen failure (#105260)
Browse files Browse the repository at this point in the history
* Resolving an antigen failure

* Fix method accessibility so xunit doesn't complain
  • Loading branch information
tannergooding committed Jul 25, 2024
1 parent d2425e9 commit 07e95aa
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/coreclr/jit/gentree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30524,8 +30524,11 @@ GenTree* Compiler::gtFoldExprHWIntrinsic(GenTreeHWIntrinsic* tree)
#endif // !TARGET_XARCH && !TARGET_ARM64

DEBUG_DESTROY_NODE(op, tree);
INDEBUG(vectorNode->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED);

if (fgGlobalMorph)
{
INDEBUG(vectorNode->gtDebugFlags |= GTF_DEBUG_NODE_MORPHED);
}
return vectorNode;
}
}
Expand Down
15 changes: 15 additions & 0 deletions src/coreclr/jit/lowerxarch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

BlockRange().Remove(op3);
BlockRange().Remove(op1);
BlockRange().Remove(user);
Expand Down
36 changes: 36 additions & 0 deletions src/tests/JIT/Regression/JitBlue/Runtime_105255/Runtime_105255.cs
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;

private void Method0()
{
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>

0 comments on commit 07e95aa

Please sign in to comment.