From c051cc95e7e86773e3b5890f2db961d5330d682b Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 25 Jul 2024 09:22:39 -0700 Subject: [PATCH 1/2] Ensure constant evaluation of shifts on xarch broadcast the operand to the correct size --- src/coreclr/jit/gentree.cpp | 4 ++++ .../JitBlue/Runtime_105465/Runtime_105465.cs | 23 +++++++++++++++++++ .../Runtime_105465/Runtime_105465.csproj | 8 +++++++ 3 files changed, 35 insertions(+) create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.csproj diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 8ba61fe3a1121c..9b1200d0243a00 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -30746,6 +30746,10 @@ GenTree* Compiler::gtFoldExprHWIntrinsic(GenTreeHWIntrinsic* tree) // Ensure we don't lose track the the amount is an overshift shiftAmount = -1; } + + // Ensure we broadcast to the right vector size + otherNode->gtType = retType; + otherNode->AsVecCon()->EvaluateBroadcastInPlace(simdBaseType, shiftAmount); } } diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs new file mode 100644 index 00000000000000..a1f0d034daa490 --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs @@ -0,0 +1,23 @@ +// Generated by Fuzzlyn v1.7 on 2024-07-25 11:06:17 +// Run on X64 Windows +// Seed: 1535747306914661768-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86bmi1,x86bmi1x64,x86bmi2,x86bmi2x64,x86fma,x86lzcnt,x86lzcntx64,x86pclmulqdq,x86popcnt,x86popcntx64,x86sse,x86ssex64,x86sse2,x86sse2x64,x86sse3,x86sse41,x86sse41x64,x86sse42,x86sse42x64,x86ssse3,x86x86base +// Reduced from 95.3 KiB to 0.6 KiB in 00:00:29 +// Debug: Outputs <0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0> +// Release: Outputs <0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1> +using System; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +using Xunit; + +public class Runtime_105465 +{ + [Fact] + public static void TestEntryPoint() + { + var vr2 = Vector256.Create(1); + var vr3 = Vector128.Create(1); + Vector256 vr4 = Avx2.ShiftLeftLogical(vr2, vr3); + Assert.Equal(Vector256.Zero, vr4); + } +} + diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.csproj b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.csproj new file mode 100644 index 00000000000000..de6d5e08882e86 --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.csproj @@ -0,0 +1,8 @@ + + + True + + + + + From a3f892df9a60618491d973a9b776123196ef9a15 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 25 Jul 2024 11:00:48 -0700 Subject: [PATCH 2/2] Ensure we don't try to execute AVX2 code on unsupported platforms --- .../JitBlue/Runtime_105465/Runtime_105465.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs index a1f0d034daa490..c12963036e164a 100644 --- a/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs +++ b/src/tests/JIT/Regression/JitBlue/Runtime_105465/Runtime_105465.cs @@ -14,10 +14,13 @@ public class Runtime_105465 [Fact] public static void TestEntryPoint() { - var vr2 = Vector256.Create(1); - var vr3 = Vector128.Create(1); - Vector256 vr4 = Avx2.ShiftLeftLogical(vr2, vr3); - Assert.Equal(Vector256.Zero, vr4); + if (Avx2.IsSupported) + { + var vr2 = Vector256.Create(1); + var vr3 = Vector128.Create(1); + Vector256 vr4 = Avx2.ShiftLeftLogical(vr2, vr3); + Assert.Equal(Vector256.Zero, vr4); + } } }