From 8c1abf2ffaaa74b0cff6a7933ddec34f676e0f69 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 18 May 2023 08:33:29 -0700 Subject: [PATCH 1/4] Ensure that the shuffle zero mask copies all bits --- src/coreclr/jit/gentree.cpp | 8 ++-- .../JitBlue/GitHub_85129/GitHub_85129.cs | 47 +++++++++++++++++++ .../JitBlue/GitHub_85129/GitHub_85129.csproj | 9 ++++ 3 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs create mode 100644 src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 1f9015cf8760e4..dbe9fdbb57737e 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -21830,13 +21830,11 @@ GenTree* Compiler::gtNewSimdShuffleNode(var_types type, if (needsZero) { - assert(!compIsaSupportedDebugOnly(InstructionSet_SSSE3)); + assert((simdSize == 32) || !compIsaSupportedDebugOnly(InstructionSet_SSSE3)); op2 = gtNewVconNode(type, simdBaseJitType); - op2->AsVecCon()->gtSimd16Val = mskCns.v128[0]; - - GenTree* zero = gtNewZeroConNode(type, simdBaseJitType); - retNode = gtNewSimdCndSelNode(type, op2, retNode, zero, simdBaseJitType, simdSize, isSimdAsHWIntrinsic); + op2->AsVecCon()->gtSimd32Val = mskCns; + retNode = gtNewSimdBinOpNode(GT_AND, type, op2, retNode, simdBaseJitType, simdSize, isSimdAsHWIntrinsic); } return retNode; diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs new file mode 100644 index 00000000000000..042df982dfb083 --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using Xunit; + +public class Program +{ + [Fact] + public static int TestEntryPoint() + { + + Vector256 v256Shuffle = Vector256.Create(100, 101, 102, 103, 104, 105, 106, 107); + Vector256 v256ShuffleExpectedResult = Vector256.Create(107, 105, 0, 101, 106, 104, 0, 100); + Vector256 v256ShuffleActualResult = Vector256Shuffle(v256Shuffle); + if(v256ShuffleExpectedResult != v256ShuffleActualResult) + { + return 1; + } + + Vector512 v512Shuffle = Vector512.Create(100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115); + Vector512 v512ShuffleExpectedResult = Vector512.Create(115, 113, 111, 0, 107, 105, 103, 101, 114, 112, 110, 108, 0, 104, 102, 100); + Vector512 v512ShuffleActualResult = Vector512Shuffle(v512Shuffle); + if (v512ShuffleExpectedResult != v512ShuffleActualResult) + { + return 1; + } + return 100; + } + + + [MethodImpl(MethodImplOptions.NoInlining)] + public static Vector256 Vector256Shuffle(Vector256 v1) + { + return Vector256.Shuffle(v1, Vector256.Create(7, 5, 132, 1, 6, 4, -3, 0)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static Vector512 Vector512Shuffle(Vector512 v1) + { + return Vector512.Shuffle(v1, Vector512.Create(15, 13, 11, 99, 7, 5, 3, 1, 14, 12, 10, 8, -11, 4, 2, 0)); + } +} diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj new file mode 100644 index 00000000000000..76c6418f335b17 --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj @@ -0,0 +1,9 @@ + + + None + True + + + + + From 67054bbdf7ae3f8dca3584c350f270a4bc125239 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 18 May 2023 14:06:24 -0700 Subject: [PATCH 2/4] Ensure we don't try to validate Vector512 on .NET 7 as it is a .NET 8 API --- .../JitBlue/GitHub_85129/GitHub_85129.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs index 042df982dfb083..eb388009d80fc0 100644 --- a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs @@ -13,7 +13,6 @@ public class Program [Fact] public static int TestEntryPoint() { - Vector256 v256Shuffle = Vector256.Create(100, 101, 102, 103, 104, 105, 106, 107); Vector256 v256ShuffleExpectedResult = Vector256.Create(107, 105, 0, 101, 106, 104, 0, 100); Vector256 v256ShuffleActualResult = Vector256Shuffle(v256Shuffle); @@ -22,13 +21,6 @@ public static int TestEntryPoint() return 1; } - Vector512 v512Shuffle = Vector512.Create(100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115); - Vector512 v512ShuffleExpectedResult = Vector512.Create(115, 113, 111, 0, 107, 105, 103, 101, 114, 112, 110, 108, 0, 104, 102, 100); - Vector512 v512ShuffleActualResult = Vector512Shuffle(v512Shuffle); - if (v512ShuffleExpectedResult != v512ShuffleActualResult) - { - return 1; - } return 100; } @@ -38,10 +30,3 @@ public static Vector256 Vector256Shuffle(Vector256 v1) { return Vector256.Shuffle(v1, Vector256.Create(7, 5, 132, 1, 6, 4, -3, 0)); } - - [MethodImpl(MethodImplOptions.NoInlining)] - public static Vector512 Vector512Shuffle(Vector512 v1) - { - return Vector512.Shuffle(v1, Vector512.Create(15, 13, 11, 99, 7, 5, 3, 1, 14, 12, 10, 8, -11, 4, 2, 0)); - } -} From 9fbb92ddcbf42ab918ecf6625babf09d38968161 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 18 May 2023 18:23:00 -0700 Subject: [PATCH 3/4] Don't remove too many braces from the test --- src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs index eb388009d80fc0..f3d3472fc45210 100644 --- a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs @@ -30,3 +30,4 @@ public static Vector256 Vector256Shuffle(Vector256 v1) { return Vector256.Shuffle(v1, Vector256.Create(7, 5, 132, 1, 6, 4, -3, 0)); } +} From 49568dc75a1c2a3540add6d59e4960258ff88694 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Fri, 19 May 2023 09:43:14 -0700 Subject: [PATCH 4/4] Don't use the xunit based test approach that was introduced in the .NET 8 branch --- .../JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs | 5 ++--- .../JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj | 6 ++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs index f3d3472fc45210..07607dfaf56011 100644 --- a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.cs @@ -8,10 +8,9 @@ using System.Runtime.Intrinsics; using Xunit; -public class Program +public class Program_85129 { - [Fact] - public static int TestEntryPoint() + public static int Main() { Vector256 v256Shuffle = Vector256.Create(100, 101, 102, 103, 104, 105, 106, 107); Vector256 v256ShuffleExpectedResult = Vector256.Create(107, 105, 0, 101, 106, 104, 0, 100); diff --git a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj index 76c6418f335b17..ebb70d021ed152 100644 --- a/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj +++ b/src/tests/JIT/Regression/JitBlue/GitHub_85129/GitHub_85129.csproj @@ -1,7 +1,9 @@  - None - True + Exe + + + PdbOnly