diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2023-12-11 14:24:41 +0000 |
---|---|---|
committer | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2023-12-11 14:51:14 +0000 |
commit | f5fc001a84a7dbb942a6252b3162dd38b4aae311 (patch) | |
tree | 312f29ae7f9128f6b2dee2608db7bc57b63f8e9e /gcc/testsuite/gcc.dg/vect | |
parent | f5aa23f7f633313039c840ab36695a38efbb1a99 (diff) | |
download | gcc-f5fc001a84a7dbb942a6252b3162dd38b4aae311.zip gcc-f5fc001a84a7dbb942a6252b3162dd38b4aae311.tar.gz gcc-f5fc001a84a7dbb942a6252b3162dd38b4aae311.tar.bz2 |
aarch64: enable mixed-types for aarch64 simdclones
This patch enables the use of mixed-types for simd clones for AArch64, adds
aarch64 as a target_vect_simd_clones and corrects the way the simdlen is chosen
for non-specified simdlen clauses according to the 'Vector Function Application
Binary Interface Specification for AArch64'.
Additionally this patch also restricts combinations of simdlen and
return/argument types that map to vectors larger than 128 bits as we currently
do not have a way to represent these types in a way that is consistent
internally and externally.
gcc/ChangeLog:
* config/aarch64/aarch64.cc (lane_size): New function.
(aarch64_simd_clone_compute_vecsize_and_simdlen): Determine simdlen according to NDS rule
and reject combination of simdlen and types that lead to vectors larger than 128bits.
gcc/testsuite/ChangeLog:
* lib/target-supports.exp: Add aarch64 targets to vect_simd_clones.
* c-c++-common/gomp/declare-variant-14.c: Adapt test for aarch64.
* c-c++-common/gomp/pr60823-1.c: Likewise.
* c-c++-common/gomp/pr60823-2.c: Likewise.
* c-c++-common/gomp/pr60823-3.c: Likewise.
* g++.dg/gomp/attrs-10.C: Likewise.
* g++.dg/gomp/declare-simd-1.C: Likewise.
* g++.dg/gomp/declare-simd-3.C: Likewise.
* g++.dg/gomp/declare-simd-4.C: Likewise.
* g++.dg/gomp/declare-simd-7.C: Likewise.
* g++.dg/gomp/declare-simd-8.C: Likewise.
* g++.dg/gomp/pr88182.C: Likewise.
* gcc.dg/declare-simd.c: Likewise.
* gcc.dg/gomp/declare-simd-1.c: Likewise.
* gcc.dg/gomp/declare-simd-3.c: Likewise.
* gcc.dg/gomp/pr87887-1.c: Likewise.
* gcc.dg/gomp/pr87895-1.c: Likewise.
* gcc.dg/gomp/pr89246-1.c: Likewise.
* gcc.dg/gomp/pr99542.c: Likewise.
* gcc.dg/gomp/simd-clones-2.c: Likewise.
* gcc.dg/vect/vect-simd-clone-1.c: Likewise.
* gcc.dg/vect/vect-simd-clone-2.c: Likewise.
* gcc.dg/vect/vect-simd-clone-4.c: Likewise.
* gcc.dg/vect/vect-simd-clone-5.c: Likewise.
* gcc.dg/vect/vect-simd-clone-6.c: Likewise.
* gcc.dg/vect/vect-simd-clone-7.c: Likewise.
* gcc.dg/vect/vect-simd-clone-8.c: Likewise.
* gfortran.dg/gomp/declare-simd-2.f90: Likewise.
* gfortran.dg/gomp/declare-simd-coarray-lib.f90: Likewise.
* gfortran.dg/gomp/declare-variant-14.f90: Likewise.
* gfortran.dg/gomp/pr79154-1.f90: Likewise.
* gfortran.dg/gomp/pr83977.f90: Likewise.
libgomp/ChangeLog:
* testsuite/libgomp.c/declare-variant-1.c: Adapt test for aarch64.
* testsuite/libgomp.fortran/declare-simd-1.f90: Likewise.
Diffstat (limited to 'gcc/testsuite/gcc.dg/vect')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c | 8 |
7 files changed, 56 insertions, 10 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c index c44bfe5..ec6d2da 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-1.c @@ -12,8 +12,13 @@ int array[N]; #pragma omp declare simd simdlen(4) notinbranch #pragma omp declare simd simdlen(4) notinbranch uniform(b) linear(c:3) +#ifdef __aarch64__ +#pragma omp declare simd simdlen(2) notinbranch +#pragma omp declare simd simdlen(2) notinbranch uniform(b) linear(c:3) +#else #pragma omp declare simd simdlen(8) notinbranch #pragma omp declare simd simdlen(8) notinbranch uniform(b) linear(c:3) +#endif __attribute__((noinline)) int foo (int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c index feab989..13fc936 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-2.c @@ -12,8 +12,13 @@ int array[N] __attribute__((aligned (32))); #pragma omp declare simd simdlen(4) notinbranch aligned(a:16) uniform(a) linear(b) #pragma omp declare simd simdlen(4) notinbranch aligned(a:32) uniform(a) linear(b) +#ifdef __aarch64__ +#pragma omp declare simd simdlen(2) notinbranch aligned(a:16) uniform(a) linear(b) +#pragma omp declare simd simdlen(2) notinbranch aligned(a:32) uniform(a) linear(b) +#else #pragma omp declare simd simdlen(8) notinbranch aligned(a:16) uniform(a) linear(b) #pragma omp declare simd simdlen(8) notinbranch aligned(a:32) uniform(a) linear(b) +#endif __attribute__((noinline)) void foo (int *a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c index 4241467..2f9f830 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-4.c @@ -12,7 +12,11 @@ float d[N]; int e[N]; unsigned short f[N]; +#ifdef __aarch64__ +#pragma omp declare simd simdlen(4) notinbranch uniform(b) +#else #pragma omp declare simd simdlen(8) notinbranch uniform(b) +#endif __attribute__((noinline)) float foo (float a, float b, float c) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c index 620cec3..0970818 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c @@ -10,7 +10,11 @@ int d[N], e[N]; +#ifdef __aarch64__ +#pragma omp declare simd simdlen(2) notinbranch uniform(b) linear(c:3) +#else #pragma omp declare simd simdlen(4) notinbranch uniform(b) linear(c:3) +#endif __attribute__((noinline)) long long int foo (int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c index 440091d..978cd4f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-6.c @@ -8,14 +8,24 @@ #define N 1024 #endif -int a[N]; -long long int b[N]; -short c[N]; +#ifdef __aarch64__ +#define TYPE1 int +#define TYPE2 int +#define TYPE3 short +#else +#define TYPE1 int +#define TYPE2 long long int +#define TYPE3 short +#endif + +TYPE1 a[N]; +TYPE2 b[N]; +TYPE3 c[N]; #pragma omp declare simd #pragma omp declare simd uniform(b) linear(c:3) -__attribute__((noinline)) short -foo (int a, long long int b, short c) +__attribute__((noinline)) TYPE3 +foo (TYPE1 a, TYPE2 b, TYPE3 c) { return a + b + c; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c index 62246e2..68ea471 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c @@ -8,14 +8,24 @@ #define N 1024 #endif -int a[N]; -long long int b[N]; -short c[N]; +#ifdef __aarch64__ +#define TYPE1 int +#define TYPE2 int +#define TYPE3 short +#else +#define TYPE1 int +#define TYPE2 long long int +#define TYPE3 short +#endif + +TYPE1 a[N]; +TYPE2 b[N]; +TYPE3 c[N]; #pragma omp declare simd #pragma omp declare simd uniform(b) linear(c:3) -__attribute__((noinline)) short -foo (int a, long long int b, int c) +__attribute__((noinline)) TYPE3 +foo (TYPE1 a, TYPE2 b, TYPE1 c) { return a + b + c; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c index 11ea213..2984282 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c @@ -12,14 +12,22 @@ int a[N], b[N]; long int c[N]; unsigned char d[N]; +#ifdef __aarch64__ +#pragma omp declare simd simdlen(2) notinbranch +#else #pragma omp declare simd simdlen(8) notinbranch +#endif __attribute__((noinline)) int foo (long int a, int b, int c) { return a + b + c; } +#ifdef __aarch64__ +#pragma omp declare simd simdlen(2) notinbranch +#else #pragma omp declare simd simdlen(8) notinbranch +#endif __attribute__((noinline)) long int bar (int a, int b, long int c) { |