diff mbox series

[og10] Fix goacc/routine-4-extern.c test

Message ID 07709f66-bf60-c95f-bee3-2d24adc492aa@codesourcery.com
State New
Headers show
Series [og10] Fix goacc/routine-4-extern.c test | expand

Commit Message

Kwok Cheung Yeung July 22, 2020, 1:38 p.m. UTC
This test fails due to expected warnings and errors not being emitted by GCC. 
The problem is that the 'gang reduction on an orphan loop' error is caught very 
early on in the frontends (c/c-typeck.c and cp/semantics.c), so the compiler 
aborts before getting to the tree passes that emit the missing warnings/errors.

This error handling was introduced by the patch 'Various OpenACC reduction 
enhancements - FE changes' (commit 6b3e1f7f05cd360bbd356b3f78511aa2ec3f40c3), 
but the later patch to fix affected testcases 'Various OpenACC reduction 
enhancements - test cases' (commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca) did 
not include a fix for routine-4-extern.c.

This patch removes the now outdated dg-error and dg-warnings from the test. Okay 
for OG10?

Kwok
From 5774f048563df311f2a35a654b8c2d7b1af9f2da Mon Sep 17 00:00:00 2001
From: Kwok Cheung Yeung <kcy@codesourcery.com>
Date: Thu, 18 Jun 2020 14:31:17 -0700
Subject: [PATCH 2/6] Fix failures in c-c++-common/goacc/routine-4-extern.c
 testcase

2020-07-21  Kwok Cheung Yeung  <kcy@codesourcery.com>

	gcc/testsuite/
	* c-c++-common/goacc/routine-4-extern.c (seq, vector, worker): Remove
	obsolete expected warnings and errors.
---
 gcc/testsuite/c-c++-common/goacc/routine-4-extern.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

Comments

Thomas Schwinge July 24, 2020, 7:27 a.m. UTC | #1
Hi Kwok!

On 2020-07-22T14:38:04+0100, Kwok Cheung Yeung <kcy@codesourcery.com> wrote:
> This test fails due to expected warnings and errors not being emitted by GCC.
> The problem is that the 'gang reduction on an orphan loop' error is caught very
> early on in the frontends (c/c-typeck.c and cp/semantics.c), so the compiler
> aborts before getting to the tree passes that emit the missing warnings/errors.

ACK, and it seems correct to me that these are indeed "gang reduction on
an orphan loop".

> This error handling was introduced by the patch 'Various OpenACC reduction
> enhancements - FE changes' (commit 6b3e1f7f05cd360bbd356b3f78511aa2ec3f40c3),
> but the later patch to fix affected testcases 'Various OpenACC reduction
> enhancements - test cases' (commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca) did
> not include a fix for routine-4-extern.c.
>
> This patch removes the now outdated dg-error and dg-warnings from the test. Okay
> for OG10?

That however completely defeats what we're intending to test here, which
is to "Test invalid intra-routine parallelism".  The same problem has
been introduced in og10 commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca
"Various OpenACC reduction enhancements - test cases" for
'gcc/testsuite/c-c++-common/goacc/routine-4.c', which throughout changed:

    -#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
    +#pragma acc loop seq reduction (+:red)

Please revert that, and instead replace 'reduction (+:red)' with a
different "dummy loop operation" (just an empty loop body?), and in the
commit log state that this should've been included in the respective og10
commit adding the "gang reduction on an orphan loop" checking.


Grüße
 Thomas


