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.

OK for openacc-gcc-8-branch?

Thanks,
Gergö


    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.
>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++)
     { }
 }
-- 
2.8.1

Reply via email to