Ensure the relevant containable nodes are handled (#91334)
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Wed, 30 Aug 2023 19:48:03 +0000 (12:48 -0700)
committerGitHub <noreply@github.com>
Wed, 30 Aug 2023 19:48:03 +0000 (12:48 -0700)
Co-authored-by: Tanner Gooding <tagoo@outlook.com>
src/coreclr/jit/lowerxarch.cpp
src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.cs [new file with mode: 0644]
src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.csproj [new file with mode: 0644]

index c1b5079..0014383 100644 (file)
@@ -8135,7 +8135,16 @@ bool Lowering::IsContainableHWIntrinsicOp(GenTreeHWIntrinsic* parentNode, GenTre
         case NI_Vector128_ToScalar:
         case NI_Vector256_ToScalar:
         case NI_Vector512_ToScalar:
+        case NI_SSE2_ConvertToInt32:
+        case NI_SSE2_ConvertToUInt32:
+        case NI_SSE2_X64_ConvertToInt64:
+        case NI_SSE2_X64_ConvertToUInt64:
+        case NI_SSE2_Extract:
+        case NI_SSE41_Extract:
+        case NI_SSE41_X64_Extract:
         case NI_AVX_ExtractVector128:
+        case NI_AVX2_ConvertToInt32:
+        case NI_AVX2_ConvertToUInt32:
         case NI_AVX2_ExtractVector128:
         case NI_AVX512F_ExtractVector128:
         case NI_AVX512F_ExtractVector256:
@@ -8178,6 +8187,13 @@ bool Lowering::IsContainableHWIntrinsicOp(GenTreeHWIntrinsic* parentNode, GenTre
             return false;
         }
 
+        case NI_Vector128_get_Zero:
+        case NI_Vector256_get_Zero:
+        {
+            // These are only containable as part of Sse41.Insert
+            return false;
+        }
+
         case NI_SSE3_MoveAndDuplicate:
         case NI_AVX2_BroadcastScalarToVector128:
         case NI_AVX2_BroadcastScalarToVector256:
diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.cs b/src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.cs
new file mode 100644 (file)
index 0000000..afb26b6
--- /dev/null
@@ -0,0 +1,63 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.aa
+
+// Found by Antigen
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using System.Runtime.Intrinsics;
+using System.Runtime.Intrinsics.X86;
+using System.Numerics;
+using Xunit;
+
+public class TestClass
+{
+    public struct S1
+    {
+    }
+
+    static short s_short_8 = 5;
+    static int s_int_9 = -2;
+    long long_59 = 4;
+    uint uint_64 = 1;
+    Vector256<int> v256_int_90 = Vector256.Create(2, -5, 4, 4, 5, 0, -1, 5);
+    S1 s1_99 = new S1();
+
+    private uint Method4(out short p_short_161, S1 p_s1_162, bool p_bool_163, ref int p_int_164)
+    {
+        unchecked
+        {
+            p_short_161 = 15|4;
+            if ((long_59 *= 15>>4)!= (long_59 |= 15^4))
+            {
+            }
+            else
+            {
+                Vector128.CreateScalarUnsafe(Vector256.Sum(v256_int_90));
+            }
+            return 15|4;
+        }
+    }
+
+    private void Method0()
+    {
+        unchecked
+        {
+            uint_64 = Method4(out s_short_8, s1_99, 15<4, ref s_int_9);
+            return;
+        }
+    }
+
+    [Fact]
+    public static void TestEntryPoint()
+    {
+        new TestClass().Method0();
+    }
+}
+/*
+
+Assert failure(PID 34336 [0x00008620], Thread: 38576 [0x96b0]): Assertion failed '!childNode->isContainableHWIntrinsic()' in 'TestClass:Method4(byref,TestClass+S1,bool,byref):uint:this' during 'Lowering nodeinfo' (IL size 63; hash 0xa4e6dede; Tier0)
+    File: D:\git\runtime\src\coreclr\jit\lowerxarch.cpp Line: 8201
+    Image: D:\git\runtime\artifacts\tests\coreclr\windows.x64.Checked\tests\Core_Root\CoreRun.exe
+*/
diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.csproj b/src/tests/JIT/Regression/JitBlue/Runtime_91170/Runtime_91170.csproj
new file mode 100644 (file)
index 0000000..de6d5e0
--- /dev/null
@@ -0,0 +1,8 @@
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <Optimize>True</Optimize>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="$(MSBuildProjectName).cs" />
+  </ItemGroup>
+</Project>