> From 5774f048563df311f2a35a654b8c2d7b1af9f2da Mon Sep 17 00:00:00 2001
> From: Kwok Cheung Yeung <kcy@codesourcery.com>
> Date: Thu, 18 Jun 2020 14:31:17 -0700
> Subject: [PATCH 2/6] Fix failures in c-c++-common/goacc/routine-4-extern.c
>  testcase
>
> 2020-07-21  Kwok Cheung Yeung  <kcy@codesourcery.com>
>
>       gcc/testsuite/
>       * c-c++-common/goacc/routine-4-extern.c (seq, vector, worker): Remove
>       obsolete expected warnings and errors.
> ---
>  gcc/testsuite/c-c++-common/goacc/routine-4-extern.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> index c23ddcf..5f8372c 100644
> --- a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> +++ b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> @@ -21,14 +21,14 @@ void vector (void);
>  #pragma acc routine seq
>  void seq (void)
>  {
> -  extern_gang ();  /* { dg-error "routine call uses" } */
> -  extern_worker ();  /* { dg-error "routine call uses" } */
> -  extern_vector ();  /* { dg-error "routine call uses" } */
> +  extern_gang ();
> +  extern_worker ();
> +  extern_vector ();
>    extern_seq ();
>
>    int red;
>
> -#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
> +#pragma acc loop reduction (+:red)
>    for (int i = 0; i < 10; i++)
>      red ++;
>
> @@ -36,19 +36,19 @@ void seq (void)
>    for (int i = 0; i < 10; i++)
>      red ++;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker reduction (+:red)
>    for (int i = 0; i < 10; i++)
>      red ++;
>
> -#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop vector reduction (+:red)
>    for (int i = 0; i < 10; i++)
>      red ++;
>  }
>
>  void vector (void)
>  {
> -  extern_gang ();  /* { dg-error "routine call uses" } */
> -  extern_worker ();  /* { dg-error "routine call uses" } */
> +  extern_gang ();
> +  extern_worker ();
>    extern_vector ();
>    extern_seq ();
>
> @@ -62,7 +62,7 @@ void vector (void)
>    for (int i = 0; i < 10; i++)
>      red ++;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker reduction (+:red)
>    for (int i = 0; i < 10; i++)
>      red ++;
>
> @@ -73,7 +73,7 @@ void vector (void)
>
>  void worker (void)
>  {
> -  extern_gang ();  /* { dg-error "routine call uses" } */
> +  extern_gang ();
>    extern_worker ();
>    extern_vector ();
>    extern_seq ();
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
Kwok Cheung Yeung July 26, 2020, 1:05 p.m. UTC | #2
On 24/07/2020 8:27 am, Thomas Schwinge wrote:
> That however completely defeats what we're intending to test here, which
> is to "Test invalid intra-routine parallelism".  The same problem has
> been introduced in og10 commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca
> "Various OpenACC reduction enhancements - test cases" for
> 'gcc/testsuite/c-c++-common/goacc/routine-4.c', which throughout changed:
> 
>      -#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
>      +#pragma acc loop seq reduction (+:red)
> 
> Please revert that, and instead replace 'reduction (+:red)' with a
> different "dummy loop operation" (just an empty loop body?), and in the
> commit log state that this should've been included in the respective og10
> commit adding the "gang reduction on an orphan loop" checking.
> 

I have reverted all the previous changes and replaced the orphan loop gang 
reductions with empty loops as suggested, and checked that the tests now pass.

Is this version okay for OG10?

Thanks

Kwok
From 280957dc80090bd0b92ad7a73f528851aad94051 Mon Sep 17 00:00:00 2001
From: Kwok Cheung Yeung <kcy@codesourcery.com>
Date: Sun, 26 Jul 2020 05:11:30 -0700
Subject: [PATCH] Fix c-c++-common/goacc/routine-4.c and
 c-c++-common/goacc/routine-4-extern.c testcases

'Various OpenACC reduction enhancements - FE changes' (commit
6b3e1f7f05cd360bbd356b3f78511aa2ec3f40c3) introduced checks for gang
reductions on orphan loops.  The checks triggered in the routine-4.c
and routine-4-extern.c testcases, requiring changes that effectively
rendered them useless as test cases.

This patch restores the original intent of the test cases, by restoring
the original tests and removing the orphan loop reductions that were
triggering the new check.

This patch should probably have been part of 'Various OpenACC reduction
enhancements - test cases' (commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca).

2020-07-26  Kwok Cheung Yeung  <kcy@codesourcery.com>

	gcc/testsuite/
	* c-c++-common/goacc/routine-4.c (seq, vector, worker, gang): Revert
	previous changes.  Remove loop reductions.
	* c-c++-common/goacc/routine-4-extern.c (seq, vector, worker, gang):
	Likewise.
---
 .../c-c++-common/goacc/routine-4-extern.c          | 72 ++++++++++------------
 gcc/testsuite/c-c++-common/goacc/routine-4.c       | 72 ++++++++++------------
 2 files changed, 64 insertions(+), 80 deletions(-)

diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
index c23ddcf..ec44758 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
@@ -26,23 +26,21 @@ void seq (void)
   extern_vector ();  /* { dg-error "routine call uses" } */
   extern_seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
+#pragma acc loop // { dg-warning "insufficient partitioning" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop vector // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void vector (void)
@@ -52,23 +50,21 @@ void vector (void)
   extern_vector ();
   extern_seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void worker (void)
@@ -78,23 +74,21 @@ void worker (void)
   extern_vector ();
   extern_seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red)
+#pragma acc loop worker
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void gang (void)
@@ -104,21 +98,19 @@ void gang (void)
   extern_vector ();
   extern_seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop gang reduction (+:red) /* { dg-error "gang reduction on an orphan loop" } */
+#pragma acc loop gang
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red)
+#pragma acc loop worker
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4.c b/gcc/testsuite/c-c++-common/goacc/routine-4.c
index ad17371..870ff64 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-4.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-4.c
@@ -17,23 +17,21 @@ void seq (void)
   vector ();  /* { dg-error "routine call uses" } */
   seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
