]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gdc.dg/simd2a.d
d: Allow vectors to be compared for identity [PR108946]
[thirdparty/gcc.git] / gcc / testsuite / gdc.dg / simd2a.d
1 // { dg-additional-options "-mavx" { target avx_runtime } }
2 // { dg-do compile { target { avx_runtime || vect_sizes_16B_8B } } }
3 import core.simd;
4
5 void test2a()
6 {
7 byte16 v1, v2 = 1, v3 = 1;
8 bool b1;
9 v1 = v2;
10 v1 = v2 + v3;
11 v1 = v2 - v3;
12 v1 = v2 * v3;
13 v1 = v2 / v3;
14 v1 = v2 % v3;
15 v1 = v2 & v3;
16 v1 = v2 | v3;
17 v1 = v2 ^ v3;
18 static assert(!__traits(compiles, v1 ~ v2));
19 static assert(!__traits(compiles, v1 ^^ v2));
20 b1 = v1 is v2;
21 b1 = v1 !is v2;
22 static assert( __traits(compiles, v1 == v2));
23 static assert( __traits(compiles, v1 != v2));
24 static assert( __traits(compiles, v1 < v2));
25 static assert( __traits(compiles, v1 > v2));
26 static assert( __traits(compiles, v1 <= v2));
27 static assert( __traits(compiles, v1 >= v2));
28 v1 = v2 << 1;
29 v1 = v2 >> 1;
30 v1 = v2 >>> 1;
31 static assert(!__traits(compiles, v1 && v2));
32 static assert(!__traits(compiles, v1 || v2));
33 v1 = ~v2;
34 v1 = -v2;
35 v1 = +v2;
36 static assert(!__traits(compiles, !v1));
37
38 v1 += v2;
39 v1 -= v2;
40 v1 *= v2;
41 v1 /= v2;
42 v1 %= v2;
43 v1 &= v2;
44 v1 |= v2;
45 v1 ^= v2;
46 static assert(!__traits(compiles, v1 ~= v2));
47 static assert(!__traits(compiles, v1 ^^= v2));
48 v1 <<= 1;
49 v1 >>= 1;
50 v1 >>>= 1;
51
52 // A cast from vector to non-vector is allowed only when the target is same size Tsarray.
53 static assert(!__traits(compiles, cast(byte)v1)); // 1byte
54 static assert(!__traits(compiles, cast(short)v1)); // 2byte
55 static assert(!__traits(compiles, cast(int)v1)); // 4byte
56 static assert(!__traits(compiles, cast(long)v1)); // 8byte
57 static assert(!__traits(compiles, cast(float)v1)); // 4byte
58 static assert(!__traits(compiles, cast(double)v1)); // 8byte
59 static assert(!__traits(compiles, cast(int[2])v1)); // 8byte Tsarray
60 static assert( __traits(compiles, cast(int[4])v1)); // 16byte Tsarray, OK
61 static assert( __traits(compiles, cast(long[2])v1)); // 16byte Tsarray, OK
62 }