aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2023-10-23 14:53:29 +0200
committerThomas Schwinge <thomas@codesourcery.com>2023-10-25 11:24:29 +0200
commit047841a68ebf5f991e842961f9e54f3c10b94f2c (patch)
tree926b328223b6414036d0d216d7563d18bc73a458 /gcc
parenta5e919027fdb1900a6f2d64f763c99dbaf98aee6 (diff)
downloadgcc-047841a68ebf5f991e842961f9e54f3c10b94f2c.zip
gcc-047841a68ebf5f991e842961f9e54f3c10b94f2c.tar.gz
gcc-047841a68ebf5f991e842961f9e54f3c10b94f2c.tar.bz2
Extend test suite coverage for OpenACC 'self' clause for compute constructs
... on top of what was provided in recent commit 3a3596389c2e539cb8fd5dc5784a4e2afe193a2a "OpenACC 2.7: Implement self clause for compute constructs". gcc/testsuite/ * c-c++-common/goacc/if-clause-2.c: Enhance. * c-c++-common/goacc/self-clause-1.c: Likewise. * c-c++-common/goacc/self-clause-2.c: Likewise. * gfortran.dg/goacc/if.f95: Likewise. * gfortran.dg/goacc/kernels-tree.f95: Likewise. * gfortran.dg/goacc/parallel-tree.f95: Likewise. * gfortran.dg/goacc/self.f95: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/if-1.c: Enhance. * testsuite/libgomp.oacc-c-c++-common/self-1.c: Likewise. * testsuite/libgomp.oacc-fortran/if-1.f90: Likewise. * testsuite/libgomp.oacc-c-c++-common/if-self-1.c: New. * testsuite/libgomp.oacc-fortran/self-1.f90: Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/c-c++-common/goacc/if-clause-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/self-clause-1.c6
-rw-r--r--gcc/testsuite/c-c++-common/goacc/self-clause-2.c20
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/if.f9510
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-tree.f955
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/parallel-tree.f953
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/self.f958
7 files changed, 49 insertions, 5 deletions
diff --git a/gcc/testsuite/c-c++-common/goacc/if-clause-2.c b/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
index a480725..7147552 100644
--- a/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/if-clause-2.c
@@ -1,3 +1,5 @@
+/* See also 'self-clause-2.c'. */
+
/* { dg-additional-options "-fdump-tree-gimple" } */
/* { dg-additional-options "--param=openacc-kernels=decompose" }
{ dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } */
diff --git a/gcc/testsuite/c-c++-common/goacc/self-clause-1.c b/gcc/testsuite/c-c++-common/goacc/self-clause-1.c
index fe892be..28de3dc 100644
--- a/gcc/testsuite/c-c++-common/goacc/self-clause-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/self-clause-1.c
@@ -5,6 +5,8 @@ f (int b)
{
struct { int i; } *p;
+#pragma acc parallel self(0) self(b) /* { dg-error "too many 'self' clauses" } */
+ ;
#pragma acc parallel self self(b) /* { dg-error "too many 'self' clauses" } */
;
#pragma acc parallel self(*p)
@@ -12,6 +14,8 @@ f (int b)
{ dg-error {could not convert '\* p' from 'f\(int\)::<unnamed struct>' to 'bool'} {} { target c++ } .-2 } */
;
+#pragma acc kernels self(0) self(b) /* { dg-error "too many 'self' clauses" } */
+ ;
#pragma acc kernels self self(b) /* { dg-error "too many 'self' clauses" } */
;
#pragma acc kernels self(*p)
@@ -19,6 +23,8 @@ f (int b)
{ dg-error {could not convert '\* p' from 'f\(int\)::<unnamed struct>' to 'bool'} {} { target c++ } .-2 } */
;
+#pragma acc serial self(0) self(b) /* { dg-error "too many 'self' clauses" } */
+ ;
#pragma acc serial self self(b) /* { dg-error "too many 'self' clauses" } */
;
#pragma acc serial self(*p)
diff --git a/gcc/testsuite/c-c++-common/goacc/self-clause-2.c b/gcc/testsuite/c-c++-common/goacc/self-clause-2.c
index d932ac9..769694b 100644
--- a/gcc/testsuite/c-c++-common/goacc/self-clause-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/self-clause-2.c
@@ -1,3 +1,5 @@
+/* See also 'if-clause-2.c'. */
+
/* { dg-additional-options "-fdump-tree-gimple" } */
void
@@ -15,3 +17,21 @@ f (short c)
/* { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_serial map\(tofrom:c \[len: [0-9]+\]\) self\(_[0-9]+\)$} 1 "gimple" } } */
++c;
}
+
+/* The same, but with implicit 'true' condition-argument. */
+
+void
+g (short d)
+{
+#pragma acc parallel self copy(d)
+ /* { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_parallel map\(tofrom:d \[len: [0-9]+\]\) self\(1\)$} 1 "gimple" } } */
+ ++d;
+
+#pragma acc kernels self copy(d)
+ /* { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_kernels map\(tofrom:d \[len: [0-9]+\]\) self\(1\)$} 1 "gimple" } } */
+ ++d;
+
+#pragma acc serial self copy(d)
+ /* { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_serial map\(tofrom:d \[len: [0-9]+\]\) self\(1\)$} 1 "gimple" } } */
+ ++d;
+}
diff --git a/gcc/testsuite/gfortran.dg/goacc/if.f95 b/gcc/testsuite/gfortran.dg/goacc/if.f95
index 56f3711..753ef82 100644
--- a/gcc/testsuite/gfortran.dg/goacc/if.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/if.f95
@@ -1,3 +1,5 @@
+! See also 'self.f95'.
+
! { dg-do compile }
program test
@@ -12,12 +14,14 @@ program test
!$acc end parallel
!$acc parallel if (1) ! { dg-error "scalar LOGICAL expression" }
!$acc end parallel
- !$acc kernels if (i) ! { dg-error "scalar LOGICAL expression" }
- !$acc end kernels
+
!$acc kernels if ! { dg-error "Expected '\\(' after 'if'" }
!$acc kernels if () ! { dg-error "Invalid character" }
+ !$acc kernels if (i) ! { dg-error "scalar LOGICAL expression" }
+ !$acc end kernels
!$acc kernels if (1) ! { dg-error "scalar LOGICAL expression" }
!$acc end kernels
+
!$acc data if ! { dg-error "Expected '\\(' after 'if'" }
!$acc data if () ! { dg-error "Invalid character" }
!$acc data if (i) ! { dg-error "scalar LOGICAL expression" }
@@ -36,12 +40,14 @@ program test
!$acc end parallel
!$acc parallel if (i.gt.1)
!$acc end parallel
+
!$acc kernels if (x)
!$acc end kernels
!$acc kernels if (.true.)
!$acc end kernels
!$acc kernels if (i.gt.1)
!$acc end kernels
+
!$acc data if (x)
!$acc end data
!$acc data if (.true.)
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
index ceb07fb..1ba04a8 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
@@ -12,6 +12,7 @@ program test
logical :: l = .true.
!$acc kernels if(l) async num_gangs(i) num_workers(i) vector_length(i) &
+ !$acc self &
!$acc copy(i), copyin(j), copyout(k), create(m) &
!$acc no_create(n) &
!$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
@@ -27,7 +28,7 @@ end program test
! { dg-final { scan-tree-dump-times "num_gangs" 1 "original" } }
! { dg-final { scan-tree-dump-times "num_workers" 1 "original" } }
! { dg-final { scan-tree-dump-times "vector_length" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "self\\(1\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "map\\(tofrom:i\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "map\\(to:j\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "map\\(from:k\\)" 1 "original" } }
@@ -42,4 +43,4 @@ end program test
! { dg-final { scan-tree-dump-times "map\\(force_deviceptr:u\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_data_kernels if\((?:D\.|_)[0-9]+\)$} 1 "omp_oacc_kernels_decompose" } }
-! { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_parallel_kernels_gang_single num_gangs\(1\) if\((?:D\.|_)[0-9]+\) async\(-1\)$} 1 "omp_oacc_kernels_decompose" } }
+! { dg-final { scan-tree-dump-times {(?n)#pragma omp target oacc_parallel_kernels_gang_single num_gangs\(1\) if\((?:D\.|_)[0-9]+\) self\(1\) async\(-1\)$} 1 "omp_oacc_kernels_decompose" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
index 6110d93..0d4ec11 100644
--- a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
@@ -14,6 +14,7 @@ program test
logical :: l = .true.
!$acc parallel if(l) async num_gangs(i) num_workers(i) vector_length(i) &
+ !$acc self &
!$acc reduction(max:q), copy(i), copyin(j), copyout(k), create(m) &
!$acc no_create(n) &
!$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
@@ -33,7 +34,7 @@ end program test
! { dg-final { scan-tree-dump-times "num_gangs" 1 "original" } }
! { dg-final { scan-tree-dump-times "num_workers" 1 "original" } }
! { dg-final { scan-tree-dump-times "vector_length" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "self\\(1\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "reduction\\(max:q\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "map\\(tofrom:i\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "map\\(to:j\\)" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/self.f95 b/gcc/testsuite/gfortran.dg/goacc/self.f95
index 4817f16..aa0f6fe 100644
--- a/gcc/testsuite/gfortran.dg/goacc/self.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/self.f95
@@ -1,3 +1,5 @@
+! See also 'if.f95'.
+
! { dg-do compile }
program test
@@ -29,6 +31,8 @@ program test
!$acc kernels self (.false.) self (.false.) { dg-error "Duplicated 'self' clause" }
!$acc serial self (.false.) self (.false.) { dg-error "Duplicated 'self' clause" }
+ !$acc parallel self
+ !$acc end parallel
!$acc parallel self (x)
!$acc end parallel
!$acc parallel self (.true.)
@@ -36,6 +40,8 @@ program test
!$acc parallel self (i.gt.1)
!$acc end parallel
+ !$acc kernels self
+ !$acc end kernels
!$acc kernels self (x)
!$acc end kernels
!$acc kernels self (.true.)
@@ -43,6 +49,8 @@ program test
!$acc kernels self (i.gt.1)
!$acc end kernels
+ !$acc serial self
+ !$acc end serial
!$acc serial self (x)
!$acc end serial
!$acc serial self (.true.)