+#pragma acc loop // { dg-warning "insufficient partitioning" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop seq reduction (+:red)
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop vector // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void vector (void) /* { dg-message "declared here" "1" } */
@@ -43,23 +41,21 @@ void vector (void) /* { dg-message "declared here" "1" } */
   vector ();
   seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop 
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop seq reduction (+:red)
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void worker (void) /* { dg-message "declared here" "2" } */
@@ -69,23 +65,21 @@ void worker (void) /* { dg-message "declared here" "2" } */
   vector ();
   seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop seq reduction (+:red)
+#pragma acc loop gang // { dg-error "disallowed by containing routine" }
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red)
+#pragma acc loop worker
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
 
 void gang (void) /* { dg-message "declared here" "3" } */
@@ -95,21 +89,19 @@ void gang (void) /* { dg-message "declared here" "3" } */
   vector ();
   seq ();
 
-  int red;
-
-#pragma acc loop reduction (+:red)
+#pragma acc loop
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop seq reduction (+:red)
+#pragma acc loop gang
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop worker reduction (+:red)
+#pragma acc loop worker
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 
-#pragma acc loop vector reduction (+:red)
+#pragma acc loop vector
   for (int i = 0; i < 10; i++)
-    red ++;
+    ;
 }
Thomas Schwinge July 28, 2020, 8:44 a.m. UTC | #3
Hi Kwok!

On 2020-07-26T14:05:32+0100, Kwok Cheung Yeung <kcy@codesourcery.com> wrote:
> On 24/07/2020 8:27 am, Thomas Schwinge wrote:
>> That however completely defeats what we're intending to test here, which
>> is to "Test invalid intra-routine parallelism".  The same problem has
>> been introduced in og10 commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca
>> "Various OpenACC reduction enhancements - test cases" for
>> 'gcc/testsuite/c-c++-common/goacc/routine-4.c', which throughout changed:
>>
>>      -#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
>>      +#pragma acc loop seq reduction (+:red)
>>
>> Please revert that, and instead replace 'reduction (+:red)' with a
>> different "dummy loop operation" (just an empty loop body?), and in the
>> commit log state that this should've been included in the respective og10
>> commit adding the "gang reduction on an orphan loop" checking.
>
> I have reverted all the previous changes and replaced the orphan loop gang
> reductions with empty loops as suggested, and checked that the tests now pass.
>
> Is this version okay for OG10?

