From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1729) id 4CCDD3AA9C7B; Thu, 13 May 2021 16:21:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4CCDD3AA9C7B Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Kwok Yeung To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-11] Add '-Wopenacc-parallelism' X-Act-Checkin: gcc X-Git-Author: Thomas Schwinge X-Git-Refname: refs/heads/devel/omp/gcc-11 X-Git-Oldrev: 6f3efa4c6282e68bfa706d7e4e60bc902a5101cf X-Git-Newrev: 734bcbe47bccdc4db59109f4ca459edd73f814cc Message-Id: <20210513162108.4CCDD3AA9C7B@sourceware.org> Date: Thu, 13 May 2021 16:21:08 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 May 2021 16:21:08 -0000 https://gcc.gnu.org/g:734bcbe47bccdc4db59109f4ca459edd73f814cc commit 734bcbe47bccdc4db59109f4ca459edd73f814cc Author: Thomas Schwinge Date: Fri Apr 23 12:23:51 2021 +0200 Add '-Wopenacc-parallelism' ... to diagnose potentially suboptimal choices regarding OpenACC parallelism. Not enabled by default: too noisy ("*potentially* suboptimal choices"); see XFAILed 'dg-bogus'es. gcc/c-family/ * c.opt (Wopenacc-parallelism): New. gcc/fortran/ * lang.opt (Wopenacc-parallelism): New. gcc/ * omp-offload.c (oacc_validate_dims): Implement '-Wopenacc-parallelism'. * doc/invoke.texi (-Wopenacc-parallelism): Document. gcc/testsuite/ * c-c++-common/goacc/diag-parallelism-1.c: New. * c-c++-common/goacc/acc-icf.c: Specify '-Wopenacc-parallelism', and match diagnostics, as appropriate. * c-c++-common/goacc/classify-kernels-unparallelized.c: Likewise. * c-c++-common/goacc/classify-kernels.c: Likewise. * c-c++-common/goacc/classify-parallel.c: Likewise. * c-c++-common/goacc/classify-routine.c: Likewise. * c-c++-common/goacc/classify-serial.c: Likewise. * c-c++-common/goacc/kernels-decompose-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-2.c: Likewise. * c-c++-common/goacc/parallel-dims-1.c: Likewise. * c-c++-common/goacc/parallel-reduction.c: Likewise. * c-c++-common/goacc/pr70688.c: Likewise. * c-c++-common/goacc/routine-1.c: Likewise. * c-c++-common/goacc/routine-level-of-parallelism-2.c: Likewise. * c-c++-common/goacc/uninit-dim-clause.c: Likewise. * gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise. * gfortran.dg/goacc/classify-kernels.f95: Likewise. * gfortran.dg/goacc/classify-parallel.f95: Likewise. * gfortran.dg/goacc/classify-routine.f95: Likewise. * gfortran.dg/goacc/classify-serial.f95: Likewise. * gfortran.dg/goacc/kernels-decompose-1.f95: Likewise. * gfortran.dg/goacc/kernels-decompose-2.f95: Likewise. * gfortran.dg/goacc/parallel-tree.f95: Likewise. * gfortran.dg/goacc/routine-4.f90: Likewise. * gfortran.dg/goacc/routine-level-of-parallelism-1.f90: Likewise. * gfortran.dg/goacc/routine-module-mod-1.f90: Likewise. * gfortran.dg/goacc/routine-multiple-directives-1.f90: Likewise. * gfortran.dg/goacc/uninit-dim-clause.f95: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Specify '-Wopenacc-parallelism', and match diagnostics, as appropriate. * testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/mode-transitions.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/private-variables.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/reduction-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-g-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Likewise. * testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise. * testsuite/libgomp.oacc-fortran/par-reduction-2-1.f: Likewise. * testsuite/libgomp.oacc-fortran/par-reduction-2-2.f: Likewise. * testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise. * testsuite/libgomp.oacc-fortran/parallel-reduction.f90: Likewise. * testsuite/libgomp.oacc-fortran/pr84028.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-5.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-6.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise. Co-Authored-By: Nathan Sidwell Co-Authored-By: Tom de Vries Co-Authored-By: Julian Brown Co-Authored-By: Kwok Cheung Yeung (cherry picked from commit 22cff118f7526bec195ed6e41452980820fdf3a8) Diff: --- gcc/ChangeLog.omp | 9 ++ gcc/c-family/ChangeLog.omp | 7 ++ gcc/c-family/c.opt | 4 + gcc/doc/invoke.texi | 10 +- gcc/fortran/ChangeLog.omp | 7 ++ gcc/fortran/lang.opt | 4 + gcc/omp-offload.c | 5 +- gcc/testsuite/ChangeLog.omp | 35 ++++++ gcc/testsuite/c-c++-common/goacc/acc-icf.c | 7 ++ .../goacc/classify-kernels-unparallelized.c | 3 + .../c-c++-common/goacc/classify-kernels.c | 3 + .../c-c++-common/goacc/classify-parallel.c | 3 + .../c-c++-common/goacc/classify-routine.c | 3 + gcc/testsuite/c-c++-common/goacc/classify-serial.c | 8 ++ .../c-c++-common/goacc/diag-parallelism-1.c | 124 +++++++++++++++++++++ .../c-c++-common/goacc/kernels-decompose-1.c | 3 + .../c-c++-common/goacc/kernels-decompose-2.c | 6 +- gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c | 10 +- .../c-c++-common/goacc/parallel-reduction.c | 6 +- gcc/testsuite/c-c++-common/goacc/pr70688.c | 12 +- gcc/testsuite/c-c++-common/goacc/routine-1.c | 15 ++- .../goacc/routine-level-of-parallelism-2.c | 8 +- .../c-c++-common/goacc/uninit-dim-clause.c | 21 ++-- .../goacc/classify-kernels-unparallelized.f95 | 3 + .../gfortran.dg/goacc/classify-kernels.f95 | 3 + .../gfortran.dg/goacc/classify-parallel.f95 | 3 + .../gfortran.dg/goacc/classify-routine.f95 | 3 + .../gfortran.dg/goacc/classify-serial.f95 | 6 + .../gfortran.dg/goacc/kernels-decompose-1.f95 | 3 + .../gfortran.dg/goacc/kernels-decompose-2.f95 | 6 +- gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 | 3 + gcc/testsuite/gfortran.dg/goacc/routine-4.f90 | 3 + .../goacc/routine-level-of-parallelism-1.f90 | 10 +- .../gfortran.dg/goacc/routine-module-mod-1.f90 | 4 + .../goacc/routine-multiple-directives-1.f90 | 9 +- .../gfortran.dg/goacc/uninit-dim-clause.f95 | 24 ++-- libgomp/ChangeLog.omp | 40 +++++++ .../libgomp.oacc-c-c++-common/firstprivate-1.c | 7 +- .../libgomp.oacc-c-c++-common/loop-auto-1.c | 6 +- .../libgomp.oacc-c-c++-common/loop-red-w-1.c | 5 +- .../libgomp.oacc-c-c++-common/loop-red-w-2.c | 5 +- .../testsuite/libgomp.oacc-c-c++-common/loop-w-1.c | 5 +- .../libgomp.oacc-c-c++-common/mode-transitions.c | 45 ++++---- .../libgomp.oacc-c-c++-common/par-reduction-1.c | 9 ++ .../libgomp.oacc-c-c++-common/par-reduction-2.c | 9 ++ .../libgomp.oacc-c-c++-common/parallel-dims.c | 14 ++- .../libgomp.oacc-c-c++-common/parallel-reduction.c | 5 +- .../libgomp.oacc-c-c++-common/pr85381-3.c | 6 + .../libgomp.oacc-c-c++-common/private-variables.c | 29 ++--- .../libgomp.oacc-c-c++-common/reduction-5.c | 4 +- .../libgomp.oacc-c-c++-common/reduction-7.c | 19 ++-- .../libgomp.oacc-c-c++-common/routine-g-1.c | 7 +- .../libgomp.oacc-c-c++-common/routine-w-1.c | 5 +- .../libgomp.oacc-c-c++-common/routine-wv-2.c | 4 + .../libgomp.oacc-c-c++-common/static-variable-1.c | 16 ++- .../libgomp.oacc-fortran/optional-private.f90 | 9 +- .../libgomp.oacc-fortran/par-reduction-2-1.f | 13 ++- .../libgomp.oacc-fortran/par-reduction-2-2.f | 13 ++- .../libgomp.oacc-fortran/parallel-dims.f90 | 12 +- .../libgomp.oacc-fortran/parallel-reduction.f90 | 5 + libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 | 6 +- .../libgomp.oacc-fortran/private-variables.f90 | 19 ++-- .../testsuite/libgomp.oacc-fortran/reduction-1.f90 | 4 + .../testsuite/libgomp.oacc-fortran/reduction-5.f90 | 4 + .../testsuite/libgomp.oacc-fortran/reduction-6.f90 | 4 + .../testsuite/libgomp.oacc-fortran/routine-7.f90 | 6 + 66 files changed, 607 insertions(+), 121 deletions(-) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 14c6f4b8403..dc5a0321e85 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,12 @@ +2021-04-30 Kwok Cheung Yeung + + Backport from mainline + 2021-04-23 Thomas Schwinge + + * omp-offload.c (oacc_validate_dims): Implement + '-Wopenacc-parallelism'. + * doc/invoke.texi (-Wopenacc-parallelism): Document. + 2021-04-07 Kwok Cheung Yeung * omp-low.c (is_oacc_parallel_or_serial): Handle diff --git a/gcc/c-family/ChangeLog.omp b/gcc/c-family/ChangeLog.omp index 34570313969..b5be331200c 100644 --- a/gcc/c-family/ChangeLog.omp +++ b/gcc/c-family/ChangeLog.omp @@ -1,3 +1,10 @@ +2021-04-30 Kwok Cheung Yeung + + Backport from mainline + 2021-04-23 Thomas Schwinge + + * c.opt (Wopenacc-parallelism): New. + 2020-08-30 Sandra Loosemore * c-omp.c (end_test_ok_for_annotation_r): New. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index c595da46a92..517762ca0da 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1041,6 +1041,10 @@ Wopenacc-kernels-annotate-loops C ObjC C++ ObjC++ Warning Var(warn_openacc_kernels_annotate_loops) Init(0) Warn about loops in OpenACC kernels regions that cannot be parallelized. +Wopenacc-parallelism +C C++ Var(warn_openacc_parallelism) Warning +Warn about potentially suboptimal choices related to OpenACC parallelism. + Wopenmp-simd C C++ Var(warn_openmp_simd) Warning LangEnabledBy(C C++,Wall) Warn if a simd directive is overridden by the vectorizer cost model. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e89e6bc8abd..01428377826 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -365,7 +365,9 @@ Objective-C and Objective-C++ Dialects}. -Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol -Wnull-dereference -Wno-odr @gol --Wopenacc-kernels-annotate-loops -Wopenmp-simd @gol +-Wopenacc-kernels-annotate-loops +-Wopenacc-parallelism @gol +-Wopenmp-simd @gol -Wno-overflow -Woverlength-strings -Wno-override-init-side-effects @gol -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol -Wparentheses -Wno-pedantic-ms-format @gol @@ -8762,6 +8764,12 @@ Warn about @code{for} (C/C++) or @code{DO} (Fortran) loops in OpenACC kernels regions that cannot be automatically annotated for parallelization with @option{-fopenacc-kernels-annotate-loops}. +@item -Wopenacc-parallelism +@opindex Wopenacc-parallelism +@opindex Wno-openacc-parallelism +@cindex OpenACC accelerator programming +Warn about potentially suboptimal choices related to OpenACC parallelism. + @item -Wopenmp-simd @opindex Wopenmp-simd @opindex Wno-openmp-simd diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp index be9045cd6f3..165fe3bdbfb 100644 --- a/gcc/fortran/ChangeLog.omp +++ b/gcc/fortran/ChangeLog.omp @@ -1,3 +1,10 @@ +2021-04-30 Kwok Cheung Yeung + + Backport from mainline + 2021-04-23 Thomas Schwinge + + * lang.opt (Wopenacc-parallelism): New. + 2021-04-22 Kwok Cheung Yeung Backport from mainline diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index e47eb9c6154..dba333448c1 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -289,6 +289,10 @@ Wopenacc-kernels-annotate-loops Fortran ; Documented in C +Wopenacc-parallelism +Fortran +; Documented in C + Wopenmp-simd Fortran ; Documented in C diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 821b60a3923..7ffe3cd7f8f 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -1050,6 +1050,7 @@ oacc_validate_dims (tree fn, tree attrs, int *dims, int level, unsigned used) check = false; #endif if (check + && warn_openacc_parallelism && !lookup_attribute ("oacc kernels", DECL_ATTRIBUTES (fn))) { static char const *const axes[] = @@ -1061,13 +1062,13 @@ oacc_validate_dims (tree fn, tree attrs, int *dims, int level, unsigned used) else if ((used & GOMP_DIM_MASK (ix)) && dims[ix] == 1) /* There is partitioned execution, but the user requested a dimension size of 1. They're probably confused. */ - warning_at (DECL_SOURCE_LOCATION (fn), 0, + warning_at (DECL_SOURCE_LOCATION (fn), OPT_Wopenacc_parallelism, "region contains %s partitioned code but" " is not %s partitioned", axes[ix], axes[ix]); else if (!(used & GOMP_DIM_MASK (ix)) && dims[ix] != 1) /* The dimension is explicitly partitioned to non-unity, but no use is made within the region. */ - warning_at (DECL_SOURCE_LOCATION (fn), 0, + warning_at (DECL_SOURCE_LOCATION (fn), OPT_Wopenacc_parallelism, "region is %s partitioned but" " does not contain %s partitioned code", axes[ix], axes[ix]); diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index e6d06f5ff5a..11cf751c581 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,38 @@ +2021-04-30 Kwok Cheung Yeung + + Backport from mainline + 2021-04-23 Thomas Schwinge + + * c-c++-common/goacc/diag-parallelism-1.c: New. + * c-c++-common/goacc/acc-icf.c: Specify '-Wopenacc-parallelism', + and match diagnostics, as appropriate. + * c-c++-common/goacc/classify-kernels-unparallelized.c: Likewise. + * c-c++-common/goacc/classify-kernels.c: Likewise. + * c-c++-common/goacc/classify-parallel.c: Likewise. + * c-c++-common/goacc/classify-routine.c: Likewise. + * c-c++-common/goacc/classify-serial.c: Likewise. + * c-c++-common/goacc/kernels-decompose-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-2.c: Likewise. + * c-c++-common/goacc/parallel-dims-1.c: Likewise. + * c-c++-common/goacc/parallel-reduction.c: Likewise. + * c-c++-common/goacc/pr70688.c: Likewise. + * c-c++-common/goacc/routine-1.c: Likewise. + * c-c++-common/goacc/routine-level-of-parallelism-2.c: Likewise. + * c-c++-common/goacc/uninit-dim-clause.c: Likewise. + * gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise. + * gfortran.dg/goacc/classify-kernels.f95: Likewise. + * gfortran.dg/goacc/classify-parallel.f95: Likewise. + * gfortran.dg/goacc/classify-routine.f95: Likewise. + * gfortran.dg/goacc/classify-serial.f95: Likewise. + * gfortran.dg/goacc/kernels-decompose-1.f95: Likewise. + * gfortran.dg/goacc/kernels-decompose-2.f95: Likewise. + * gfortran.dg/goacc/parallel-tree.f95: Likewise. + * gfortran.dg/goacc/routine-4.f90: Likewise. + * gfortran.dg/goacc/routine-level-of-parallelism-1.f90: Likewise. + * gfortran.dg/goacc/routine-module-mod-1.f90: Likewise. + * gfortran.dg/goacc/routine-multiple-directives-1.f90: Likewise. + * gfortran.dg/goacc/uninit-dim-clause.f95: Likewise. + 2021-04-29 Kwok Cheung Yeung * c-c++-common/goacc/classify-serial.c: Surpress warnings. Dump diff --git a/gcc/testsuite/c-c++-common/goacc/acc-icf.c b/gcc/testsuite/c-c++-common/goacc/acc-icf.c index 8601ace5db1..bc2e0fd19b9 100644 --- a/gcc/testsuite/c-c++-common/goacc/acc-icf.c +++ b/gcc/testsuite/c-c++-common/goacc/acc-icf.c @@ -2,7 +2,12 @@ /* { dg-additional-options "-fopenacc -O2 -fdump-ipa-icf" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #pragma acc routine gang +/* { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .+3 } + TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. */ int routine1 (int n) /* { dg-bogus "region is worker partitioned but does not contain worker partitioned code" "" { xfail *-*-* } } */ { @@ -16,6 +21,8 @@ routine1 (int n) /* { dg-bogus "region is worker partitioned but does not contai } #pragma acc routine gang +/* { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .+3 } + TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. */ int routine2 (int n) /* { dg-bogus "region is worker partitioned but does not contain worker partitioned code" "" { xfail *-*-* } } */ { diff --git a/gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c b/gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c index b438efd4572..d8706b9a0a0 100644 --- a/gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c +++ b/gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c @@ -8,6 +8,9 @@ { dg-additional-options "-fdump-tree-parloops1-all" } { dg-additional-options "-fdump-tree-oaccloops" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #define N 1024 extern unsigned int *__restrict a; diff --git a/gcc/testsuite/c-c++-common/goacc/classify-kernels.c b/gcc/testsuite/c-c++-common/goacc/classify-kernels.c index 368e6e26566..e3dc5c01a29 100644 --- a/gcc/testsuite/c-c++-common/goacc/classify-kernels.c +++ b/gcc/testsuite/c-c++-common/goacc/classify-kernels.c @@ -8,6 +8,9 @@ { dg-additional-options "-fdump-tree-parloops1-all" } { dg-additional-options "-fdump-tree-oaccloops" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #define N 1024 extern unsigned int *__restrict a; diff --git a/gcc/testsuite/c-c++-common/goacc/classify-parallel.c b/gcc/testsuite/c-c++-common/goacc/classify-parallel.c index 5a034ba35ad..6225a4381dd 100644 --- a/gcc/testsuite/c-c++-common/goacc/classify-parallel.c +++ b/gcc/testsuite/c-c++-common/goacc/classify-parallel.c @@ -6,6 +6,9 @@ { dg-additional-options "-fdump-tree-ompexp" } { dg-additional-options "-fdump-tree-oaccloops" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #define N 1024 extern unsigned int *__restrict a; diff --git a/gcc/testsuite/c-c++-common/goacc/classify-routine.c b/gcc/testsuite/c-c++-common/goacc/classify-routine.c index af0069a6f78..3454771ed92 100644 --- a/gcc/testsuite/c-c++-common/goacc/classify-routine.c +++ b/gcc/testsuite/c-c++-common/goacc/classify-routine.c @@ -6,6 +6,9 @@ { dg-additional-options "-fdump-tree-ompexp" } { dg-additional-options "-fdump-tree-oaccloops" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #define N 1024 extern unsigned int *__restrict a; diff --git a/gcc/testsuite/c-c++-common/goacc/classify-serial.c b/gcc/testsuite/c-c++-common/goacc/classify-serial.c index 63dd41511c4..0c21919758b 100644 --- a/gcc/testsuite/c-c++-common/goacc/classify-serial.c +++ b/gcc/testsuite/c-c++-common/goacc/classify-serial.c @@ -6,6 +6,9 @@ { dg-additional-options "-fdump-tree-ompexp" } { dg-additional-options "-fdump-tree-oaccloops" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #define N 1024 extern unsigned int *__restrict a; @@ -15,6 +18,11 @@ extern unsigned int *__restrict c; void SERIAL () { #pragma acc serial loop copyin (a[0:N], b[0:N]) copyout (c[0:N]) /* { dg-message "optimized: assigned OpenACC gang vector loop parallelism" } */ + /* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 } + { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 } + { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 } + TODO Should we really diagnose this if the user explicitly requested 'serial'? + TODO Should we instead diagnose ('-Wextra' category?) that the user may enable use of parallelism if replacing 'serial' with 'parallel', if applicable? */ for (unsigned int i = 0; i < N; i++) c[i] = a[i] + b[i]; } diff --git a/gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c b/gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c new file mode 100644 index 00000000000..6ee7bd078dd --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c @@ -0,0 +1,124 @@ +/* Diagnostics about potentially suboptimal choices related to OpenACC + parallelism. + + { dg-additional-options "-Wopenacc-parallelism" } +*/ + + +//TODO 'kernels' + +//TODO 'serial' + +//TODO 'routine' + +//TODO Fortran + + +static void f1 () +{ + int ary[10]; + + +#pragma acc parallel num_gangs (1) + /* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-1 } */ + { + #pragma acc loop gang + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_workers (1) + /* { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-1 } */ + { + #pragma acc loop worker + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel vector_length (1) + /* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } .-1 } */ + { + #pragma acc loop vector + for (int i = 0; i < 10; i++) + ary[i] = i; + } +} + + +static void f2 () +{ + int ary[10]; + + +#pragma acc parallel num_gangs (8) + /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop worker + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_gangs (8) + /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop vector + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_gangs (8) + /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop worker vector + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_workers (8) + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop gang + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_workers (8) + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop vector + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel num_workers (8) + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop gang vector + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel vector_length (8) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop gang + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel vector_length (8) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop worker + for (int i = 0; i < 10; i++) + ary[i] = i; + } + +#pragma acc parallel vector_length (8) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ + { + #pragma acc loop gang worker + for (int i = 0; i < 10; i++) + ary[i] = i; + } +} diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c index 87219c88fac..f549cbadfa7 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c @@ -5,6 +5,9 @@ /* { dg-additional-options "--param=openacc-kernels=decompose" } { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + /* See also '../../gfortran.dg/goacc/kernels-decompose-1.f95'. */ /* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c index 0681b4323a5..f5f6a7e3e8b 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c @@ -5,6 +5,9 @@ /* { dg-additional-options "--param=openacc-kernels=decompose" } /* { dg-additional-options "-O2" } for 'parloops'. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + /* See also '../../gfortran.dg/goacc/kernels-decompose-2.f95'. */ /* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' @@ -116,7 +119,8 @@ main () b[j] = f_w (c[j]); } -#pragma acc kernels /* { dg-warning "region contains gang partitioned code but is not gang partitioned" } */ +#pragma acc kernels + /* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'kernels'" { xfail *-*-* } .-1 } */ { y = f_g (a[5]); /* { dg-line l_part[incr c_part] } */ /*TODO If such a construct is placed in its own part (like it is, here), can't this actually use gang paralelism, instead of "gang-single"? diff --git a/gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c b/gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c index 6cdbebe0128..6b1e7b22451 100644 --- a/gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c +++ b/gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c @@ -1,13 +1,19 @@ /* Valid use of OpenACC parallelism dimensions clauses: num_gangs, num_workers, vector_length. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + void f(int i) { #pragma acc kernels \ num_gangs(i) num_workers(i) vector_length(i) ; -#pragma acc parallel /* { dg-bogus "region is (gang|worker|vector) partitioned" "" { xfail *-*-* } } */ \ - num_gangs(i) num_workers(i) vector_length(i) +#pragma acc parallel num_gangs(i) num_workers(i) vector_length(i) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO runtime" { xfail *-*-* } .-1 } + { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO runtime" { xfail *-*-* } .-2 } + { dg-bogus "warning: region is vector partitioned but does not contain vector partitioned code" "TODO runtime" { xfail *-*-* } .-3 } + TODO 'region is [...] partitioned' isn't correct for 'i == 1'. */ ; } diff --git a/gcc/testsuite/c-c++-common/goacc/parallel-reduction.c b/gcc/testsuite/c-c++-common/goacc/parallel-reduction.c index 9a142c4e02d..c5c0edc98ee 100644 --- a/gcc/testsuite/c-c++-common/goacc/parallel-reduction.c +++ b/gcc/testsuite/c-c++-common/goacc/parallel-reduction.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + int main () { @@ -6,7 +9,8 @@ main () #pragma acc data copy (dummy) { -#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum) /* { dg-warning "gang partitioned" } */ +#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ { int v = 5; sum += 10 + v; diff --git a/gcc/testsuite/c-c++-common/goacc/pr70688.c b/gcc/testsuite/c-c++-common/goacc/pr70688.c index 3f5584a503e..e96a8530772 100644 --- a/gcc/testsuite/c-c++-common/goacc/pr70688.c +++ b/gcc/testsuite/c-c++-common/goacc/pr70688.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + const int n = 100; int @@ -21,7 +24,8 @@ parallel_reduction () #pragma acc data copy (dummy) { -#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum) /* { dg-warning "region is gang partitioned" } */ +#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ { int v = 5; sum += 10 + v; @@ -36,11 +40,13 @@ main () { int i, s = 0; -#pragma acc parallel num_gangs (10) copy (s) reduction (+:s) /* { dg-warning "region is gang partitioned" } */ +#pragma acc parallel num_gangs (10) copy (s) reduction (+:s) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ for (i = 0; i < n; i++) s += i+1; -#pragma acc parallel num_gangs (10) reduction (+:s) copy (s) /* { dg-warning "region is gang partitioned" } */ +#pragma acc parallel num_gangs (10) reduction (+:s) copy (s) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ for (i = 0; i < n; i++) s += i+1; diff --git a/gcc/testsuite/c-c++-common/goacc/routine-1.c b/gcc/testsuite/c-c++-common/goacc/routine-1.c index e32398d3649..a11e602db36 100644 --- a/gcc/testsuite/c-c++-common/goacc/routine-1.c +++ b/gcc/testsuite/c-c++-common/goacc/routine-1.c @@ -1,17 +1,24 @@ -/* Test valid use of clauses with routine. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ #pragma acc routine gang -void gang (void) /* { dg-warning "partitioned" 3 } */ +/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .+3 } + { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 } + { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */ +void gang (void) { } #pragma acc routine worker -void worker (void) /* { dg-warning "partitioned" 2 } */ +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 } + { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */ +void worker (void) { } #pragma acc routine vector -void vector (void) /* { dg-warning "partitioned" 1 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */ +void vector (void) { } diff --git a/gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c b/gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c index d40cdadb3d8..0e0e4a728f0 100644 --- a/gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c +++ b/gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c @@ -2,8 +2,14 @@ with the OpenACC 'routine' directive. The Fortran counterpart is '../../gfortran.dg/goacc/routine-level-of-parallelism-1.f90'. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #pragma acc routine gang -void g_1 (void) /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" } */ +/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .+3 } + { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 } + { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */ +void g_1 (void) { /* { dg-bogus "region is worker partitioned but does not contain worker partitioned code" "" { xfail *-*-* } .-2 } */ /* { dg-bogus "region is vector partitioned but does not contain vector partitioned code" "" { xfail *-*-* } .-3 } */ diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c index 45df2d61efb..9ff305f9acc 100644 --- a/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c +++ b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c @@ -1,20 +1,23 @@ /* { dg-additional-options "-Wuninitialized" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + void acc_parallel() { int i, j, k; - #pragma acc parallel loop gang num_gangs(i) /* { dg-warning "is used uninitialized" } */ - for (i = 0; i < 1; i++) - ; + #pragma acc parallel num_gangs(i) /* { dg-warning "is used uninitialized" } */ + /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */ + ; - #pragma acc parallel loop worker num_workers(j) /* { dg-warning "is used uninitialized" } */ - for (j = 0; j < 1; j++) - ; + #pragma acc parallel num_workers(j) /* { dg-warning "is used uninitialized" } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + ; - #pragma acc parallel loop vector vector_length(k) /* { dg-warning "is used uninitialized" } */ - for (k = 0; k < 1; k++) - ; + #pragma acc parallel vector_length(k) /* { dg-warning "is used uninitialized" } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ + ; } void acc_kernels() diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95 index d6126f2b7f1..7abf12f3d58 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95 @@ -8,6 +8,9 @@ ! { dg-additional-options "-fdump-tree-parloops1-all" } ! { dg-additional-options "-fdump-tree-oaccloops" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program main implicit none integer, parameter :: n = 1024 diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95 index 39516f84cd6..fb19a98d8a5 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95 @@ -8,6 +8,9 @@ ! { dg-additional-options "-fdump-tree-parloops1-all" } ! { dg-additional-options "-fdump-tree-oaccloops" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program main implicit none integer, parameter :: n = 1024 diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95 index 20bbdb0fbd3..ce4c08ff219 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95 @@ -6,6 +6,9 @@ ! { dg-additional-options "-fdump-tree-ompexp" } ! { dg-additional-options "-fdump-tree-oaccloops" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program main implicit none integer, parameter :: n = 1024 diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 index ed24cee10d8..02c929d31a0 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 @@ -6,6 +6,9 @@ ! { dg-additional-options "-fdump-tree-ompexp" } ! { dg-additional-options "-fdump-tree-oaccloops" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + subroutine ROUTINE !$acc routine worker integer, parameter :: n = 1024 diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-serial.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-serial.f95 index 16d415406f3..1e949fa47f3 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-serial.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-serial.f95 @@ -6,6 +6,9 @@ ! { dg-additional-options "-fdump-tree-ompexp" } ! { dg-additional-options "-fdump-tree-oaccloops" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program main implicit none integer, parameter :: n = 1024 @@ -15,6 +18,9 @@ program main call setup(a, b) !$acc serial loop copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1)) ! { dg-message "optimized: assigned OpenACC gang vector loop parallelism" } + ! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 } + ! { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 } + ! { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 } do i = 0, n - 1 c(i) = a(i) + b(i) end do diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95 index e2523504ef5..ddaf7f8e43d 100644 --- a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95 @@ -5,6 +5,9 @@ ! { dg-additional-options "--param=openacc-kernels=decompose" } ! { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! See also '../../c-c++-common/goacc/kernels-decompose-1.c'. ! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95 index 20310b61e09..7c3e4a70e71 100644 --- a/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95 @@ -5,6 +5,9 @@ ! { dg-additional-options "--param=openacc-kernels=decompose" } ! { dg-additional-options "-O2" } for 'parloops'. +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! See also '../../c-c++-common/goacc/kernels-decompose-2.c'. ! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' @@ -117,7 +120,8 @@ program main end if !$acc end kernels - !$acc kernels ! { dg-warning "region contains gang partitioned code but is not gang partitioned" } + !$acc kernels + ! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'kernels'" { xfail *-*-* } .-1 } y = f_g (a(5)) ! { dg-line l_part[incr c_part] } !TODO If such a construct is placed in its own part (like it is, here), can't this actually use gang paralelism, instead of "gang-single"? ! { dg-message "note: beginning 'gang-single' part in OpenACC 'kernels' region" "" { target *-*-* } l_part$c_part } diff --git a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 index 83aaf699cdb..c51cb2a0504 100644 --- a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 @@ -2,6 +2,9 @@ ! test for tree-dump-original and spaces-commas +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program test implicit none integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-4.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-4.f90 index 3fb60e71ae0..1ae76ce21eb 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-4.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-4.f90 @@ -1,5 +1,8 @@ ! Test invalid calls to routines. +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + module param integer, parameter :: N = 32 end module param diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 index 9986c0c8d50..99929f136f6 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 @@ -2,10 +2,14 @@ ! with the OpenACC routine directive. The C/C++ counterpart is ! '../../c-c++-common/goacc/routine-level-of-parallelism-2.c'. -subroutine g_1 ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + +subroutine g_1 !$acc routine gang -! { dg-bogus "region is worker partitioned but does not contain worker partitioned code" "worker partitioned" { xfail *-*-* } .-2 } -! { dg-bogus "region is vector partitioned but does not contain vector partitioned code" "worker partitioned" { xfail *-*-* } .-3 } + ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-2 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } end subroutine g_1 subroutine s_1_2a diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90 index 2ea4094927d..b7770752605 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90 @@ -2,6 +2,9 @@ ! { dg-additional-options "-fopt-info-optimized-omp" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + module routine_module_mod_1 contains subroutine s_1 @@ -53,6 +56,7 @@ contains subroutine g_1 ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" } implicit none !$acc routine gang + ! { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .-3 } integer :: i diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90 index e39f6b58b25..622a9d9ccce 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90 @@ -1,5 +1,8 @@ ! Check for valid cases of multiple OpenACC 'routine' directives. +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + SUBROUTINE s_1 !$ACC ROUTINE(s_1) !$ACC ROUTINE(s_1) SEQ @@ -12,17 +15,19 @@ !$ACC ROUTINE(s_2) END SUBROUTINE s_2 - SUBROUTINE v_1 ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" } + SUBROUTINE v_1 !$ACC ROUTINE VECTOR !$ACC ROUTINE VECTOR !$ACC ROUTINE(v_1) VECTOR !$ACC ROUTINE VECTOR +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-5 } END SUBROUTINE v_1 - SUBROUTINE v_2 ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" } + SUBROUTINE v_2 !$ACC ROUTINE(v_2) VECTOR !$ACC ROUTINE VECTOR !$ACC ROUTINE(v_2) VECTOR +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } END SUBROUTINE v_2 SUBROUTINE sub_1 diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 index 15466cf8a51..59e923f90fb 100644 --- a/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 @@ -1,23 +1,23 @@ ! { dg-additional-options "-Wuninitialized" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + subroutine acc_parallel implicit none integer :: i, j, k - !$acc parallel loop gang num_gangs(i) ! { dg-warning "is used uninitialized" } - do i = 0, 1 - end do - !$acc end parallel loop + !$acc parallel num_gangs(i) ! { dg-warning "is used uninitialized" } + ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } + !$acc end parallel - !$acc parallel loop worker num_workers(j) ! { dg-warning "is used uninitialized" } - do j = 0, 1 - end do - !$acc end parallel loop + !$acc parallel num_workers(j) ! { dg-warning "is used uninitialized" } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } + !$acc end parallel - !$acc parallel loop vector vector_length(k) ! { dg-warning "is used uninitialized" } - do k = 0, 1 - end do - !$acc end parallel loop + !$acc parallel vector_length(k) ! { dg-warning "is used uninitialized" } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } + !$acc end parallel end subroutine acc_parallel subroutine acc_kernels diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index f74d92a6741..08a8ed0637a 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,43 @@ +2021-04-30 Kwok Cheung Yeung + + Backport from mainline + 2021-04-23 Thomas Schwinge + + * testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Specify + '-Wopenacc-parallelism', and match diagnostics, as appropriate. + * testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/mode-transitions.c: + Likewise. + * testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c: + Likewise. + * testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/private-variables.c: + Likewise. + * testsuite/libgomp.oacc-c-c++-common/reduction-5.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/routine-g-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/routine-w-1.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Likewise. + * testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: + Likewise. + * testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise. + * testsuite/libgomp.oacc-fortran/par-reduction-2-1.f: Likewise. + * testsuite/libgomp.oacc-fortran/par-reduction-2-2.f: Likewise. + * testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise. + * testsuite/libgomp.oacc-fortran/parallel-reduction.f90: Likewise. + * testsuite/libgomp.oacc-fortran/pr84028.f90: Likewise. + * testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise. + * testsuite/libgomp.oacc-fortran/reduction-1.f90: Likewise. + * testsuite/libgomp.oacc-fortran/reduction-5.f90: Likewise. + * testsuite/libgomp.oacc-fortran/reduction-6.f90: Likewise. + * testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise. + 2021-04-30 Kwok Cheung Yeung Backport from mainline diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c index 14bc3af4a97..0990e3db224 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include @@ -117,8 +120,8 @@ void t4 () arr[i] = 3; #pragma acc parallel firstprivate(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 119 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 119 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang for (i = 0; i < 32; i++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c index 426c44c0a1f..41827559297 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c @@ -3,6 +3,9 @@ /* { dg-additional-options "-fopenacc-dim=32" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -150,7 +153,8 @@ int gang_1 (int *ary, int size) { clear (ary, size); -#pragma acc parallel num_gangs (32) num_workers (32) vector_length(32) copy(ary[0:size]) firstprivate (size)/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } } */ +#pragma acc parallel num_gangs (32) num_workers (32) vector_length(32) copy(ary[0:size]) firstprivate (size) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop auto independent for (int jx = 0; jx < size / 64; jx++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c index 7344fa8bf00..2f749e04ae0 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c @@ -1,4 +1,6 @@ -/* { dg-additional-options "-w" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -13,6 +15,7 @@ int main () #pragma acc parallel num_workers(32) vector_length(32) copy(ondev) \ copyout(workersize) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop worker reduction(+:t) for (unsigned ix = 0; ix < N; ix++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c index d99877ab8a9..9727e22d3c2 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c @@ -1,4 +1,6 @@ -/* { dg-additional-options "-w" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -13,6 +15,7 @@ int main () #pragma acc parallel num_workers(32) vector_length(32) copy(q) copy(ondev) \ copyout(workersize) + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int t = q; diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c index 8731c805b79..d639e14a67c 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -16,7 +19,7 @@ int main () #pragma acc parallel num_workers(32) vector_length(32) copy(ary) copy(ondev) \ copyout(workersize) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 17 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } .-2 } */ { #pragma acc loop worker for (unsigned ix = 0; ix < N; ix++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c index f62daf031a0..6c989abedf5 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + /* Miscellaneous test cases for gang/worker/vector mode transitions. */ #include @@ -287,7 +290,7 @@ void t7() int n = 0; #pragma acc parallel copy(n) \ num_gangs(1) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 288 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { n++; } @@ -311,7 +314,7 @@ void t8() #pragma acc parallel copy(arr) \ num_gangs(gangs) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 312 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -341,7 +344,7 @@ void t9() #pragma acc parallel copy(arr) \ num_gangs(gangs) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 342 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -374,7 +377,7 @@ void t10() #pragma acc parallel copy(arr) \ num_gangs(gangs) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 375 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -408,7 +411,7 @@ void t11() #pragma acc parallel copy(arr) \ num_gangs(1024) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 409 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; @@ -447,7 +450,7 @@ void t12() #pragma acc parallel copyout(fizz, buzz, fizzbuzz) \ num_gangs(NUM_GANGS) num_workers(1) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 448 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; @@ -494,7 +497,7 @@ void t13() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 495 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -620,7 +623,7 @@ void t16() #pragma acc parallel copy(n, arr) \ num_gangs(8) num_workers(16) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 621 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -673,7 +676,7 @@ void t17() #pragma acc parallel copyin(arr_a) copyout(arr_b) \ num_gangs(num_gangs) num_workers(num_workers) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 674 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -891,8 +894,8 @@ void t21() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 892 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 892 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */ { int j; #pragma acc loop gang @@ -916,8 +919,8 @@ void t22() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 917 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 917 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */ { int j; #pragma acc loop gang @@ -944,8 +947,8 @@ void t23() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 945 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 945 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */ { int j; #pragma acc loop gang @@ -972,8 +975,8 @@ void t24() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 973 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 973 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */ { int j; #pragma acc loop gang @@ -1005,7 +1008,7 @@ void t25() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 1006 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -1038,7 +1041,7 @@ void t26() #pragma acc parallel copy(arr) \ num_gangs(8) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 1039 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ { int j; #pragma acc loop gang @@ -1089,8 +1092,8 @@ void t27() #pragma acc parallel copy(n, arr) copyout(ondev) \ num_gangs(ACTUAL_GANGS) num_workers(8) vector_length(32) - /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "gang" { target *-*-* } 1090 } */ - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 1090 } */ + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .-2 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */ { int j; diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c index 0c1ecc68e9d..8157cff109a 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include /* Test of reduction on parallel directive. */ @@ -16,6 +19,9 @@ main (int argc, char *argv[]) #endif #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \ reduction(+:res1) copy(res2, res1) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */ { res1 += 5; @@ -37,6 +43,9 @@ main (int argc, char *argv[]) #endif #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \ reduction(*:res1) copy(res1, res2) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */ { res1 *= 5; diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c index e3ed281610d..8b7900e66ff 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c @@ -1,6 +1,9 @@ /* Test of reduction on parallel directive (with async). */ /* See also Fortran variants in "../libgomp.oacc-fortran/par-reduction-2*". */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include @@ -16,6 +19,9 @@ main (int argc, char *argv[]) #endif #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \ reduction(+:res1) copy(res1, res2) async(1) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */ { res1 += 5; @@ -39,6 +45,9 @@ main (int argc, char *argv[]) #endif #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \ reduction(*:res1) copy(res1, res2) async(1) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */ { res1 *= 5; diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c index 511bedb9f81..99d4333cdc8 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c @@ -1,6 +1,9 @@ /* OpenACC parallelism dimensions clauses: num_gangs, num_workers, vector_length. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + /* See also '../libgomp.oacc-fortran/parallel-dims.f90'. */ #include @@ -105,6 +108,7 @@ int main () gangs_max = workers_max = vectors_max = INT_MIN; #pragma acc parallel copy (gangs_actual) /* { dg-warning "region contains gang partitioned code but is not gang partitioned" } */ \ num_gangs (GANGS) /* { dg-warning "'num_gangs' value must be positive" "" { target c++ } } */ + /* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-2 } */ { /* We're actually executing with num_gangs (1). */ gangs_actual = 1; @@ -134,6 +138,7 @@ int main () gangs_max = workers_max = vectors_max = INT_MIN; #pragma acc parallel copy (workers_actual) /* { dg-warning "region contains worker partitioned code but is not worker partitioned" } */ \ num_workers (WORKERS) /* { dg-warning "'num_workers' value must be positive" "" { target c++ } } */ + /* { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 } */ { /* We're actually executing with num_workers (1). */ workers_actual = 1; @@ -164,6 +169,7 @@ int main () #pragma acc parallel copy (vectors_actual) /* { dg-warning "region contains vector partitioned code but is not vector partitioned" } */ \ /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } 164 } */ \ vector_length (VECTORS) /* { dg-warning "'vector_length' value must be positive" "" { target c++ } } */ + /* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } .-2 } */ { /* We're actually executing with vector_length (1), just the GCC nvptx back end enforces vector_length (32). */ @@ -209,6 +215,7 @@ int main () #pragma acc parallel copy (gangs_actual) /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" } */ \ reduction (min: gangs_min, workers_min, vectors_min) reduction (max: gangs_max, workers_max, vectors_max) \ num_gangs (gangs) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-3 } */ { if (acc_on_device (acc_device_host)) { @@ -615,10 +622,9 @@ int main () gangs_max = workers_max = vectors_max = INT_MIN; #pragma acc serial copy (vectors_actual) \ copy (gangs_min, gangs_max, workers_min, workers_max, vectors_min, vectors_max) - /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } 616 } */ - /* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } 616 } */ - /* { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } 616 } */ - /* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } 616 } */ + /* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-2 } + { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "TODO 'serial'" { xfail *-*-* } .-3 } + { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-4 } */ { if (acc_on_device (acc_device_nvidia)) { diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c index 80745816fff..b15ee8b22ff 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ #include #include @@ -15,6 +16,7 @@ main () #pragma acc data copy (dummy) { #pragma acc parallel num_gangs (N) reduction (+:s1) copy(s1) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ { s1++; } @@ -35,6 +37,7 @@ main () s2 = 0; #pragma acc parallel num_gangs (10) reduction (+:s1, s2) copy(s1, s2) + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */ { s1++; s2 += N; diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c index 53fb049f992..10a4116676b 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c @@ -2,10 +2,14 @@ { dg-skip-if "" { *-*-* } { "*" } { "-O2" } } */ /* { dg-additional-options "-foffload=-fdump-rtl-mach -w" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + int a; #pragma acc declare create(a) #pragma acc routine vector +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */ void __attribute__((noinline, noclone)) foo_v (void) { @@ -13,6 +17,8 @@ foo_v (void) } #pragma acc routine worker +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } + { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */ void __attribute__((noinline, noclone)) foo_w (void) { diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c index f0c3447dfef..3cc6f150f63 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include @@ -22,8 +25,8 @@ void local_g_1() arr[i] = 3; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 24 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 24 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { int x; @@ -297,8 +300,8 @@ void loop_g_1() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 299 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 299 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang private(x) for (i = 0; i < 32; i++) @@ -324,7 +327,7 @@ void loop_g_2() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 326 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang private(x) for (i = 0; i < 32; i++) @@ -353,7 +356,7 @@ void loop_g_3() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 355 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang private(x) for (i = 0; i < 32; i++) @@ -382,7 +385,7 @@ void loop_g_4() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 384 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang private(x) for (i = 0; i < 32; i++) @@ -415,7 +418,7 @@ void loop_g_5() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 417 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang private(x) for (i = 0; i < 32; i++) @@ -446,7 +449,7 @@ void loop_g_6() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 448 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang private(pt) for (i = 0; i < 32; i++) @@ -568,7 +571,7 @@ void loop_w_1() arr[i] = i; #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 570 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { int j; @@ -885,8 +888,8 @@ void parallel_g_1() arr[i] = 3; #pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 887 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 887 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang(static:1) for (i = 0; i < 32; i++) @@ -916,7 +919,7 @@ void parallel_g_2() arr[i] = i; #pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(2) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 918 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang for (i = 0; i < 32; i++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c index 1cec9f152c4..bae1dee6ad2 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ /* Multiple reductions. */ @@ -45,6 +46,7 @@ main (void) /* Nvptx targets require a vector_length or 32 in to allow spinlocks with gangs. */ check_reduction (num_workers (nw) vector_length (vl), worker); + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ check_reduction (vector_length (vl), vector); check_reduction (num_gangs (ng) num_workers (nw) vector_length (vl), gang worker vector); diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c index 68ae919ea6f..c2fb922a7f1 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c @@ -1,5 +1,8 @@ /* Tests of reduction on loop directive. */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include @@ -14,8 +17,8 @@ void g_np_1() arr[i] = i; #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 16 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 16 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang reduction(+:res) for (i = 0; i < 1024; i++) @@ -30,8 +33,8 @@ void g_np_1() res = hres = 1; #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 32 } */ - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 32 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang reduction(*:res) for (i = 0; i < 12; i++) @@ -56,7 +59,7 @@ void gv_np_1() arr[i] = i; #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 58 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang vector reduction(+:res) for (i = 0; i < 1024; i++) @@ -81,7 +84,7 @@ void gw_np_1() arr[i] = i; #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 83 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop gang worker reduction(+:res) for (i = 0; i < 1024; i++) @@ -245,7 +248,7 @@ void v_p_1() #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \ private(res) copyout(out) - /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 246 } */ + /* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang for (j = 0; j < 32; j++) @@ -322,7 +325,7 @@ void w_p_1() #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \ private(res) copyout(out) - /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 323 } */ + /* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang for (j = 0; j < 32; j++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c index 8c3b938506f..1536ce0ecb2 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -6,8 +9,8 @@ #pragma acc routine gang void __attribute__ ((noinline)) gang (int ary[N]) -/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 8 } */ -/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 8 } */ +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */ { #pragma acc loop gang for (unsigned ix = 0; ix < N; ix++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c index bf9228105c5..b9137d81935 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -6,7 +9,7 @@ #pragma acc routine worker void __attribute__ ((noinline)) worker (int ary[N]) -/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 8 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */ { #pragma acc loop worker for (unsigned ix = 0; ix < N; ix++) diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c index de167c55c76..74b64df2d6c 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c @@ -1,3 +1,6 @@ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #include #include #include @@ -45,6 +48,7 @@ int DoWorkVec (int nw) /* { dg-warning "region contains vector partitioned code but is not vector partitioned" "vector" { target openacc_radeon_accel_selected } 47 } */ #pragma acc parallel num_workers(nw) vector_length (NUM_VECTORS) copy (ary) + /* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target openacc_radeon_accel_selected } .-1 } */ { WorkVec ((int *)ary, WIDTH, HEIGHT, nw, NUM_VECTORS); } diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c index ccc0336bae3..0c071c37346 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c @@ -9,7 +9,9 @@ variables" (only visible to members of the GitHub OpenACC organization). */ -/* { dg-additional-options "-w" } */ +/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting + aspects of that functionality. */ + #undef NDEBUG #include @@ -64,6 +66,9 @@ static void t0_c(void) static const int t0_r_var_init = 61; #pragma acc routine gang +/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */ +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */ __attribute__((noinline)) static int t0_r_r(void) { @@ -124,6 +129,7 @@ static void t1_c(void) { int result = 0; int num_gangs_actual = -1; + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */ #pragma acc parallel \ num_gangs(num_gangs_request) \ reduction(max:num_gangs_actual) \ @@ -154,6 +160,9 @@ static void t1_c(void) static const int t1_r2_var_init = 166; #pragma acc routine gang +/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */ +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */ __attribute__((noinline)) static int t1_r2_r(void) { @@ -246,6 +255,9 @@ static void t1_r2(void) static const int t2_var_init_2 = -55; #pragma acc routine gang +/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */ +/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */ +/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */ __attribute__((noinline)) static int t2_r(void) { @@ -287,6 +299,7 @@ static void t2(void) itself, meaning that all 'i = 0' execution has finished (on the device) before 'i = 1' is started (on the device), etc. */ + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */ #pragma acc parallel \ present(results_1) \ num_gangs(num_gangs_request_1) \ @@ -309,6 +322,7 @@ static void t2(void) results_2[i][__builtin_goacc_parlevel_id(GOMP_DIM_GANG)] += t2_r(); } + /* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */ #pragma acc parallel \ present(results_3) \ num_gangs(num_gangs_request_3) \ diff --git a/libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90 b/libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90 index 6bc91b7a0bb..4d36d869b0c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90 @@ -4,6 +4,9 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program main implicit none @@ -30,8 +33,8 @@ contains end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 32 } - ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 32 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } !$acc loop gang private(x) do i = 1, 32 x = i * 2; @@ -57,7 +60,7 @@ contains end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 59 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } !$acc loop gang private(pt) do i = 0, 31 pt%x = i diff --git a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f index ff31116d980..408404cb7e6 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f +++ b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f @@ -4,6 +4,9 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for +! testing/documenting aspects of that functionality. + PROGRAM MAIN IMPLICIT NONE INCLUDE "openacc_lib.h" @@ -14,7 +17,10 @@ RES2 = 0 !$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32) -!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1) ! { dg-warning "region is (gang|worker|vector) partitioned" } +!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1) +! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 } +! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } res1 = res1 + 5 !$ACC ATOMIC @@ -36,7 +42,10 @@ RES2 = 1 !$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32) -!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1) ! { dg-warning "region is (gang|worker|vector) partitioned" } +!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1) +! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 } +! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } res1 = res1 * 5 !$ACC ATOMIC diff --git a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f index 47c5ff3474d..91ad99b256f 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f +++ b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f @@ -4,6 +4,9 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for +! testing/documenting aspects of that functionality. + PROGRAM MAIN USE OPENACC IMPLICIT NONE @@ -14,7 +17,10 @@ RES2 = 0 !$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32) -!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1) ! { dg-warning "region is (gang|worker|vector) partitioned" } +!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1) +! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 } +! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } res1 = res1 + 5 !$ACC ATOMIC @@ -36,7 +42,10 @@ RES2 = 1 !$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32) -!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1) ! { dg-warning "region is (gang|worker|vector) partitioned" } +!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1) +! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 } +! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } +! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } res1 = res1 * 5 !$ACC ATOMIC diff --git a/libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90 b/libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90 index 0a7463a95ac..fae99b338a5 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90 @@ -5,6 +5,9 @@ ! { dg-do run } ! { dg-prune-output "command-line option '-fintrinsic-modules-path=.*' is valid for Fortran but not for C" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! See also '../libgomp.oacc-c-c++-common/parallel-dims.c'. module acc_routines @@ -83,11 +86,10 @@ program main workers_max = -huge(gangs_max) - 1 ! INT_MIN vectors_max = -huge(gangs_max) - 1 ! INT_MIN !$acc serial copy (vectors_actual) & - !$acc copy (gangs_min, gangs_max, workers_min, workers_max, vectors_min, vectors_max) - ! { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } 86 } - ! { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } 86 } - ! { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } 86 } - ! { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } 86 } + !$acc copy (gangs_min, gangs_max, workers_min, workers_max, vectors_min, vectors_max) ! { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } } + ! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 } + ! { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "TODO 'serial'" { xfail *-*-* } .-2 } + ! { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 } if (acc_on_device (acc_device_nvidia)) then ! The GCC nvptx back end enforces vector_length (32). ! It's unclear if that's actually permissible here; diff --git a/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 index b926f4fe898..edf748efbb4 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 @@ -1,5 +1,8 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program reduction implicit none integer, parameter :: n = 10 @@ -10,6 +13,7 @@ program reduction s2 = 0 !$acc parallel reduction(+:s1,s2) num_gangs (n) copy(s1) + ! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } s1 = s1 + 1 s2 = s2 + 1 !$acc end parallel @@ -40,6 +44,7 @@ subroutine redsub(s1, s2, n) integer :: s1, s2, n !$acc parallel reduction(+:s1,s2) num_gangs (10) copy(s1) + ! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } s1 = s1 + 1 s2 = s2 + 1 !$acc end parallel diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 index 8cb76a93d7f..e60322143ca 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 @@ -1,11 +1,15 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program foo integer :: a(3,3,3), ll, lll a = 1 - !$acc parallel num_gangs(1) num_workers(2) ! { dg-warning "region is worker partitioned" } + !$acc parallel num_gangs(1) num_workers(2) + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } if (any(a(1:3,1:3,1:3).ne.1)) STOP 1 diff --git a/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 b/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 index fbff5ccd46e..81043a22fd8 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 @@ -2,6 +2,9 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! Test of gang-private variables declared on loop directive. @@ -13,8 +16,8 @@ subroutine t1() end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 15 } - ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 15 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } !$acc loop gang private(x) do i = 1, 32 x = i * 2; @@ -39,7 +42,7 @@ subroutine t2() end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 41 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } !$acc loop gang private(x) do i = 0, 31 x = i * 2; @@ -68,7 +71,7 @@ subroutine t3() end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 70 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } !$acc loop gang private(x) do i = 0, 31 x = i * 2; @@ -102,7 +105,7 @@ subroutine t4() end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 104 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } !$acc loop gang private(pt) do i = 0, 31 pt%x = i @@ -213,7 +216,7 @@ subroutine t7() end do !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32) - ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 215 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } !$acc loop gang private(x) do i = 0, 31 !$acc loop worker private(x) @@ -513,8 +516,8 @@ subroutine t14() end do !$acc parallel private(x) copy(arr) num_gangs(n) num_workers(8) vector_length(32) - ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "worker" { target *-*-* } 515 } - ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } 515 } + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } !$acc loop gang(static:1) do i = 1, n x = i * 2; diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 index 40c1a86ab92..95c3ed7ee9c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 @@ -1,5 +1,8 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! Integer reductions program reduction_1 @@ -279,6 +282,7 @@ program reduction_1 !$acc end parallel !$acc parallel vector_length(vl) copy(rv) + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } !$acc loop reduction(ior:rv) gang do i = 1, n rv = ior (rv, array(i)) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 index a529e22d9a2..5d1c1d99fce 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 @@ -1,5 +1,8 @@ ! { dg-do run } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + ! subroutine reduction program reduction @@ -45,6 +48,7 @@ subroutine redsub_worker(sum, n, c) sum = 0 !$acc parallel copyin (n, c) num_workers(4) vector_length (32) copy(sum) + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } !$acc loop reduction(+:sum) worker do i = 1, n sum = sum + c diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 index 249ed2edcbc..6908d16418c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 @@ -1,6 +1,9 @@ ! { dg-do run } ! { dg-additional-options "-cpp" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. + program reduction implicit none @@ -28,6 +31,7 @@ program reduction !$acc end parallel !$acc parallel num_workers (4) vector_length (32) + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } !$acc loop reduction(+:ws1, ws2) worker do i = 1, n ws1 = ws1 + 1 diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 index 005d90b74fd..43622e3965a 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 @@ -1,6 +1,10 @@ ! { dg-do run } ! { dg-additional-options "-cpp" } +! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting +! aspects of that functionality. +!TODO { dg-additional-options "-fno-inline" } for stable results regarding OpenACC 'routine'. + #define M 8 #define N 32 @@ -96,6 +100,8 @@ end subroutine worker subroutine gang (a) !$acc routine gang + ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } + ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } integer, intent (inout) :: a(N) integer :: i