Hi!

On Mon, 04 Apr 2016 12:39:37 +0200, I wrote:
> [...] gomp-4_0-branch [...] additional (cleanup) changes [...]

>       libgomp/
>       [...]
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c:
>       Merge this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c:
>       ... this file, and...
>       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c:
>       ... this file into...
>       * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: ... this new
>       file.  Use dg-warning directives instead of specifying the -w
>       compiler option.
>       [...]

Cesar didn't pick these up in his recent trunk commit, so now applied
this to trunk in r234899:

commit 40495bd0847a05aa76cc37e05292cf937449f9dd
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Tue Apr 12 11:02:32 2016 +0000

    Merge libgomp.oacc-c-c++-common/loop-reduction-*.c into 
libgomp.oacc-c-c++-common/reduction-7.c
    
        libgomp/
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c:
        Merge this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c:
        ... this file, and...
        * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c:
        ... this file into...
        * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: ... this
        file.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234899 
138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgomp/ChangeLog                                  |  29 ++
 .../loop-reduction-gang-np-1.c                     |  45 ---
 .../loop-reduction-gv-np-1.c                       |  30 --
 .../loop-reduction-gw-np-1.c                       |  30 --
 .../loop-reduction-gwv-np-1.c                      |  28 --
 .../loop-reduction-gwv-np-2.c                      |  34 --
 .../loop-reduction-gwv-np-3.c                      |  33 --
 .../loop-reduction-gwv-np-4.c                      |  55 ----
 .../loop-reduction-vector-p-1.c                    |  43 ---
 .../loop-reduction-vector-p-2.c                    |  41 ---
 .../loop-reduction-worker-p-1.c                    |  43 ---
 .../loop-reduction-wv-p-1.c                        |  41 ---
 .../loop-reduction-wv-p-2.c                        |  45 ---
 .../loop-reduction-wv-p-3.c                        |  38 ---
 .../libgomp.oacc-c-c++-common/reduction-7.c        | 351 +++++++++++++++++++++
 15 files changed, 380 insertions(+), 506 deletions(-)