Yes, thanks.


Grüße
 Thomas


> From 280957dc80090bd0b92ad7a73f528851aad94051 Mon Sep 17 00:00:00 2001
> From: Kwok Cheung Yeung <kcy@codesourcery.com>
> Date: Sun, 26 Jul 2020 05:11:30 -0700
> Subject: [PATCH] Fix c-c++-common/goacc/routine-4.c and
>  c-c++-common/goacc/routine-4-extern.c testcases
>
> 'Various OpenACC reduction enhancements - FE changes' (commit
> 6b3e1f7f05cd360bbd356b3f78511aa2ec3f40c3) introduced checks for gang
> reductions on orphan loops.  The checks triggered in the routine-4.c
> and routine-4-extern.c testcases, requiring changes that effectively
> rendered them useless as test cases.
>
> This patch restores the original intent of the test cases, by restoring
> the original tests and removing the orphan loop reductions that were
> triggering the new check.
>
> This patch should probably have been part of 'Various OpenACC reduction
> enhancements - test cases' (commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca).
>
> 2020-07-26  Kwok Cheung Yeung  <kcy@codesourcery.com>
>
>       gcc/testsuite/
>       * c-c++-common/goacc/routine-4.c (seq, vector, worker, gang): Revert
>       previous changes.  Remove loop reductions.
>       * c-c++-common/goacc/routine-4-extern.c (seq, vector, worker, gang):
>       Likewise.
> ---
>  .../c-c++-common/goacc/routine-4-extern.c          | 72 ++++++++++------------
>  gcc/testsuite/c-c++-common/goacc/routine-4.c       | 72 ++++++++++------------
>  2 files changed, 64 insertions(+), 80 deletions(-)
>
> diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> index c23ddcf..ec44758 100644
> --- a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> +++ b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
> @@ -26,23 +26,21 @@ void seq (void)
>    extern_vector ();  /* { dg-error "routine call uses" } */
>    extern_seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
> +#pragma acc loop // { dg-warning "insufficient partitioning" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop vector // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void vector (void)
> @@ -52,23 +50,21 @@ void vector (void)
>    extern_vector ();
>    extern_seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void worker (void)
> @@ -78,23 +74,21 @@ void worker (void)
>    extern_vector ();
>    extern_seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop gang reduction (+:red) // { dg-error "gang reduction on an orphan loop" }
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red)
> +#pragma acc loop worker
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void gang (void)
> @@ -104,21 +98,19 @@ void gang (void)
>    extern_vector ();
>    extern_seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop gang reduction (+:red) /* { dg-error "gang reduction on an orphan loop" } */
> +#pragma acc loop gang
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red)
> +#pragma acc loop worker
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
> diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4.c b/gcc/testsuite/c-c++-common/goacc/routine-4.c
> index ad17371..870ff64 100644
> --- a/gcc/testsuite/c-c++-common/goacc/routine-4.c
> +++ b/gcc/testsuite/c-c++-common/goacc/routine-4.c
> @@ -17,23 +17,21 @@ void seq (void)
>    vector ();  /* { dg-error "routine call uses" } */
>    seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
> +#pragma acc loop // { dg-warning "insufficient partitioning" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop seq reduction (+:red)
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop vector // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void vector (void) /* { dg-message "declared here" "1" } */
> @@ -43,23 +41,21 @@ void vector (void) /* { dg-message "declared here" "1" } */
>    vector ();
>    seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop seq reduction (+:red)
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
> +#pragma acc loop worker // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void worker (void) /* { dg-message "declared here" "2" } */
> @@ -69,23 +65,21 @@ void worker (void) /* { dg-message "declared here" "2" } */
>    vector ();
>    seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop seq reduction (+:red)
> +#pragma acc loop gang // { dg-error "disallowed by containing routine" }
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red)
> +#pragma acc loop worker
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
>
>  void gang (void) /* { dg-message "declared here" "3" } */
> @@ -95,21 +89,19 @@ void gang (void) /* { dg-message "declared here" "3" } */
>    vector ();
>    seq ();
>
> -  int red;
> -
> -#pragma acc loop reduction (+:red)
> +#pragma acc loop
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop seq reduction (+:red)
> +#pragma acc loop gang
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop worker reduction (+:red)
> +#pragma acc loop worker
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>
> -#pragma acc loop vector reduction (+:red)
> +#pragma acc loop vector
>    for (int i = 0; i < 10; i++)
> -    red ++;
> +    ;
>  }
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
Thomas Schwinge Nov. 30, 2021, 12:01 p.m. UTC | #4
Hi!

