From ed9b24de310a92d099376a7b2426e1672c3cc800 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Mon, 14 Jul 2025 06:32:52 -0700 Subject: [PATCH 1/3] Fix the isEmbeddedMaskingCompatible checks --- src/coreclr/jit/gentree.cpp | 24 +++++----- .../JitBlue/Runtime_117605/Runtime_117605.cs | 45 +++++++++++++++++++ .../Runtime_117605/Runtime_117605.csproj | 8 ++++ 3 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.csproj diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 489e5d08c70808..7ef5a36a882af8 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -20740,7 +20740,7 @@ bool GenTree::isEmbeddedMaskingCompatible(Compiler* comp, unsigned tgtMaskSize, // Some intrinsics are effectively bitwise operations and so we // can freely update them to match the size of the actual mask - bool supportsMaskBaseSize4Or8 = false; + bool supportsMaskBaseSize2Or4 = false; switch (ins) { @@ -20765,13 +20765,13 @@ bool GenTree::isEmbeddedMaskingCompatible(Compiler* comp, unsigned tgtMaskSize, case INS_xorpd: case INS_xorps: { - // These intrinsics support embedded broadcast and have masking support for 4 or 8 - assert((maskBaseSize == 4) || (maskBaseSize == 8)); + // These intrinsics support embedded broadcast and have masking support for 2 or 4 + assert((maskBaseSize == 2) || (maskBaseSize == 4)); if (!comp->codeGen->IsEmbeddedBroadcastEnabled(ins, node->Op(2))) { // We cannot change the base type if we've already contained a broadcast - supportsMaskBaseSize4Or8 = true; + supportsMaskBaseSize2Or4 = true; } break; } @@ -20779,13 +20779,13 @@ bool GenTree::isEmbeddedMaskingCompatible(Compiler* comp, unsigned tgtMaskSize, case INS_vpternlogd: case INS_vpternlogq: { - // These intrinsics support embedded broadcast and have masking support for 4 or 8 - assert((maskBaseSize == 4) || (maskBaseSize == 8)); + // These intrinsics support embedded broadcast and have masking support for 2 or 4 + assert((maskBaseSize == 2) || (maskBaseSize == 4)); if (!comp->codeGen->IsEmbeddedBroadcastEnabled(ins, node->Op(3))) { // We cannot change the base type if we've already contained a broadcast - supportsMaskBaseSize4Or8 = true; + supportsMaskBaseSize2Or4 = true; } break; } @@ -20815,9 +20815,9 @@ bool GenTree::isEmbeddedMaskingCompatible(Compiler* comp, unsigned tgtMaskSize, case INS_vinserti64x2: case INS_vinserti64x4: { - // These intrinsics don't support embedded broadcast and have masking support for 4 or 8 - assert((maskBaseSize == 4) || (maskBaseSize == 8)); - supportsMaskBaseSize4Or8 = true; + // These intrinsics don't support embedded broadcast and have masking support for 2 or 4 + assert((maskBaseSize == 2) || (maskBaseSize == 4)); + supportsMaskBaseSize2Or4 = true; break; } @@ -20827,9 +20827,9 @@ bool GenTree::isEmbeddedMaskingCompatible(Compiler* comp, unsigned tgtMaskSize, } } - if (supportsMaskBaseSize4Or8) + if (supportsMaskBaseSize2Or4) { - if (tgtMaskBaseSize == 8) + if (tgtMaskBaseSize == 2) { if (varTypeIsFloating(simdBaseType)) { diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs new file mode 100644 index 00000000000000..0964a113d3520c --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs @@ -0,0 +1,45 @@ +// Generated by Fuzzlyn v3.3 on 2025-07-14 11:26:52 +// Run on X64 Windows +// Seed: 5654087083843205658-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86avx512bw,x86avx512bwvl,x86avx512cd,x86avx512cdvl,x86avx512dq,x86avx512dqvl,x86avx512f,x86avx512fvl,x86avx512fx64,x86bmi1,x86bmi1x64,x86bmi2,x86bmi2x64,x86fma,x86lzcnt,x86lzcntx64,x86pclmulqdq,x86popcnt,x86popcntx64,x86sse,x86ssex64,x86sse2,x86sse2x64,x86sse3,x86sse41,x86sse41x64,x86sse42,x86sse42x64,x86ssse3,x86x86base +// Reduced from 33.4 KiB to 0.9 KiB in 00:01:30 +// Hits JIT assert for Release: +// Assertion failed '(maskBaseSize == 4) || (maskBaseSize == 8)' in 'Program:M0()' during 'Rationalize IR' (IL size 87; hash 0xaf50ff37; FullOpts) +// +// File: D:\a\_work\1\s\src\coreclr\jit\gentree.cpp Line: 20819 +// +using System.Numerics; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; + +public class C0 +{ + public short M3(ref Vector[] arg0, Vector256 arg1) + { + var vr5 = Vector128.Create(0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); + return (short)Sse2.MoveMask(vr5); + } +} + +public class Program +{ + public static Vector[] s_2; + public static void Main() + { + if (Avx2.IsSupported) + { + M0(); + } + } + + public static void M0() + { + var vr3 = Vector256.Create(0, 7424648407429701945UL, 0, 0); + var vr6 = Vector256.Create(0); + var vr7 = Vector128.CreateScalar(9831122154695836571UL); + var vr4 = Avx2.InsertVector128(vr6, vr7, 0); + var vr8 = Vector256.CreateScalar(1497050855019840058UL); + var vr2 = Avx2.BlendVariable(vr3, vr4, vr8); + C0 vr9 = default(C0); + var vr1 = vr9.M3(ref s_2, vr2); + } +} diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.csproj b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.csproj new file mode 100644 index 00000000000000..de6d5e08882e86 --- /dev/null +++ b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.csproj @@ -0,0 +1,8 @@ + + + True + + + + + From 5b68a6a22648bf958c91884f472be2d3b47f3c86 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Tue, 15 Jul 2025 13:06:37 -0700 Subject: [PATCH 2/3] Ensure the regression test is setup to use Xunit --- .../JitBlue/Runtime_117605/Runtime_117605.cs | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs index 0964a113d3520c..2550b4e2afc909 100644 --- a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs +++ b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs @@ -1,3 +1,6 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + // Generated by Fuzzlyn v3.3 on 2025-07-14 11:26:52 // Run on X64 Windows // Seed: 5654087083843205658-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86avx512bw,x86avx512bwvl,x86avx512cd,x86avx512cdvl,x86avx512dq,x86avx512dqvl,x86avx512f,x86avx512fvl,x86avx512fx64,x86bmi1,x86bmi1x64,x86bmi2,x86bmi2x64,x86fma,x86lzcnt,x86lzcntx64,x86pclmulqdq,x86popcnt,x86popcntx64,x86sse,x86ssex64,x86sse2,x86sse2x64,x86sse3,x86sse41,x86sse41x64,x86sse42,x86sse42x64,x86ssse3,x86x86base @@ -7,23 +10,18 @@ // // File: D:\a\_work\1\s\src\coreclr\jit\gentree.cpp Line: 20819 // + using System.Numerics; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; +using Xunit; -public class C0 +public class Runtime_117605 { - public short M3(ref Vector[] arg0, Vector256 arg1) - { - var vr5 = Vector128.Create(0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); - return (short)Sse2.MoveMask(vr5); - } -} + static Vector[] s_2; -public class Program -{ - public static Vector[] s_2; - public static void Main() + [Fact] + public static void TestEntryPoint() { if (Avx2.IsSupported) { @@ -31,7 +29,7 @@ public static void Main() } } - public static void M0() + private static void M0() { var vr3 = Vector256.Create(0, 7424648407429701945UL, 0, 0); var vr6 = Vector256.Create(0); @@ -42,4 +40,13 @@ public static void M0() C0 vr9 = default(C0); var vr1 = vr9.M3(ref s_2, vr2); } + + class C0 + { + public short M3(ref Vector[] arg0, Vector256 arg1) + { + var vr5 = Vector128.Create(0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); + return (short)Sse2.MoveMask(vr5); + } + } } From 528412040ab51cbada4bdd6e22d0074f838442b4 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Tue, 15 Jul 2025 14:42:17 -0700 Subject: [PATCH 3/3] Ensure the fuzzlyn test can actually run, not always throw --- .../JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs index 2550b4e2afc909..9a91aaf7a759ce 100644 --- a/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs +++ b/src/tests/JIT/Regression/JitBlue/Runtime_117605/Runtime_117605.cs @@ -37,7 +37,7 @@ private static void M0() var vr4 = Avx2.InsertVector128(vr6, vr7, 0); var vr8 = Vector256.CreateScalar(1497050855019840058UL); var vr2 = Avx2.BlendVariable(vr3, vr4, vr8); - C0 vr9 = default(C0); + C0 vr9 = new C0(); var vr1 = vr9.M3(ref s_2, vr2); }