diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2020-10-22 09:45:31 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2020-11-03 09:35:33 +0100 |
commit | fedf3e94efe774b8c0539d344130a7b25f50a881 (patch) | |
tree | 822e21e5d859d5488a0cecfa0eaf22e8f5d89b40 | |
parent | 08fca4df1db9b1ec09c846a8b415bd652cc48050 (diff) | |
download | gcc-fedf3e94efe774b8c0539d344130a7b25f50a881.zip gcc-fedf3e94efe774b8c0539d344130a7b25f50a881.tar.gz gcc-fedf3e94efe774b8c0539d344130a7b25f50a881.tar.bz2 |
[OpenACC] Split up testcases for inconsistent nested 'reduction' clauses checking
gcc/testsuite/
* c-c++-common/goacc/nested-reductions.c: Split file into...
* c-c++-common/goacc/nested-reductions-1-kernels.c: ... this...
* c-c++-common/goacc/nested-reductions-1-parallel.c: ..., this...
* c-c++-common/goacc/nested-reductions-1-routine.c: ..., and this.
* c-c++-common/goacc/nested-reductions-warn.c: Split file into...
* c-c++-common/goacc/nested-reductions-2-kernels.c: ... this...
* c-c++-common/goacc/nested-reductions-2-parallel.c: ..., this...
* c-c++-common/goacc/nested-reductions-2-routine.c: ..., and this.
* gfortran.dg/goacc/nested-reductions.f90: Split file into...
* gfortran.dg/goacc/nested-reductions-1-kernels.f90: ... this...
* gfortran.dg/goacc/nested-reductions-1-parallel.f90: ..., this...
* gfortran.dg/goacc/nested-reductions-1-routine.f90: ..., and
this.
* gfortran.dg/goacc/nested-reductions-warn.f90: Split file into...
* gfortran.dg/goacc/nested-reductions-2-kernels.f90: ... this...
* gfortran.dg/goacc/nested-reductions-2-parallel.f90: ..., this...
* gfortran.dg/goacc/nested-reductions-2-routine.f90: ..., and
this.
12 files changed, 589 insertions, 561 deletions
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c new file mode 100644 index 0000000..68cb8f8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c @@ -0,0 +1,41 @@ +/* Test cases of nested 'reduction' clauses expected to compile cleanly. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-1-kernels.f90'. */ + +void acc_kernels (void) +{ + int i, j, k, sum, diff; + + /* FIXME: These tests are not meaningful yet because reductions in + kernels regions are not supported yet. */ + #pragma acc kernels + { + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(+:sum) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(+:sum) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + } +} diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c index 15385c4..ce1d0a1 100644 --- a/gcc/testsuite/c-c++-common/goacc/nested-reductions.c +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c @@ -1,4 +1,6 @@ -/* Test cases of nested reduction loops that should compile cleanly. */ +/* Test cases of nested 'reduction' clauses expected to compile cleanly. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-1-parallel.f90'. */ void acc_parallel (void) { @@ -314,107 +316,3 @@ void acc_parallel_loop_reduction (void) } } } - -/* The same tests as above, but inside a routine construct. */ -#pragma acc routine gang -void acc_routine (void) -{ - int i, j, k, sum, diff; - - { - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop collapse(2) reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(+:sum) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop collapse(2) reduction(+:sum) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(+:sum) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) reduction(-:diff) - for (i = 0; i < 10; i++) - { - #pragma acc loop reduction(+:sum) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(-:diff) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(-:diff) - for (k = 0; k < 10; k++) - diff = 1; - } - } -} - -void acc_kernels (void) -{ - int i, j, k, sum, diff; - - /* FIXME: These tests are not meaningful yet because reductions in - kernels regions are not supported yet. */ - #pragma acc kernels - { - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(+:sum) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(+:sum) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - } -} diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c new file mode 100644 index 0000000..83d3995 --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c @@ -0,0 +1,68 @@ +/* Test cases of nested 'reduction' clauses expected to compile cleanly. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-1-routine.f90'. */ + +#pragma acc routine gang +void acc_routine (void) +{ + int i, j, k, sum, diff; + + { + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop collapse(2) reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(+:sum) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop collapse(2) reduction(+:sum) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(+:sum) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) reduction(-:diff) + for (i = 0; i < 10; i++) + { + #pragma acc loop reduction(+:sum) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(-:diff) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(-:diff) + for (k = 0; k < 10; k++) + diff = 1; + } + } +} diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c new file mode 100644 index 0000000..80d7c53 --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c @@ -0,0 +1,50 @@ +/* Test erroneous cases of nested 'reduction' clauses. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-2-kernels.f90'. */ + +void acc_kernels (void) +{ + int i, j, k, sum, diff; + + /* FIXME: No diagnostics are produced for these loops because reductions + in kernels regions are not supported yet. */ + #pragma acc kernels + { + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:diff) + for (j = 0; j < 10; j++) + #pragma acc loop + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:sum) + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + } +} diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-warn.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c index e2af66e..1f6b4e7 100644 --- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-warn.c +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c @@ -1,4 +1,6 @@ -/* Test erroneous cases of nested reduction loops. */ +/* Test erroneous cases of nested 'reduction' clauses. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-2-parallel.f90'. */ void acc_parallel (void) { @@ -385,141 +387,3 @@ void acc_parallel_loop_reduction (void) } } } - -/* The same tests as above, but inside a routine construct. */ -#pragma acc routine gang -void acc_routine (void) -{ - int i, j, k, l, sum, diff; - - { - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop collapse(2) // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - #pragma acc loop reduction(+:sum) - for (l = 0; l < 10; l++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - for (k = 0; k < 10; k++) - #pragma acc loop reduction(+:sum) - for (l = 0; l < 10; l++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(-:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - for (k = 0; k < 10; k++) - #pragma acc loop reduction(*:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (l = 0; l < 10; l++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) // { dg-warning "conflicting reduction operations for .sum." }) - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - for (k = 0; k < 10; k++) - #pragma acc loop reduction(*:sum) // { dg-warning "conflicting reduction operations for .sum." } - for (l = 0; l < 10; l++) - sum = 1; - - #pragma acc loop reduction(+:sum) reduction(-:diff) - for (i = 0; i < 10; i++) - { - #pragma acc loop reduction(-:diff) // { dg-warning "nested loop in reduction needs reduction clause for .sum." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) // { dg-warning "nested loop in reduction needs reduction clause for .diff." } - for (j = 0; j < 10; j++) - #pragma acc loop reduction(-:diff) - for (k = 0; k < 10; k++) - diff = 1; - } - } -} - -void acc_kernels (void) -{ - int i, j, k, sum, diff; - - /* FIXME: No diagnostics are produced for these loops because reductions - in kernels regions are not supported yet. */ - #pragma acc kernels - { - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:diff) - for (j = 0; j < 10; j++) - #pragma acc loop - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - - #pragma acc loop reduction(+:sum) - for (i = 0; i < 10; i++) - #pragma acc loop reduction(-:sum) - for (j = 0; j < 10; j++) - #pragma acc loop reduction(+:sum) - for (k = 0; k < 10; k++) - sum = 1; - } -} diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c new file mode 100644 index 0000000..5988d50 --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c @@ -0,0 +1,93 @@ +/* Test erroneous cases of nested 'reduction' clauses. */ + +/* See also 'gfortran.dg/goacc/nested-reductions-2-routine.f90'. */ + +#pragma acc routine gang +void acc_routine (void) +{ + int i, j, k, l, sum, diff; + + { + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop collapse(2) // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + for (j = 0; j < 10; j++) + for (k = 0; k < 10; k++) + #pragma acc loop reduction(+:sum) + for (l = 0; l < 10; l++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + for (k = 0; k < 10; k++) + #pragma acc loop reduction(+:sum) + for (l = 0; l < 10; l++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(-:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + for (k = 0; k < 10; k++) + #pragma acc loop reduction(*:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (l = 0; l < 10; l++) + sum = 1; + + #pragma acc loop reduction(+:sum) + for (i = 0; i < 10; i++) + #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) // { dg-warning "conflicting reduction operations for .sum." }) + // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + for (k = 0; k < 10; k++) + #pragma acc loop reduction(*:sum) // { dg-warning "conflicting reduction operations for .sum." } + for (l = 0; l < 10; l++) + sum = 1; + + #pragma acc loop reduction(+:sum) reduction(-:diff) + for (i = 0; i < 10; i++) + { + #pragma acc loop reduction(-:diff) // { dg-warning "nested loop in reduction needs reduction clause for .sum." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(+:sum) + for (k = 0; k < 10; k++) + sum = 1; + + #pragma acc loop reduction(+:sum) // { dg-warning "nested loop in reduction needs reduction clause for .diff." } + for (j = 0; j < 10; j++) + #pragma acc loop reduction(-:diff) + for (k = 0; k < 10; k++) + diff = 1; + } + } +} diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90 new file mode 100644 index 0000000..0999f87 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90 @@ -0,0 +1,55 @@ +! Test cases of nested 'reduction' clauses expected to compile cleanly. + +! See also 'c-c++-common/goacc/nested-reductions-1-kernels.c'. + +subroutine acc_kernels () + implicit none (type, external) + integer :: i, j, k, sum, diff + + ! FIXME: These tests are not meaningful yet because reductions in + ! kernels regions are not supported yet. + !$acc kernels + !$acc loop reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(+:sum) + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + + !$acc loop reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(+:sum) + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc end kernels +end subroutine acc_kernels diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90 index 3becafa..2915d67 100644 --- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90 @@ -1,4 +1,6 @@ -! Test cases of nested reduction loops that should compile cleanly. +! Test cases of nested 'reduction' clauses expected to compile cleanly. + +! See also 'c-c++-common/goacc/nested-reductions-1-parallel.c'. subroutine acc_parallel () implicit none (type, external) @@ -400,141 +402,3 @@ subroutine acc_parallel_loop_reduction () end do end do end subroutine acc_parallel_loop_reduction - -! The same tests as above, but inside a routine construct. -subroutine acc_routine () - implicit none (type, external) - !$acc routine gang - - integer :: i, j, k, sum, diff - - !$acc loop reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop collapse(2) reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(+:sum) - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop collapse(2) reduction(+:sum) - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(+:sum) - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) reduction(-:diff) - do i = 1, 10 - !$acc loop reduction(+:sum) - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - - !$acc loop reduction(-:diff) - do j = 1, 10 - !$acc loop reduction(-:diff) - do k = 1, 10 - diff = 1 - end do - end do - end do -end subroutine acc_routine - -subroutine acc_kernels () - implicit none (type, external) - integer :: i, j, k, sum, diff - - ! FIXME: These tests are not meaningful yet because reductions in - ! kernels regions are not supported yet. - !$acc kernels - !$acc loop reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(+:sum) - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - - !$acc loop reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(+:sum) - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc end kernels -end subroutine acc_kernels diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 new file mode 100644 index 0000000..17a5861 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 @@ -0,0 +1,88 @@ +! Test cases of nested 'reduction' clauses expected to compile cleanly. + +! See also 'c-c++-common/goacc/nested-reductions-1-routine.c'. + +subroutine acc_routine () + implicit none (type, external) + !$acc routine gang + + integer :: i, j, k, sum, diff + + !$acc loop reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop collapse(2) reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(+:sum) + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop collapse(2) reduction(+:sum) + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(+:sum) + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) reduction(-:diff) + do i = 1, 10 + !$acc loop reduction(+:sum) + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + + !$acc loop reduction(-:diff) + do j = 1, 10 + !$acc loop reduction(-:diff) + do k = 1, 10 + diff = 1 + end do + end do + end do +end subroutine acc_routine diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90 new file mode 100644 index 0000000..edfd862 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90 @@ -0,0 +1,63 @@ +! Test erroneous cases of nested 'reduction' clauses. + +! See also 'c-c++-common/goacc/nested-reductions-2-kernels.c'. + +subroutine acc_kernels () + integer :: i, j, k, sum, diff + + ! FIXME: No diagnostics are produced for these loops because reductions + ! in kernels regions are not supported yet. + !$acc kernels + !$acc loop reduction(+:sum) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop + do j = 1, 10 + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:diff) + do j = 1, 10 + !$acc loop + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:sum) + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + !$acc end kernels +end subroutine acc_kernels diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-warn.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90 index ec36bc9..8fa2cab 100644 --- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-warn.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90 @@ -1,4 +1,6 @@ -! Test erroneous cases of nested reduction loops. +! Test erroneous cases of nested 'reduction' clauses. + +! See also 'c-c++-common/goacc/nested-reductions-2-parallel.c'. subroutine acc_parallel () implicit none (type, external) @@ -495,180 +497,3 @@ subroutine acc_parallel_loop_reduction () end do end do end subroutine acc_parallel_loop_reduction - -! The same tests as above, but inside a routine construct. -subroutine acc_routine () - implicit none (type, external) - !$acc routine gang - integer :: i, j, k, l, sum, diff - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop collapse(2) ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - do j = 1, 10 - do k = 1, 10 - !$acc loop reduction(+:sum) - do l = 1, 10 - sum = 1 - end do - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - do j = 1, 10 - !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - do k = 1, 10 - !$acc loop reduction(+:sum) - do l = 1, 10 - sum = 1 - end do - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do j = 1, 10 - !$acc loop reduction(+:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do j = 1, 10 - !$acc loop reduction(-:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do j = 1, 10 - !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - do k = 1, 10 - !$acc loop reduction(*:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do l = 1, 10 - sum = 1 - end do - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do j = 1, 10 - !$acc loop reduction(+:sum) ! { dg-warning "conflicting reduction operations for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } - do k = 1, 10 - !$acc loop reduction(*:sum) ! { dg-warning "conflicting reduction operations for .sum." } - do l = 1, 10 - sum = 1 - end do - end do - end do - end do - - !$acc loop reduction(+:sum) reduction(-:diff) - do i = 1, 10 - !$acc loop reduction(-:diff) ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - - !$acc loop reduction(+:sum) ! { dg-warning "nested loop in reduction needs reduction clause for .diff." } - do j = 1, 10 - !$acc loop reduction(-:diff) - do k = 1, 10 - diff = 1 - end do - end do - end do -end subroutine acc_routine - -subroutine acc_kernels () - integer :: i, j, k, sum, diff - - ! FIXME: No diagnostics are produced for these loops because reductions - ! in kernels regions are not supported yet. - !$acc kernels - !$acc loop reduction(+:sum) - do i = 1, 10 - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop - do j = 1, 10 - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:diff) - do j = 1, 10 - !$acc loop - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - - !$acc loop reduction(+:sum) - do i = 1, 10 - !$acc loop reduction(-:sum) - do j = 1, 10 - !$acc loop reduction(+:sum) - do k = 1, 10 - sum = 1 - end do - end do - end do - !$acc end kernels -end subroutine acc_kernels diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 new file mode 100644 index 0000000..cc7802e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 @@ -0,0 +1,119 @@ +! Test erroneous cases of nested 'reduction' clauses. + +! See also 'c-c++-common/goacc/nested-reductions-2-routine.c'. + +subroutine acc_routine () + implicit none (type, external) + !$acc routine gang + integer :: i, j, k, l, sum, diff + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop collapse(2) ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + do j = 1, 10 + do k = 1, 10 + !$acc loop reduction(+:sum) + do l = 1, 10 + sum = 1 + end do + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + do j = 1, 10 + !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + do k = 1, 10 + !$acc loop reduction(+:sum) + do l = 1, 10 + sum = 1 + end do + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do j = 1, 10 + !$acc loop reduction(+:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do j = 1, 10 + !$acc loop reduction(-:sum) + do k = 1, 10 + sum = 1 + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do j = 1, 10 + !$acc loop ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + do k = 1, 10 + !$acc loop reduction(*:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do l = 1, 10 + sum = 1 + end do + end do + end do + end do + + !$acc loop reduction(+:sum) + do i = 1, 10 + !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do j = 1, 10 + !$acc loop reduction(+:sum) ! { dg-warning "conflicting reduction operations for .sum." } + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + do k = 1, 10 + !$acc loop reduction(*:sum) ! { dg-warning "conflicting reduction operations for .sum." } + do l = 1, 10 + sum = 1 + end do + end do + end do + end do + + !$acc loop reduction(+:sum) reduction(-:diff) + do i = 1, 10 + !$acc loop reduction(-:diff) ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } + do j = 1, 10 + !$acc loop reduction(+:sum) + do k = 1, 10 + sum = 1 + end do + end do + + !$acc loop reduction(+:sum) ! { dg-warning "nested loop in reduction needs reduction clause for .diff." } + do j = 1, 10 + !$acc loop reduction(-:diff) + do k = 1, 10 + diff = 1 + end do + end do + end do +end subroutine acc_routine |