On 2020-07-28T10:44:29+0200, I wrote:
> On 2020-07-26T14:05:32+0100, Kwok Cheung Yeung <kcy@codesourcery.com> wrote:
>> On 24/07/2020 8:27 am, Thomas Schwinge wrote:
>>> [proposed patch] however completely defeats what we're intending to test here, which
>>> is to "Test invalid intra-routine parallelism".  The same problem has
>>> been introduced in og10 commit 6a0b5806b24bfdefe0b0f3ccbcc51299e5195dca
>>> "Various OpenACC reduction enhancements - test cases" for
>>> 'gcc/testsuite/c-c++-common/goacc/routine-4.c', which throughout changed:
>>>
>>>      -#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
>>>      +#pragma acc loop seq reduction (+:red)
>>>
>>> Please revert that, and instead replace 'reduction (+:red)' with a
>>> different "dummy loop operation" (just an empty loop body?), and in the
>>> commit log state that this should've been included in the respective og10
>>> commit adding the "gang reduction on an orphan loop" checking.
>>
>> I have reverted all the previous changes and replaced the orphan loop gang
>> reductions with empty loops as suggested, and checked that the tests now pass.
>>
>> Is this version okay for OG10?
>
> Yes, thanks.

... which I've now adapted and pushed to master branch in
commit a83a07557085f6da83c63e86c1cd2e719a39b8b2
"Fix c-c++-common/goacc/routine-4.c and
c-c++-common/goacc/routine-4-extern.c testcases", see attached.


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
diff mbox series

Patch

diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
index c23ddcf..5f8372c 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
@@ -21,14 +21,14 @@  void vector (void);
 #pragma acc routine seq
 void seq (void)
 {
-  extern_gang ();  /* { dg-error "routine call uses" } */
-  extern_worker ();  /* { dg-error "routine call uses" } */
-  extern_vector ();  /* { dg-error "routine call uses" } */
+  extern_gang ();
+  extern_worker ();
+  extern_vector ();
   extern_seq ();
 
   int red;
 
-#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
+#pragma acc loop reduction (+:red)
   for (int i = 0; i < 10; i++)
     red ++;
 
@@ -36,19 +36,19 @@  void seq (void)
   for (int i = 0; i < 10; i++)
     red ++;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker reduction (+:red)
   for (int i = 0; i < 10; i++)
     red ++;
 
-#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop vector reduction (+:red)
   for (int i = 0; i < 10; i++)
     red ++;
 }
 
 void vector (void)
 {
-  extern_gang ();  /* { dg-error "routine call uses" } */
-  extern_worker ();  /* { dg-error "routine call uses" } */
+  extern_gang ();
+  extern_worker ();
   extern_vector ();
   extern_seq ();
 
@@ -62,7 +62,7 @@  void vector (void)
   for (int i = 0; i < 10; i++)
     red ++;
 
-#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+#pragma acc loop worker reduction (+:red)
   for (int i = 0; i < 10; i++)
     red ++;
 
@@ -73,7 +73,7 @@  void vector (void)
 
 void worker (void)
 {
-  extern_gang ();  /* { dg-error "routine call uses" } */
+  extern_gang ();
   extern_worker ();
   extern_vector ();
   extern_seq ();