aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gdc.dg
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2022-11-05 19:32:17 +0100
committerIain Buclaw <ibuclaw@gdcproject.org>2022-11-05 19:47:16 +0100
commit3c28d6a3a018e9acb7af1422d6263661f69d5f94 (patch)
treedbf38ada050ca3502eacc0ae91c0a729b2a91c14 /gcc/testsuite/gdc.dg
parent3ad2167bbac8ae83b1e91305b105ab5287bdac55 (diff)
downloadgcc-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.d40
-rw-r--r--gcc/testsuite/gdc.dg/simd2a.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2b.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2c.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2d.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2e.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2f.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2g.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2h.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2i.d12
-rw-r--r--gcc/testsuite/gdc.dg/simd2j.d12
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));