From 8f70860b23845e7b6a2fc31c1edf699d3ee2935d Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Wed, 26 Jul 2023 22:03:12 -0700 Subject: [PATCH] Ensure that `EqualsAny(x & y, Zero)` uses the right `GenCondition` (#89544) * Adding more tests covering specialzied vector comparisons against zero * Ensure that `EqualsAny(x & y, Zero)` uses the right `GenCondition` --- src/coreclr/jit/lowerxarch.cpp | 1 + .../General/HwiOp/CompareVectorWithZero.cs | 522 ++++++++++++++++++--- .../General/HwiOp/CompareVectorWithZero_r.csproj | 9 + ...Zero.csproj => CompareVectorWithZero_ro.csproj} | 3 +- 4 files changed, 480 insertions(+), 55 deletions(-) create mode 100644 src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_r.csproj rename src/tests/JIT/HardwareIntrinsics/General/HwiOp/{CompareVectorWithZero.csproj => CompareVectorWithZero_ro.csproj} (61%) diff --git a/src/coreclr/jit/lowerxarch.cpp b/src/coreclr/jit/lowerxarch.cpp index 08879e7..77f0db1 100644 --- a/src/coreclr/jit/lowerxarch.cpp +++ b/src/coreclr/jit/lowerxarch.cpp @@ -2119,6 +2119,7 @@ GenTree* Lowering::LowerHWIntrinsicCmpOp(GenTreeHWIntrinsic* node, genTreeOps cm if (cmpOp == GT_EQ) { testIntrinsicId = NI_AVX512F_PTESTNM; + cmpCnd = GenCondition::NE; } node->Op(1) = op1Intrinsic->Op(1); diff --git a/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.cs b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.cs index e6d34b3..c167bec 100644 --- a/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.cs +++ b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.cs @@ -10,52 +10,326 @@ public class CompareVectorWithZero { [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] [Fact] - public static void AllTests() + public static void TestVector64Equality() { - Test(Vector128.Create(0)); - Test(Vector128.Create(0.0f)); - Test(Vector128.Create(-0.0f)); - Test(Vector128.Create(0.0)); - Test(Vector128.Create(-0.0)); - - TestReversed(Vector128.Create(0)); - TestReversed(Vector128.Create(0.0f)); - TestReversed(Vector128.Create(-0.0f)); - TestReversed(Vector128.Create(0.0)); - TestReversed(Vector128.Create(-0.0)); - - Test(Vector128.Create(-10)); - Test(Vector128.Create(10)); - Test(Vector128.Create((sbyte)-10)); - Test(Vector128.Create((ushort)10)); - Test(Vector64.Create(0)); - Test(Vector64.Create(0.0f)); - Test(Vector64.Create(-0.0f)); - Test(Vector64.Create(0.0)); - Test(Vector64.Create(-0.0)); - Test(Vector64.Create(-10)); - Test(Vector64.Create(10)); - Test(Vector64.Create((sbyte)-10)); - Test(Vector64.Create((ushort)10)); - Test(Vector128.Create(0, 0, 0, 0, 0, 0, 0, 1)); - Test(Vector128.Create(0, 0, 0, 0, 0, 0, 0, -1)); - Test(Vector64.Create(0, 0, 0, 0, 0, 0, 0, 1)); - Test(Vector64.Create(0, 0, 0, 0, 0, 0, 0, -1)); - - Test(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); - Test(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); - Test(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); - Test(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); - - Test(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); - Test(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); - Test(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); - Test(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); - - TestReversed(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); - TestReversed(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); - TestReversed(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); - TestReversed(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); + TestEquality(Vector64.Create(0)); + TestEquality(Vector64.Create(0.0f)); + TestEquality(Vector64.Create(-0.0f)); + TestEquality(Vector64.Create(0.0)); + TestEquality(Vector64.Create(-0.0)); + + TestEqualityUsingReversedInputs(Vector64.Create(0)); + TestEqualityUsingReversedInputs(Vector64.Create(0.0f)); + TestEqualityUsingReversedInputs(Vector64.Create(-0.0f)); + TestEqualityUsingReversedInputs(Vector64.Create(0.0)); + TestEqualityUsingReversedInputs(Vector64.Create(-0.0)); + + TestEquality(Vector64.Create(-10)); + TestEquality(Vector64.Create(10)); + TestEquality(Vector64.Create((sbyte)-10)); + TestEquality(Vector64.Create((ushort)10)); + TestEquality(Vector64.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestEquality(Vector64.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestEqualityUsingAnd(Vector64.Create(0), Vector64.Create(0)); + TestEqualityUsingAnd(Vector64.Create(0.0f), Vector64.Create(0.0f)); + TestEqualityUsingAnd(Vector64.Create(-0.0f), Vector64.Create(-0.0f)); + TestEqualityUsingAnd(Vector64.Create(0.0), Vector64.Create(0.0)); + TestEqualityUsingAnd(Vector64.Create(-0.0), Vector64.Create(-0.0)); + + TestEqualityUsingAndNot(Vector64.Create(0), Vector64.Create(0)); + TestEqualityUsingAndNot(Vector64.Create(0.0f), Vector64.Create(0.0f)); + TestEqualityUsingAndNot(Vector64.Create(-0.0f), Vector64.Create(-0.0f)); + TestEqualityUsingAndNot(Vector64.Create(0.0), Vector64.Create(0.0)); + TestEqualityUsingAndNot(Vector64.Create(-0.0), Vector64.Create(-0.0)); + + TestEquality(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); + TestEquality(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); + + TestEquality(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestEquality(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); + + TestEqualityUsingReversedInputs(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestEqualityUsingReversedInputs(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector128Equality() + { + TestEquality(Vector128.Create(0)); + TestEquality(Vector128.Create(0.0f)); + TestEquality(Vector128.Create(-0.0f)); + TestEquality(Vector128.Create(0.0)); + TestEquality(Vector128.Create(-0.0)); + + TestEqualityUsingReversedInputs(Vector128.Create(0)); + TestEqualityUsingReversedInputs(Vector128.Create(0.0f)); + TestEqualityUsingReversedInputs(Vector128.Create(-0.0f)); + TestEqualityUsingReversedInputs(Vector128.Create(0.0)); + TestEqualityUsingReversedInputs(Vector128.Create(-0.0)); + + TestEquality(Vector128.Create(-10)); + TestEquality(Vector128.Create(10)); + TestEquality(Vector128.Create((sbyte)-10)); + TestEquality(Vector128.Create((ushort)10)); + TestEquality(Vector128.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestEquality(Vector128.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestEqualityUsingAnd(Vector128.Create(0), Vector128.Create(0)); + TestEqualityUsingAnd(Vector128.Create(0.0f), Vector128.Create(0.0f)); + TestEqualityUsingAnd(Vector128.Create(-0.0f), Vector128.Create(-0.0f)); + TestEqualityUsingAnd(Vector128.Create(0.0), Vector128.Create(0.0)); + TestEqualityUsingAnd(Vector128.Create(-0.0), Vector128.Create(-0.0)); + + TestEqualityUsingAndNot(Vector128.Create(0), Vector128.Create(0)); + TestEqualityUsingAndNot(Vector128.Create(0.0f), Vector128.Create(0.0f)); + TestEqualityUsingAndNot(Vector128.Create(-0.0f), Vector128.Create(-0.0f)); + TestEqualityUsingAndNot(Vector128.Create(0.0), Vector128.Create(0.0)); + TestEqualityUsingAndNot(Vector128.Create(-0.0), Vector128.Create(-0.0)); + + TestEquality(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); + TestEquality(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); + + TestEquality(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestEquality(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); + + TestEqualityUsingReversedInputs(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestEqualityUsingReversedInputs(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector256Equality() + { + TestEquality(Vector256.Create(0)); + TestEquality(Vector256.Create(0.0f)); + TestEquality(Vector256.Create(-0.0f)); + TestEquality(Vector256.Create(0.0)); + TestEquality(Vector256.Create(-0.0)); + + TestEqualityUsingReversedInputs(Vector256.Create(0)); + TestEqualityUsingReversedInputs(Vector256.Create(0.0f)); + TestEqualityUsingReversedInputs(Vector256.Create(-0.0f)); + TestEqualityUsingReversedInputs(Vector256.Create(0.0)); + TestEqualityUsingReversedInputs(Vector256.Create(-0.0)); + + TestEquality(Vector256.Create(-10)); + TestEquality(Vector256.Create(10)); + TestEquality(Vector256.Create((sbyte)-10)); + TestEquality(Vector256.Create((ushort)10)); + TestEquality(Vector256.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestEquality(Vector256.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestEqualityUsingAnd(Vector256.Create(0), Vector256.Create(0)); + TestEqualityUsingAnd(Vector256.Create(0.0f), Vector256.Create(0.0f)); + TestEqualityUsingAnd(Vector256.Create(-0.0f), Vector256.Create(-0.0f)); + TestEqualityUsingAnd(Vector256.Create(0.0), Vector256.Create(0.0)); + TestEqualityUsingAnd(Vector256.Create(-0.0), Vector256.Create(-0.0)); + + TestEqualityUsingAndNot(Vector256.Create(0), Vector256.Create(0)); + TestEqualityUsingAndNot(Vector256.Create(0.0f), Vector256.Create(0.0f)); + TestEqualityUsingAndNot(Vector256.Create(-0.0f), Vector256.Create(-0.0f)); + TestEqualityUsingAndNot(Vector256.Create(0.0), Vector256.Create(0.0)); + TestEqualityUsingAndNot(Vector256.Create(-0.0), Vector256.Create(-0.0)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector512Equality() + { + TestEquality(Vector512.Create(0)); + TestEquality(Vector512.Create(0.0f)); + TestEquality(Vector512.Create(-0.0f)); + TestEquality(Vector512.Create(0.0)); + TestEquality(Vector512.Create(-0.0)); + + TestEqualityUsingReversedInputs(Vector512.Create(0)); + TestEqualityUsingReversedInputs(Vector512.Create(0.0f)); + TestEqualityUsingReversedInputs(Vector512.Create(-0.0f)); + TestEqualityUsingReversedInputs(Vector512.Create(0.0)); + TestEqualityUsingReversedInputs(Vector512.Create(-0.0)); + + TestEquality(Vector512.Create(-10)); + TestEquality(Vector512.Create(10)); + TestEquality(Vector512.Create((sbyte)-10)); + TestEquality(Vector512.Create((ushort)10)); + TestEquality(Vector512.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestEquality(Vector512.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestEqualityUsingAnd(Vector512.Create(0), Vector512.Create(0)); + TestEqualityUsingAnd(Vector512.Create(0.0f), Vector512.Create(0.0f)); + TestEqualityUsingAnd(Vector512.Create(-0.0f), Vector512.Create(-0.0f)); + TestEqualityUsingAnd(Vector512.Create(0.0), Vector512.Create(0.0)); + TestEqualityUsingAnd(Vector512.Create(-0.0), Vector512.Create(-0.0)); + + TestEqualityUsingAndNot(Vector512.Create(0), Vector512.Create(0)); + TestEqualityUsingAndNot(Vector512.Create(0.0f), Vector512.Create(0.0f)); + TestEqualityUsingAndNot(Vector512.Create(-0.0f), Vector512.Create(-0.0f)); + TestEqualityUsingAndNot(Vector512.Create(0.0), Vector512.Create(0.0)); + TestEqualityUsingAndNot(Vector512.Create(-0.0), Vector512.Create(-0.0)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector64Inequality() + { + TestInequality(Vector64.Create(0)); + TestInequality(Vector64.Create(0.0f)); + TestInequality(Vector64.Create(-0.0f)); + TestInequality(Vector64.Create(0.0)); + TestInequality(Vector64.Create(-0.0)); + + TestInequalityUsingReversedInputs(Vector64.Create(0)); + TestInequalityUsingReversedInputs(Vector64.Create(0.0f)); + TestInequalityUsingReversedInputs(Vector64.Create(-0.0f)); + TestInequalityUsingReversedInputs(Vector64.Create(0.0)); + TestInequalityUsingReversedInputs(Vector64.Create(-0.0)); + + TestInequality(Vector64.Create(-10)); + TestInequality(Vector64.Create(10)); + TestInequality(Vector64.Create((sbyte)-10)); + TestInequality(Vector64.Create((ushort)10)); + TestInequality(Vector64.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestInequality(Vector64.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestInequalityUsingAnd(Vector64.Create(0), Vector64.Create(0)); + TestInequalityUsingAnd(Vector64.Create(0.0f), Vector64.Create(0.0f)); + TestInequalityUsingAnd(Vector64.Create(-0.0f), Vector64.Create(-0.0f)); + TestInequalityUsingAnd(Vector64.Create(0.0), Vector64.Create(0.0)); + TestInequalityUsingAnd(Vector64.Create(-0.0), Vector64.Create(-0.0)); + + TestInequalityUsingAndNot(Vector64.Create(0), Vector64.Create(0)); + TestInequalityUsingAndNot(Vector64.Create(0.0f), Vector64.Create(0.0f)); + TestInequalityUsingAndNot(Vector64.Create(-0.0f), Vector64.Create(-0.0f)); + TestInequalityUsingAndNot(Vector64.Create(0.0), Vector64.Create(0.0)); + TestInequalityUsingAndNot(Vector64.Create(-0.0), Vector64.Create(-0.0)); + + TestInequality(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); + TestInequality(Vector64.Create(0, 0, 0, 0, 0, 0, -1, 0)); + + TestInequality(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestInequality(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); + + TestInequalityUsingReversedInputs(Vector64.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestInequalityUsingReversedInputs(Vector64.Create(0, 0, 0, -1, 0, 0, 0, -1)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector128Inequality() + { + TestInequality(Vector128.Create(0)); + TestInequality(Vector128.Create(0.0f)); + TestInequality(Vector128.Create(-0.0f)); + TestInequality(Vector128.Create(0.0)); + TestInequality(Vector128.Create(-0.0)); + + TestInequalityUsingReversedInputs(Vector128.Create(0)); + TestInequalityUsingReversedInputs(Vector128.Create(0.0f)); + TestInequalityUsingReversedInputs(Vector128.Create(-0.0f)); + TestInequalityUsingReversedInputs(Vector128.Create(0.0)); + TestInequalityUsingReversedInputs(Vector128.Create(-0.0)); + + TestInequality(Vector128.Create(-10)); + TestInequality(Vector128.Create(10)); + TestInequality(Vector128.Create((sbyte)-10)); + TestInequality(Vector128.Create((ushort)10)); + TestInequality(Vector128.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestInequality(Vector128.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestInequalityUsingAnd(Vector128.Create(0), Vector128.Create(0)); + TestInequalityUsingAnd(Vector128.Create(0.0f), Vector128.Create(0.0f)); + TestInequalityUsingAnd(Vector128.Create(-0.0f), Vector128.Create(-0.0f)); + TestInequalityUsingAnd(Vector128.Create(0.0), Vector128.Create(0.0)); + TestInequalityUsingAnd(Vector128.Create(-0.0), Vector128.Create(-0.0)); + + TestInequalityUsingAndNot(Vector128.Create(0), Vector128.Create(0)); + TestInequalityUsingAndNot(Vector128.Create(0.0f), Vector128.Create(0.0f)); + TestInequalityUsingAndNot(Vector128.Create(-0.0f), Vector128.Create(-0.0f)); + TestInequalityUsingAndNot(Vector128.Create(0.0), Vector128.Create(0.0)); + TestInequalityUsingAndNot(Vector128.Create(-0.0), Vector128.Create(-0.0)); + + TestInequality(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); + TestInequality(Vector128.Create(0, 0, 0, 0, 0, 0, 1, 0)); + + TestInequality(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestInequality(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); + + TestInequalityUsingReversedInputs(Vector128.Create(0, 0, 0, 1, 0, 0, 0, 1)); + TestInequalityUsingReversedInputs(Vector128.Create(0, 0, 0, -1, 0, 0, 0, -1)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector256Inequality() + { + TestInequality(Vector256.Create(0)); + TestInequality(Vector256.Create(0.0f)); + TestInequality(Vector256.Create(-0.0f)); + TestInequality(Vector256.Create(0.0)); + TestInequality(Vector256.Create(-0.0)); + + TestInequalityUsingReversedInputs(Vector256.Create(0)); + TestInequalityUsingReversedInputs(Vector256.Create(0.0f)); + TestInequalityUsingReversedInputs(Vector256.Create(-0.0f)); + TestInequalityUsingReversedInputs(Vector256.Create(0.0)); + TestInequalityUsingReversedInputs(Vector256.Create(-0.0)); + + TestInequality(Vector256.Create(-10)); + TestInequality(Vector256.Create(10)); + TestInequality(Vector256.Create((sbyte)-10)); + TestInequality(Vector256.Create((ushort)10)); + TestInequality(Vector256.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestInequality(Vector256.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestInequalityUsingAnd(Vector256.Create(0), Vector256.Create(0)); + TestInequalityUsingAnd(Vector256.Create(0.0f), Vector256.Create(0.0f)); + TestInequalityUsingAnd(Vector256.Create(-0.0f), Vector256.Create(-0.0f)); + TestInequalityUsingAnd(Vector256.Create(0.0), Vector256.Create(0.0)); + TestInequalityUsingAnd(Vector256.Create(-0.0), Vector256.Create(-0.0)); + + TestInequalityUsingAndNot(Vector256.Create(0), Vector256.Create(0)); + TestInequalityUsingAndNot(Vector256.Create(0.0f), Vector256.Create(0.0f)); + TestInequalityUsingAndNot(Vector256.Create(-0.0f), Vector256.Create(-0.0f)); + TestInequalityUsingAndNot(Vector256.Create(0.0), Vector256.Create(0.0)); + TestInequalityUsingAndNot(Vector256.Create(-0.0), Vector256.Create(-0.0)); + } + + [ActiveIssue("https://github.com/dotnet/runtime/pull/65632#issuecomment-1046294324", TestRuntimes.Mono)] + [Fact] + public static void TestVector512Inequality() + { + TestInequality(Vector512.Create(0)); + TestInequality(Vector512.Create(0.0f)); + TestInequality(Vector512.Create(-0.0f)); + TestInequality(Vector512.Create(0.0)); + TestInequality(Vector512.Create(-0.0)); + + TestInequalityUsingReversedInputs(Vector512.Create(0)); + TestInequalityUsingReversedInputs(Vector512.Create(0.0f)); + TestInequalityUsingReversedInputs(Vector512.Create(-0.0f)); + TestInequalityUsingReversedInputs(Vector512.Create(0.0)); + TestInequalityUsingReversedInputs(Vector512.Create(-0.0)); + + TestInequality(Vector512.Create(-10)); + TestInequality(Vector512.Create(10)); + TestInequality(Vector512.Create((sbyte)-10)); + TestInequality(Vector512.Create((ushort)10)); + TestInequality(Vector512.Create(0, 0, 0, 0, 0, 0, 0, 1)); + TestInequality(Vector512.Create(0, 0, 0, 0, 0, 0, 0, -1)); + + TestInequalityUsingAnd(Vector512.Create(0), Vector512.Create(0)); + TestInequalityUsingAnd(Vector512.Create(0.0f), Vector512.Create(0.0f)); + TestInequalityUsingAnd(Vector512.Create(-0.0f), Vector512.Create(-0.0f)); + TestInequalityUsingAnd(Vector512.Create(0.0), Vector512.Create(0.0)); + TestInequalityUsingAnd(Vector512.Create(-0.0), Vector512.Create(-0.0)); + + TestInequalityUsingAndNot(Vector512.Create(0), Vector512.Create(0)); + TestInequalityUsingAndNot(Vector512.Create(0.0f), Vector512.Create(0.0f)); + TestInequalityUsingAndNot(Vector512.Create(-0.0f), Vector512.Create(-0.0f)); + TestInequalityUsingAndNot(Vector512.Create(0.0), Vector512.Create(0.0)); + TestInequalityUsingAndNot(Vector512.Create(-0.0), Vector512.Create(-0.0)); } [MethodImpl(MethodImplOptions.NoInlining)] @@ -69,22 +343,162 @@ public class CompareVectorWithZero } [MethodImpl(MethodImplOptions.NoInlining)] - static void Test(Vector128 v) where T : unmanaged => - AssertTrue((v == Vector128.Zero) == + static void TestEquality(Vector64 v) where T : unmanaged => + AssertTrue((v == Vector64.Zero) == + (v == Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEquality(Vector128 v) where T : unmanaged => + AssertTrue((v == Vector128.Zero) == (v == Vector128.Create(ToVar(default(T))))); [MethodImpl(MethodImplOptions.NoInlining)] - static void Test(Vector64 v) where T : unmanaged => - AssertTrue((v == Vector64.Zero) == + static void TestEquality(Vector256 v) where T : unmanaged => + AssertTrue((v == Vector256.Zero) == + (v == Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEquality(Vector512 v) where T : unmanaged => + AssertTrue((v == Vector512.Zero) == + (v == Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAnd(Vector64 v1, Vector64 v2) where T : unmanaged => + AssertTrue(((v1 & v2) == Vector64.Zero) == + ((v1 & v2) == Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAnd(Vector128 v1,Vector128 v2) where T : unmanaged => + AssertTrue(((v1 & v2) == Vector128.Zero) == + ((v1 & v2) == Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAnd(Vector256 v1, Vector256 v2) where T : unmanaged => + AssertTrue(((v1 & v2) == Vector256.Zero) == + ((v1 & v2) == Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAnd(Vector512 v1, Vector512 v2) where T : unmanaged => + AssertTrue(((v1 & v2) == Vector512.Zero) == + ((v1 & v2) == Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAndNot(Vector64 v1, Vector64 v2) where T : unmanaged => + AssertTrue((Vector64.AndNot(v1, v2) == Vector64.Zero) == + (Vector64.AndNot(v1, v2) == Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAndNot(Vector128 v1,Vector128 v2) where T : unmanaged => + AssertTrue((Vector128.AndNot(v1, v2) == Vector128.Zero) == + (Vector128.AndNot(v1, v2) == Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAndNot(Vector256 v1, Vector256 v2) where T : unmanaged => + AssertTrue((Vector256.AndNot(v1, v2) == Vector256.Zero) == + (Vector256.AndNot(v1, v2) == Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingAndNot(Vector512 v1, Vector512 v2) where T : unmanaged => + AssertTrue((Vector512.AndNot(v1, v2) == Vector512.Zero) == + (Vector512.AndNot(v1, v2) == Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingReversedInputs(Vector64 v) where T : unmanaged => + AssertTrue((Vector64.Zero == v) == (v == Vector64.Create(ToVar(default(T))))); [MethodImpl(MethodImplOptions.NoInlining)] - static void TestReversed(Vector128 v) where T : unmanaged => - AssertTrue((Vector128.Zero == v) == + static void TestEqualityUsingReversedInputs(Vector128 v) where T : unmanaged => + AssertTrue((Vector128.Zero == v) == (v == Vector128.Create(ToVar(default(T))))); [MethodImpl(MethodImplOptions.NoInlining)] - static void TestReversed(Vector64 v) where T : unmanaged => - AssertTrue((Vector64.Zero == v) == - (v == Vector64.Create(ToVar(default(T))))); + static void TestEqualityUsingReversedInputs(Vector256 v) where T : unmanaged => + AssertTrue((Vector256.Zero == v) == + (v == Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestEqualityUsingReversedInputs(Vector512 v) where T : unmanaged => + AssertTrue((Vector512.Zero == v) == + (v == Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequality(Vector64 v) where T : unmanaged => + AssertTrue((v != Vector64.Zero) == + (v != Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequality(Vector128 v) where T : unmanaged => + AssertTrue((v != Vector128.Zero) == + (v != Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequality(Vector256 v) where T : unmanaged => + AssertTrue((v != Vector256.Zero) == + (v != Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequality(Vector512 v) where T : unmanaged => + AssertTrue((v != Vector512.Zero) == + (v != Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAnd(Vector64 v1, Vector64 v2) where T : unmanaged => + AssertTrue(((v1 & v2) != Vector64.Zero) == + ((v1 & v2) != Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAnd(Vector128 v1,Vector128 v2) where T : unmanaged => + AssertTrue(((v1 & v2) != Vector128.Zero) == + ((v1 & v2) != Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAnd(Vector256 v1, Vector256 v2) where T : unmanaged => + AssertTrue(((v1 & v2) != Vector256.Zero) == + ((v1 & v2) != Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAnd(Vector512 v1, Vector512 v2) where T : unmanaged => + AssertTrue(((v1 & v2) != Vector512.Zero) == + ((v1 & v2) != Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAndNot(Vector64 v1, Vector64 v2) where T : unmanaged => + AssertTrue((Vector64.AndNot(v1, v2) != Vector64.Zero) == + (Vector64.AndNot(v1, v2) != Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAndNot(Vector128 v1,Vector128 v2) where T : unmanaged => + AssertTrue((Vector128.AndNot(v1, v2) != Vector128.Zero) == + (Vector128.AndNot(v1, v2) != Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAndNot(Vector256 v1, Vector256 v2) where T : unmanaged => + AssertTrue((Vector256.AndNot(v1, v2) != Vector256.Zero) == + (Vector256.AndNot(v1, v2) != Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingAndNot(Vector512 v1, Vector512 v2) where T : unmanaged => + AssertTrue((Vector512.AndNot(v1, v2) != Vector512.Zero) == + (Vector512.AndNot(v1, v2) != Vector512.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingReversedInputs(Vector64 v) where T : unmanaged => + AssertTrue((Vector64.Zero != v) == + (v != Vector64.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingReversedInputs(Vector128 v) where T : unmanaged => + AssertTrue((Vector128.Zero != v) == + (v != Vector128.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingReversedInputs(Vector256 v) where T : unmanaged => + AssertTrue((Vector256.Zero != v) == + (v != Vector256.Create(ToVar(default(T))))); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void TestInequalityUsingReversedInputs(Vector512 v) where T : unmanaged => + AssertTrue((Vector512.Zero != v) == + (v != Vector512.Create(ToVar(default(T))))); } diff --git a/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_r.csproj b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_r.csproj new file mode 100644 index 0000000..bf75f88 --- /dev/null +++ b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_r.csproj @@ -0,0 +1,9 @@ + + + Embedded + + + + + + diff --git a/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.csproj b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_ro.csproj similarity index 61% rename from src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.csproj rename to src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_ro.csproj index de6d5e0..35192e6 100644 --- a/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero.csproj +++ b/src/tests/JIT/HardwareIntrinsics/General/HwiOp/CompareVectorWithZero_ro.csproj @@ -1,8 +1,9 @@ + Embedded True - + -- 2.7.4