From: Thomas Schwinge Date: Fri, 30 Nov 2018 20:39:08 +0000 (+0100) Subject: Support multiple OpenACC wait clauses X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c34f4fbcc450474885baede3d5de8dcfcb9f103f;p=gcc.git Support multiple OpenACC wait clauses Support for this is not explicitly called for in OpenACC 2.6, but given that GCC internally decomposes "wait (1, 2)" into "wait (1) wait (2)" (similar for other clauses, too), it's reasonable to also support that syntax in the front ends -- which happens to already be the case for C, C++, and easy enough to do for Fortran. gcc/fortran/ * openmp.c (gfc_match_omp_clauses): Support multiple OpenACC wait clauses. gcc/testsuite/ * c-c++-common/goacc/asyncwait-5.c: New file. * gfortran.dg/goacc/asyncwait-5.f: Likewise. From-SVN: r266684 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 06e7400eda7..435ecf82f97 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2018-11-30 Thomas Schwinge + + * openmp.c (gfc_match_omp_clauses): Support multiple OpenACC wait + clauses. + 2018-11-27 Martin Liska * decl.c (gfc_match_gcc_builtin): New function. diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 6430e61ea7a..e1560c1fe37 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -1876,7 +1876,6 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask, break; case 'w': if ((mask & OMP_CLAUSE_WAIT) - && !c->wait && gfc_match ("wait") == MATCH_YES) { c->wait = true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 874c158f75d..75ca70b4af2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-11-30 Thomas Schwinge + + * c-c++-common/goacc/asyncwait-5.c: New file. + * gfortran.dg/goacc/asyncwait-5.f: Likewise. + 2018-11-30 Peter Bergner PR target/87496 diff --git a/gcc/testsuite/c-c++-common/goacc/asyncwait-5.c b/gcc/testsuite/c-c++-common/goacc/asyncwait-5.c new file mode 100644 index 00000000000..fe6f8a0cf2d --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/asyncwait-5.c @@ -0,0 +1,14 @@ +/* Multiple OpenACC wait clauses. */ + +/* { dg-additional-options "-fdump-tree-original" } */ + +void f() +{ +#pragma acc parallel async (1) wait (14) + ; + /* { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel wait\\(14\\) async\\(1\\)$" 1 "original" } } */ + +#pragma acc parallel async (2) wait (11, 12) wait (13) + ; + /* { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel wait\\(13\\) wait\\(12\\) wait\\(11\\) async\\(2\\)\$" 1 "original" } } */ +} diff --git a/gcc/testsuite/gfortran.dg/goacc/asyncwait-5.f b/gcc/testsuite/gfortran.dg/goacc/asyncwait-5.f new file mode 100644 index 00000000000..59b886343af --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/asyncwait-5.f @@ -0,0 +1,13 @@ +! Multiple OpenACC wait clauses. + +! { dg-additional-options "-fdump-tree-original" } + +!$ACC PARALLEL ASYNC (1) WAIT (14) +!$ACC END PARALLEL +! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel async\\(1\\) wait\\(14\\)$" 1 "original" } } + +!$ACC PARALLEL ASYNC (2) WAIT (11, 12) WAIT(13) +!$ACC END PARALLEL +! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel async\\(2\\) wait\\(11\\) wait\\(12\\) wait\\(13\\)$" 1 "original" } } + + END