diff --git libgomp/ChangeLog libgomp/ChangeLog
index 6071b23..1716ba0 100644
--- libgomp/ChangeLog
+++ libgomp/ChangeLog
@@ -1,5 +1,34 @@
 2016-04-12  Thomas Schwinge  <tho...@codesourcery.com>
 
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c:
+       Merge this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c:
+       ... this file, and...
+       * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c:
+       ... this file into...
+       * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: ... this
+       file.
+
        * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c:
        Make failure observable.
 
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c
deleted file mode 100644
index 55ab3c9..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* { dg-additional-options "-w" } */
-
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs, non-private reduction
-   variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, arr[1024], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang reduction(+:res)
-    for (i = 0; i < 1024; i++)
-      res += arr[i];
-  }
-
-  for (i = 0; i < 1024; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  res = hres = 1;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang reduction(*:res)
-    for (i = 0; i < 12; i++)
-      res *= arr[i];
-  }
-
-  for (i = 0; i < 12; i++)
-    hres *= arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c
deleted file mode 100644
index d4341e9..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* { dg-additional-options "-w" } */
-
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs and vectors, non-private
-   reduction variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, arr[1024], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang vector reduction(+:res)
-    for (i = 0; i < 1024; i++)
-      res += arr[i];
-  }
-
-  for (i = 0; i < 1024; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c
deleted file mode 100644
index 2e5668b..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* { dg-additional-options "-w" } */
-
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs and workers, non-private
-   reduction variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, arr[1024], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang worker reduction(+:res)
-    for (i = 0; i < 1024; i++)
-      res += arr[i];
-  }
-
-  for (i = 0; i < 1024; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c
deleted file mode 100644
index d610373..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs, workers and vectors, non-private
-   reduction variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, arr[1024], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang worker vector reduction(+:res)
-    for (i = 0; i < 1024; i++)
-      res += arr[i];
-  }
-
-  for (i = 0; i < 1024; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c
deleted file mode 100644
index ea5c151..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs, workers and vectors, non-private
-   reduction variable: separate gang and worker/vector loops).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, arr[32768], res = 0, hres = 0;
-
-  for (i = 0; i < 32768; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
-  {
-    #pragma acc loop gang reduction(+:res)
-    for (j = 0; j < 32; j++)
-      {
-        #pragma acc loop worker vector reduction(+:res)
-        for (i = 0; i < 1024; i++)
-         res += arr[j * 1024 + i];
-      }
-    /* "res" is non-private, and is not available until after the parallel
-       region.  */
-  }
-
-  for (i = 0; i < 32768; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c
deleted file mode 100644
index 0056f3c..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs, workers and vectors, non-private
-   reduction variable: separate gang and worker/vector loops).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j;
-  double arr[32768], res = 0, hres = 0;
-
-  for (i = 0; i < 32768; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copyin(arr) copy(res)
-  {
-    #pragma acc loop gang reduction(+:res)
-    for (j = 0; j < 32; j++)
-      {
-        #pragma acc loop worker vector reduction(+:res)
-        for (i = 0; i < 1024; i++)
-         res += arr[j * 1024 + i];
-      }
-  }
-
-  for (i = 0; i < 32768; i++)
-    hres += arr[i];
-
-  assert (res == hres);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c
deleted file mode 100644
index e69d0ec..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (gangs, workers and vectors, multiple
-   non-private reduction variables, float type).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j;
-  float arr[32768];
-  float res = 0, mres = 0, hres = 0, hmres = 0;
-
-  for (i = 0; i < 32768; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res, mres)
-  {
-    #pragma acc loop gang reduction(+:res) reduction(max:mres)
-    for (j = 0; j < 32; j++)
-      {
-       #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
-       for (i = 0; i < 1024; i++)
-         {
-           res += arr[j * 1024 + i];
-           if (arr[j * 1024 + i] > mres)
-             mres = arr[j * 1024 + i];
-         }
-
-       #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
-       for (i = 0; i < 1024; i++)
-         {
-           res += arr[j * 1024 + (1023 - i)];
-           if (arr[j * 1024 + (1023 - i)] > mres)
-             mres = arr[j * 1024 + (1023 - i)];
-         }
-      }
-  }
-
-  for (j = 0; j < 32; j++)
-    for (i = 0; i < 1024; i++)
-      {
-        hres += arr[j * 1024 + i];
-       hres += arr[j * 1024 + (1023 - i)];
-       if (arr[j * 1024 + i] > hmres)
-         hmres = arr[j * 1024 + i];
-       if (arr[j * 1024 + (1023 - i)] > hmres)
-         hmres = arr[j * 1024 + (1023 - i)];
-      }
-
-  assert (res == hres);
-  assert (mres == hmres);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c
deleted file mode 100644
index 31e4366..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* { dg-additional-options "-w" } */
-
-#include <assert.h>
-
-/* Test of reduction on loop directive (vectors, private reduction
-   variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, arr[1024], out[32], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(res) copyout(out)
-  {
-    #pragma acc loop gang
-    for (j = 0; j < 32; j++)
-      {
-        res = 0;
-
-       #pragma acc loop vector reduction(+:res)
-       for (i = 0; i < 32; i++)
-         res += arr[j * 32 + i];
-
-       out[j] = res;
-      }
-  }
-
-  for (j = 0; j < 32; j++)
-    {
-      hres = 0;
-
-      for (i = 0; i < 32; i++)
-       hres += arr[j * 32 + i];
-
-      assert (out[j] == hres);
-    }
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c
deleted file mode 100644
index 15f0053..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (vector reduction in
-   gang-partitioned/worker-partitioned mode, private reduction variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, k;
-  double ina[1024], inb[1024], out[1024], acc;
-
-  for (j = 0; j < 32; j++)
-    for (i = 0; i < 32; i++)
-      {
-        ina[j * 32 + i] = (i == j) ? 2.0 : 0.0;
-       inb[j * 32 + i] = (double) (i + j);
-      }
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(acc) copyin(ina, inb) copyout(out)
-  {
-    #pragma acc loop gang worker
-    for (k = 0; k < 32; k++)
-      for (j = 0; j < 32; j++)
-        {
-         acc = 0;
-
-         #pragma acc loop vector reduction(+:acc)
-         for (i = 0; i < 32; i++)
-           acc += ina[k * 32 + i] * inb[i * 32 + j];
-
-         out[k * 32 + j] = acc;
-       }
-  }
-
-  for (j = 0; j < 32; j++)
-    for (i = 0; i < 32; i++)
-      assert (out[j * 32 + i] == (i + j) * 2);
-
-  return 0;
-}
diff --git 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c
deleted file mode 100644
index 4a92503..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* { dg-additional-options "-w" } */
-
-#include <assert.h>
-
-/* Test of reduction on loop directive (workers, private reduction
-   variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, arr[1024], out[32], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(res) copyout(out)
-  {
-    #pragma acc loop gang
-    for (j = 0; j < 32; j++)
-      {
-        res = 0;
-
-       #pragma acc loop worker reduction(+:res)
-       for (i = 0; i < 32; i++)
-         res += arr[j * 32 + i];
-
-       out[j] = res;
-      }
-  }
-
-  for (j = 0; j < 32; j++)
-    {
-      hres = 0;
-
-      for (i = 0; i < 32; i++)
-       hres += arr[j * 32 + i];
-
-      assert (out[j] == hres);
-    }
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c
deleted file mode 100644
index 1bfb284..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (workers and vectors, private reduction
-   variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, arr[1024], out[32], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(res) copyout(out)
-  {
-    #pragma acc loop gang
-    for (j = 0; j < 32; j++)
-      {
-        res = 0;
-
-       #pragma acc loop worker vector reduction(+:res)
-       for (i = 0; i < 32; i++)
-         res += arr[j * 32 + i];
-
-       out[j] = res;
-      }
-  }
-
-  for (j = 0; j < 32; j++)
-    {
-      hres = 0;
-
-      for (i = 0; i < 32; i++)
-       hres += arr[j * 32 + i];
-
-      assert (out[j] == hres);
-    }
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c
deleted file mode 100644
index 93ab78f..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (workers and vectors, private reduction
-   variable).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, j, arr[32768], out[32], res = 0, hres = 0;
-
-  for (i = 0; i < 32768; i++)
-    arr[i] = i;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(res) copyout(out)
-  {
-    #pragma acc loop gang
-    for (j = 0; j < 32; j++)
-      {
-        res = j;
-
-       #pragma acc loop worker reduction(+:res)
-       for (i = 0; i < 1024; i++)
-         res += arr[j * 1024 + i];
-
-       #pragma acc loop vector reduction(+:res)
-       for (i = 1023; i >= 0; i--)
-         res += arr[j * 1024 + i];
-
-       out[j] = res;
-      }
-  }
-
-  for (j = 0; j < 32; j++)
-    {
-      hres = j;
-
-      for (i = 0; i < 1024; i++)
-       hres += arr[j * 1024 + i] * 2;
-
-      assert (out[j] == hres);
-    }
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c
deleted file mode 100644
index 298e25c..0000000
--- libgomp/testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <assert.h>
-
-/* Test of reduction on loop directive (workers and vectors, private reduction
-   variable: gang-redundant mode).  */
-
-int
-main (int argc, char *argv[])
-{
-  int i, arr[1024], out[32], res = 0, hres = 0;
-
-  for (i = 0; i < 1024; i++)
-    arr[i] = i ^ 33;
-
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      private(res) copyin(arr) copyout(out)
-  {
-    /* Private variables aren't initialized by default in openacc.  */
-    res = 0;
-
-    /* "res" should be available at the end of the following loop (and should
-       have the same value redundantly in each gang).  */
-    #pragma acc loop worker vector reduction(+:res)
-    for (i = 0; i < 1024; i++)
-      res += arr[i];
-
-    #pragma acc loop gang (static: 1)
-    for (i = 0; i < 32; i++)
-      out[i] = res;
-  }
-
-  for (i = 0; i < 1024; i++)
-    hres += arr[i];
-
-  for (i = 0; i < 32; i++)
-    assert (out[i] == hres);
-
-  return 0;
-}
diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c 
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
index b23c758..76c33e4 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
@@ -118,12 +118,363 @@ void gwv_np_1()
 }
 
 
+/* Test of reduction on loop directive (gangs, workers and vectors, non-private
+   reduction variable: separate gang and worker/vector loops).  */
+
+void gwv_np_2()
+{
+  int i, j, arr[32768], res = 0, hres = 0;
+
+  for (i = 0; i < 32768; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      copy(res)
+  {
+    #pragma acc loop gang reduction(+:res)
+    for (j = 0; j < 32; j++)
+      {
+        #pragma acc loop worker vector reduction(+:res)
+        for (i = 0; i < 1024; i++)
+         res += arr[j * 1024 + i];
+      }
+    /* "res" is non-private, and is not available until after the parallel
+       region.  */
+  }
+
+  for (i = 0; i < 32768; i++)
+    hres += arr[i];
+
+  assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, non-private
+   reduction variable: separate gang and worker/vector loops).  */
+
+void gwv_np_3()
+{
+  int i, j;
+  double arr[32768], res = 0, hres = 0;
+
+  for (i = 0; i < 32768; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      copyin(arr) copy(res)
+  {
+    #pragma acc loop gang reduction(+:res)
+    for (j = 0; j < 32; j++)
+      {
+        #pragma acc loop worker vector reduction(+:res)
+        for (i = 0; i < 1024; i++)
+         res += arr[j * 1024 + i];
+      }
+  }
+
+  for (i = 0; i < 32768; i++)
+    hres += arr[i];
+
+  assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, multiple
+   non-private reduction variables, float type).  */
+
+void gwv_np_4()
+{
+  int i, j;
+  float arr[32768];
+  float res = 0, mres = 0, hres = 0, hmres = 0;
+
+  for (i = 0; i < 32768; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      copy(res, mres)
+  {
+    #pragma acc loop gang reduction(+:res) reduction(max:mres)
+    for (j = 0; j < 32; j++)
+      {
+       #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+       for (i = 0; i < 1024; i++)
+         {
+           res += arr[j * 1024 + i];
+           if (arr[j * 1024 + i] > mres)
+             mres = arr[j * 1024 + i];
+         }
+
+       #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+       for (i = 0; i < 1024; i++)
+         {
+           res += arr[j * 1024 + (1023 - i)];
+           if (arr[j * 1024 + (1023 - i)] > mres)
+             mres = arr[j * 1024 + (1023 - i)];
+         }
+      }
+  }
+
+  for (j = 0; j < 32; j++)
+    for (i = 0; i < 1024; i++)
+      {
+        hres += arr[j * 1024 + i];
+       hres += arr[j * 1024 + (1023 - i)];
+       if (arr[j * 1024 + i] > hmres)
+         hmres = arr[j * 1024 + i];
+       if (arr[j * 1024 + (1023 - i)] > hmres)
+         hmres = arr[j * 1024 + (1023 - i)];
+      }
+
+  assert (res == hres);
+  assert (mres == hmres);
+}
+
+
+/* Test of reduction on loop directive (vectors, private reduction
+   variable).  */
+
+void v_p_1()
+{
+  int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+  for (i = 0; i < 1024; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(res) copyout(out)
+  {
+    #pragma acc loop gang
+    for (j = 0; j < 32; j++)
+      {
+        res = 0;
+
+       #pragma acc loop vector reduction(+:res)
+       for (i = 0; i < 32; i++)
+         res += arr[j * 32 + i];
+
+       out[j] = res;
+      }
+  }
+
+  for (j = 0; j < 32; j++)
+    {
+      hres = 0;
+
+      for (i = 0; i < 32; i++)
+       hres += arr[j * 32 + i];
+
+      assert (out[j] == hres);
+    }
+}
+
+
+/* Test of reduction on loop directive (vector reduction in
+   gang-partitioned/worker-partitioned mode, private reduction variable).  */
+
+void v_p_2()
+{
+  int i, j, k;
+  double ina[1024], inb[1024], out[1024], acc;
+
+  for (j = 0; j < 32; j++)
+    for (i = 0; i < 32; i++)
+      {
+        ina[j * 32 + i] = (i == j) ? 2.0 : 0.0;
+       inb[j * 32 + i] = (double) (i + j);
+      }
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(acc) copyin(ina, inb) copyout(out)
+  {
+    #pragma acc loop gang worker
+    for (k = 0; k < 32; k++)
+      for (j = 0; j < 32; j++)
+        {
+         acc = 0;
+
+         #pragma acc loop vector reduction(+:acc)
+         for (i = 0; i < 32; i++)
+           acc += ina[k * 32 + i] * inb[i * 32 + j];
+
+         out[k * 32 + j] = acc;
+       }
+  }
+
+  for (j = 0; j < 32; j++)
+    for (i = 0; i < 32; i++)
+      assert (out[j * 32 + i] == (i + j) * 2);
+}
+
+
+/* Test of reduction on loop directive (workers, private reduction
+   variable).  */
+
+void w_p_1()
+{
+  int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+  for (i = 0; i < 1024; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(res) copyout(out)
+  {
+    #pragma acc loop gang
+    for (j = 0; j < 32; j++)
+      {
+        res = 0;
+
+       #pragma acc loop worker reduction(+:res)
+       for (i = 0; i < 32; i++)
+         res += arr[j * 32 + i];
+
+       out[j] = res;
+      }
+  }
+
+  for (j = 0; j < 32; j++)
+    {
+      hres = 0;
+
+      for (i = 0; i < 32; i++)
+       hres += arr[j * 32 + i];
+
+      assert (out[j] == hres);
+    }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+   variable).  */
+
+void wv_p_1()
+{
+  int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+  for (i = 0; i < 1024; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(res) copyout(out)
+  {
+    #pragma acc loop gang
+    for (j = 0; j < 32; j++)
+      {
+        res = 0;
+
+       #pragma acc loop worker vector reduction(+:res)
+       for (i = 0; i < 32; i++)
+         res += arr[j * 32 + i];
+
+       out[j] = res;
+      }
+  }
+
+  for (j = 0; j < 32; j++)
+    {
+      hres = 0;
+
+      for (i = 0; i < 32; i++)
+       hres += arr[j * 32 + i];
+
+      assert (out[j] == hres);
+    }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+   variable).  */
+
+void wv_p_2()
+{
+  int i, j, arr[32768], out[32], res = 0, hres = 0;
+
+  for (i = 0; i < 32768; i++)
+    arr[i] = i;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(res) copyout(out)
+  {
+    #pragma acc loop gang
+    for (j = 0; j < 32; j++)
+      {
+        res = j;
+
+       #pragma acc loop worker reduction(+:res)
+       for (i = 0; i < 1024; i++)
+         res += arr[j * 1024 + i];
+
+       #pragma acc loop vector reduction(+:res)
+       for (i = 1023; i >= 0; i--)
+         res += arr[j * 1024 + i];
+
+       out[j] = res;
+      }
+  }
+
+  for (j = 0; j < 32; j++)
+    {
+      hres = j;
+
+      for (i = 0; i < 1024; i++)
+       hres += arr[j * 1024 + i] * 2;
+
+      assert (out[j] == hres);
+    }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+   variable: gang-redundant mode).  */
+
+void wv_p_3()
+{
+  int i, arr[1024], out[32], res = 0, hres = 0;
+
+  for (i = 0; i < 1024; i++)
+    arr[i] = i ^ 33;
+
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+                      private(res) copyin(arr) copyout(out)
+  {
+    /* Private variables aren't initialized by default in openacc.  */
+    res = 0;
+
+    /* "res" should be available at the end of the following loop (and should
+       have the same value redundantly in each gang).  */
+    #pragma acc loop worker vector reduction(+:res)
+    for (i = 0; i < 1024; i++)
+      res += arr[i];
+
+    #pragma acc loop gang (static: 1)
+    for (i = 0; i < 32; i++)
+      out[i] = res;
+  }
+
+  for (i = 0; i < 1024; i++)
+    hres += arr[i];
+
+  for (i = 0; i < 32; i++)
+    assert (out[i] == hres);
+}
+
+
 int main()
 {
   g_np_1();
   gv_np_1();
   gw_np_1();
   gwv_np_1();
+  gwv_np_2();
+  gwv_np_3();
+  gwv_np_4();
+  v_p_1();
+  v_p_2();
+  w_p_1();
+  wv_p_1();
+  wv_p_2();
+  wv_p_3();
 
   return 0;
 }


Grüße
 Thomas

Reply via email to