Hi Gergő! On Fri, 25 Jan 2019 15:18:56 +0100, Gergö Barany <ge...@codesourcery.com> wrote: > On OpenACC loop constructs, it is OK according to the OpenACC spec to > have both the "auto" clause and one or more of the "gang", "worker", or > "vector" clauses. GCC emits errors for this combination; this patch > eliminates that error.
Right. As I'd mentioned internally, there might be more such things to be fixed, which we shall re-visit later. That said, your change is valid as is, so... > OK for openacc-gcc-8-branch? OK. Grüße Thomas > From d8e7f1826d423de05e11afcb6e422ccaced0f6ea Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Gerg=C3=B6=20Barany?= <ge...@codesourcery.com> > Date: Wed, 23 Jan 2019 03:10:07 -0800 > Subject: [PATCH] Remove spurious OpenACC error on combining "auto" with > gang/worker/vector > > gcc/ > * omp-low.c (check_oacc_kernel_gwv): Remove spurious error message. > * omp-offload.c (oacc_loop_fixed_partitions): Likewise. > > gcc/testsuite/ > * c-c++-common/goacc/combined-directives-3.c: Adjust test. > * c-c++-common/goacc/loop-2-kernels.c: Likewise. > * c-c++-common/goacc/loop-2-parallel.c: Likewise. > --- > gcc/ChangeLog.openacc | 5 +++++ > gcc/omp-low.c | 3 --- > gcc/omp-offload.c | 7 ++----- > gcc/testsuite/ChangeLog.openacc | 6 ++++++ > gcc/testsuite/c-c++-common/goacc/combined-directives-3.c | 4 ++-- > gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c | 12 ++++++------ > gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c | 12 ++++++------ > 7 files changed, 27 insertions(+), 22 deletions(-) > > diff --git a/gcc/ChangeLog.openacc b/gcc/ChangeLog.openacc > index 932fb37..f3c741c 100644 > --- a/gcc/ChangeLog.openacc > +++ b/gcc/ChangeLog.openacc > @@ -1,5 +1,10 @@ > 2019-01-24 Gergö Barany <ge...@codesourcery.com> > > + * omp-low.c (check_oacc_kernel_gwv): Remove spurious error message. > + * omp-offload.c (oacc_loop_fixed_partitions): Likewise. > + > +2019-01-24 Gergö Barany <ge...@codesourcery.com> > + > * gimplify.c (oacc_default_clause): Refactor and unify computation of > default mapping clauses. > > diff --git a/gcc/omp-low.c b/gcc/omp-low.c > index 72b6548..f48002e 100644 > --- a/gcc/omp-low.c > +++ b/gcc/omp-low.c > @@ -2397,9 +2397,6 @@ check_oacc_kernel_gwv (gomp_for *stmt, omp_context *ctx) > if (has_seq && (this_mask || has_auto)) > error_at (gimple_location (stmt), "%<seq%> overrides other" > " OpenACC loop specifiers"); > - else if (has_auto && this_mask) > - error_at (gimple_location (stmt), "%<auto%> conflicts with other" > - " OpenACC loop specifiers"); > > if (this_mask & outer_mask) > error_at (gimple_location (stmt), "inner loop uses same" > diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c > index d428c6f..57a7a06 100644 > --- a/gcc/omp-offload.c > +++ b/gcc/omp-offload.c > @@ -1211,14 +1211,11 @@ oacc_loop_fixed_partitions (oacc_loop *loop, unsigned > outer_mask) > bool maybe_auto > = !seq_par && this_mask == (tiling ? this_mask & -this_mask : 0); > > - if ((this_mask != 0) + auto_par + seq_par > 1) > + if (seq_par && (this_mask != 0 || auto_par)) > { > if (noisy) > error_at (loop->loc, > - seq_par > - ? G_("%<seq%> overrides other OpenACC loop specifiers") > - : G_("%<auto%> conflicts with other OpenACC loop " > - "specifiers")); > + G_("%<seq%> overrides other OpenACC loop specifiers")); > maybe_auto = false; > loop->flags &= ~OLF_AUTO; > if (seq_par) > diff --git a/gcc/testsuite/ChangeLog.openacc b/gcc/testsuite/ChangeLog.openacc > index 3bdce2e..3850d97 100644 > --- a/gcc/testsuite/ChangeLog.openacc > +++ b/gcc/testsuite/ChangeLog.openacc > @@ -1,3 +1,9 @@ > +2019-01-24 Gergö Barany <ge...@codesourcery.com> > + > + * c-c++-common/goacc/combined-directives-3.c: Adjust test. > + * c-c++-common/goacc/loop-2-kernels.c: Likewise. > + * c-c++-common/goacc/loop-2-parallel.c: Likewise. > + > 2019-01-09 Julian Brown <jul...@codesourcery.com> > > * c-c++-common/cpp/openacc-define-3.c: Update expected value for > diff --git a/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c > b/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c > index 77d4182..5aa84dc 100644 > --- a/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c > +++ b/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c > @@ -12,9 +12,9 @@ main () > for (y = 0; y < 10; y++) > ; > > -#pragma acc parallel loop gang auto /* { dg-error "'auto' conflicts with > other OpenACC loop specifiers" } */ > +#pragma acc parallel loop gang seq /* { dg-error "'seq' overrides other > OpenACC loop specifiers" } */ > for (x = 0; x < 10; x++) > -#pragma acc loop worker auto /* { dg-error "'auto' conflicts with other > OpenACC loop specifiers" } */ > +#pragma acc loop worker seq /* { dg-error "'seq' overrides other OpenACC > loop specifiers" } */ > for (y = 0; y < 10; y++) > #pragma acc loop vector > for (z = 0; z < 10; z++) > diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c > b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c > index 3a11ef5f..2608c12 100644 > --- a/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c > +++ b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c > @@ -106,13 +106,13 @@ void K(void) > #pragma acc loop seq auto // { dg-error "'seq' overrides" } > for (i = 0; i < 10; i++) > { } > -#pragma acc loop gang auto // { dg-error "'auto' conflicts" } > +#pragma acc loop gang auto > for (i = 0; i < 10; i++) > { } > -#pragma acc loop worker auto // { dg-error "'auto' conflicts" } > +#pragma acc loop worker auto > for (i = 0; i < 10; i++) > { } > -#pragma acc loop vector auto // { dg-error "'auto' conflicts" } > +#pragma acc loop vector auto > for (i = 0; i < 10; i++) > { } > } > @@ -177,13 +177,13 @@ void K(void) > #pragma acc kernels loop seq auto // { dg-error "'seq' overrides" } > for (i = 0; i < 10; i++) > { } > -#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" } > +#pragma acc kernels loop gang auto > for (i = 0; i < 10; i++) > { } > -#pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" } > +#pragma acc kernels loop worker auto > for (i = 0; i < 10; i++) > { } > -#pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" } > +#pragma acc kernels loop vector auto > for (i = 0; i < 10; i++) > { } > } > diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c > b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c > index 27f7bbd..457a894 100644 > --- a/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c > +++ b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c > @@ -90,13 +90,13 @@ void P(void) > #pragma acc loop seq auto // { dg-error "'seq' overrides" } > for (i = 0; i < 10; i++) > { } > -#pragma acc loop gang auto // { dg-error "'auto' conflicts" } > +#pragma acc loop gang auto > for (i = 0; i < 10; i++) > { } > -#pragma acc loop worker auto // { dg-error "'auto' conflicts" } > +#pragma acc loop worker auto > for (i = 0; i < 10; i++) > { } > -#pragma acc loop vector auto // { dg-error "'auto' conflicts" } > +#pragma acc loop vector auto > for (i = 0; i < 10; i++) > { } > > @@ -150,13 +150,13 @@ void P(void) > #pragma acc parallel loop seq auto // { dg-error "'seq' overrides" } > for (i = 0; i < 10; i++) > { } > -#pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" } > +#pragma acc parallel loop gang auto > for (i = 0; i < 10; i++) > { } > -#pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" } > +#pragma acc parallel loop worker auto > for (i = 0; i < 10; i++) > { } > -#pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" } > +#pragma acc parallel loop vector auto > for (i = 0; i < 10; i++) > { } > }