diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-11-05 19:32:17 +0100 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-11-05 19:47:16 +0100 |
commit | 3c28d6a3a018e9acb7af1422d6263661f69d5f94 (patch) | |
tree | dbf38ada050ca3502eacc0ae91c0a729b2a91c14 /gcc/testsuite/gdc.dg | |
parent | 3ad2167bbac8ae83b1e91305b105ab5287bdac55 (diff) | |
download | gcc-3c28d6a3a018e9acb7af1422d6263661f69d5f94.zip gcc-3c28d6a3a018e9acb7af1422d6263661f69d5f94.tar.gz gcc-3c28d6a3a018e9acb7af1422d6263661f69d5f94.tar.bz2 |
d: Add support for vector comparison operators
The front-end added semantic support to permit comparing two vector
expressions. This removes the restriction in the code generator, as
well as the intrisics that previously exposed the same operation.
gcc/d/ChangeLog:
* d-target.cc (Target::isVectorOpSupported): Remove cases for
comparison operators.
* intrinsics.cc (maybe_set_intrinsic): Remove cases for vector
comparison intrinsics.
(maybe_warn_intrinsic_mismatch): Likewise.
(expand_intrinsic_vec_cond): Remove.
(maybe_expand_intrinsic): Remove cases for vector comparison
intrinsics.
* intrinsics.def (INTRINSIC_EQUALMASK): Remove.
(INTRINSIC_NOTEQUALMASK): Remove.
(INTRINSIC_GREATERMASK): Remove.
(INTRINSIC_GREATEREQUALMASK): Remove.
libphobos/ChangeLog:
* libdruntime/gcc/simd.d (equalMask): Implement using generics.
(notEqualMask): Likewise.
(greaterMask): Likewise.
(greaterOrEqualMask): Likewise.
(notMask): Likewise.
(andAndMask): Likewise.
(orOrMask): Likewise.
gcc/testsuite/ChangeLog:
* gdc.dg/Wbuiltin_declaration_mismatch2.d: Remove comparision tests.
* gdc.dg/simd2a.d: Update comparison tests.
* gdc.dg/simd2b.d: Likewise.
* gdc.dg/simd2c.d: Likewise.
* gdc.dg/simd2d.d: Likewise.
* gdc.dg/simd2e.d: Likewise.
* gdc.dg/simd2f.d: Likewise.
* gdc.dg/simd2g.d: Likewise.
* gdc.dg/simd2h.d: Likewise.
* gdc.dg/simd2i.d: Likewise.
* gdc.dg/simd2j.d: Likewise.
Diffstat (limited to 'gcc/testsuite/gdc.dg')
-rw-r--r-- | gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d | 40 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2a.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2b.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2c.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2d.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2e.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2f.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2g.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2h.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2i.d | 12 | ||||
-rw-r--r-- | gcc/testsuite/gdc.dg/simd2j.d | 12 |
11 files changed, 60 insertions, 100 deletions
diff --git a/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d index 9e90c15..7b83fff 100644 --- a/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d +++ b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d @@ -191,41 +191,6 @@ void test_blendvector() blendvector!(byte16, byte16, byte16)(0, 0, 0); } -void test_comparison() -{ - equalMask!int(0, 0); // { dg-warning "mismatch in return type" } - equalMask!double(0, 0); // { dg-warning "mismatch in return type" } - equalMask!int4(0, 0); - equalMask!short8(0, 0); - equalMask!float4(0, 0); - equalMask!byte16(0, 0); - equalMask!fake4(f, f); // { dg-warning "mismatch in return type" } - - notEqualMask!int(0, 0); // { dg-warning "mismatch in return type" } - notEqualMask!double(0, 0); // { dg-warning "mismatch in return type" } - notEqualMask!int4(0, 0); - notEqualMask!short8(0, 0); - notEqualMask!float4(0, 0); - notEqualMask!byte16(0, 0); - notEqualMask!fake4(f, f); // { dg-warning "mismatch in return type" } - - greaterMask!int(0, 0); // { dg-warning "mismatch in return type" } - greaterMask!double(0, 0); // { dg-warning "mismatch in return type" } - greaterMask!int4(0, 0); - greaterMask!short8(0, 0); - greaterMask!float4(0, 0); - greaterMask!byte16(0, 0); - greaterMask!fake4(f, f); // { dg-warning "mismatch in return type" } - - greaterOrEqualMask!int(0, 0); // { dg-warning "mismatch in return type" } - greaterOrEqualMask!double(0, 0); // { dg-warning "mismatch in return type" } - greaterOrEqualMask!int4(0, 0); - greaterOrEqualMask!short8(0, 0); - greaterOrEqualMask!float4(0, 0); - greaterOrEqualMask!byte16(0, 0); - greaterOrEqualMask!fake4(f, f); // { dg-warning "mismatch in return type" } -} - // The following declarations of the simd intrinsics are without any guards // to verify `d/intrinsics.cc` is doing checks to prevent invalid lowerings. V loadUnaligned(V)(const V*); @@ -243,8 +208,3 @@ __vector(E!V1[M.length]) shufflevector(V1, V2, M...)(V1, V2, M) if (isV!V1 && is V convertvector(V, T)(T); V0 blendvector(V0, V1, M)(V0, V1, M); - -V equalMask(V)(V, V); -V notEqualMask(V)(V, V); -V greaterMask(V)(V, V); -V greaterOrEqualMask(V)(V, V); diff --git a/gcc/testsuite/gdc.dg/simd2a.d b/gcc/testsuite/gdc.dg/simd2a.d index 0fb391c..d64f704 100644 --- a/gcc/testsuite/gdc.dg/simd2a.d +++ b/gcc/testsuite/gdc.dg/simd2a.d @@ -18,12 +18,12 @@ void test2a() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2b.d b/gcc/testsuite/gdc.dg/simd2b.d index 41a4eb3..71abd78 100644 --- a/gcc/testsuite/gdc.dg/simd2b.d +++ b/gcc/testsuite/gdc.dg/simd2b.d @@ -18,12 +18,12 @@ void test2b() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2c.d b/gcc/testsuite/gdc.dg/simd2c.d index a995709..4806b48 100644 --- a/gcc/testsuite/gdc.dg/simd2c.d +++ b/gcc/testsuite/gdc.dg/simd2c.d @@ -18,12 +18,12 @@ void test2c() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2d.d b/gcc/testsuite/gdc.dg/simd2d.d index d578734..ce447e1 100644 --- a/gcc/testsuite/gdc.dg/simd2d.d +++ b/gcc/testsuite/gdc.dg/simd2d.d @@ -18,12 +18,12 @@ void test2d() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2e.d b/gcc/testsuite/gdc.dg/simd2e.d index d33574a..464d1a5 100644 --- a/gcc/testsuite/gdc.dg/simd2e.d +++ b/gcc/testsuite/gdc.dg/simd2e.d @@ -18,12 +18,12 @@ void test2e() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2f.d b/gcc/testsuite/gdc.dg/simd2f.d index 5845249..d7e67fc 100644 --- a/gcc/testsuite/gdc.dg/simd2f.d +++ b/gcc/testsuite/gdc.dg/simd2f.d @@ -18,12 +18,12 @@ void test2f() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2g.d b/gcc/testsuite/gdc.dg/simd2g.d index ce438f2..3d15869 100644 --- a/gcc/testsuite/gdc.dg/simd2g.d +++ b/gcc/testsuite/gdc.dg/simd2g.d @@ -18,12 +18,12 @@ void test2g() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2h.d b/gcc/testsuite/gdc.dg/simd2h.d index c631c76..849b6ad 100644 --- a/gcc/testsuite/gdc.dg/simd2h.d +++ b/gcc/testsuite/gdc.dg/simd2h.d @@ -18,12 +18,12 @@ void test2h() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; v1 = v2 << 1; v1 = v2 >> 1; v1 = v2 >>> 1; diff --git a/gcc/testsuite/gdc.dg/simd2i.d b/gcc/testsuite/gdc.dg/simd2i.d index 6946c79..03130b7 100644 --- a/gcc/testsuite/gdc.dg/simd2i.d +++ b/gcc/testsuite/gdc.dg/simd2i.d @@ -18,12 +18,12 @@ void test2i() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; static assert(!__traits(compiles, v1 << 1)); static assert(!__traits(compiles, v1 >> 1)); static assert(!__traits(compiles, v1 >>> 1)); diff --git a/gcc/testsuite/gdc.dg/simd2j.d b/gcc/testsuite/gdc.dg/simd2j.d index ecfdbf3..f86a448 100644 --- a/gcc/testsuite/gdc.dg/simd2j.d +++ b/gcc/testsuite/gdc.dg/simd2j.d @@ -18,12 +18,12 @@ void test2j() static assert(!__traits(compiles, v1 ^^ v2)); static assert(!__traits(compiles, v1 is v2)); static assert(!__traits(compiles, v1 !is v2)); - static assert(!__traits(compiles, v1 == v2)); - static assert(!__traits(compiles, v1 != v2)); - static assert(!__traits(compiles, v1 < v2)); - static assert(!__traits(compiles, v1 > v2)); - static assert(!__traits(compiles, v1 <= v2)); - static assert(!__traits(compiles, v1 >= v2)); + v1 = v1 == v2; + v1 = v1 != v2; + v1 = v1 < v2; + v1 = v1 > v2; + v1 = v1 <= v2; + v1 = v1 >= v2; static assert(!__traits(compiles, v1 << 1)); static assert(!__traits(compiles, v1 >> 1)); static assert(!__traits(compiles, v1 >>> 1)); |