From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 29C77385AC3C; Tue, 30 Nov 2021 12:00:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 29C77385AC3C MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-5622] [OpenACC] Remove erroneous "Orphan reductions cannot have gang partitioning" handling X-Act-Checkin: gcc X-Git-Author: Thomas Schwinge X-Git-Refname: refs/heads/master X-Git-Oldrev: 77d24d43644909852998043335b5a0e09d1e8f02 X-Git-Newrev: 365cd5f9ba812c389b404a53d99ab5dded5097f4 Message-Id: <20211130120028.29C77385AC3C@sourceware.org> Date: Tue, 30 Nov 2021 12:00:28 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Nov 2021 12:00:28 -0000 https://gcc.gnu.org/g:365cd5f9ba812c389b404a53d99ab5dded5097f4 commit r12-5622-g365cd5f9ba812c389b404a53d99ab5dded5097f4 Author: Thomas Schwinge Date: Fri Nov 26 13:11:16 2021 +0100 [OpenACC] Remove erroneous "Orphan reductions cannot have gang partitioning" handling That is: -/* Ensure that the middle end does not assign gang level parallelism - to orphan loop containing reductions. */ +/* Verify that we diagnose "gang reduction on an orphan loop" for automatically + assigned gang level of parallelism. */ ... to implement what the OpenACC specification actually says. Fix-up for preceding commit 2b7dac2c0dcb087da9e4018943c023c0678234a3 "Make OpenACC orphan gang reductions errors". gcc/ * omp-offload.c (oacc_loop_auto_partitions): Remove erroneous "Orphan reductions cannot have gang partitioning" handling. gcc/testsuite/ * c-c++-common/goacc/nested-reductions-1-routine.c: Adjust. * c-c++-common/goacc/nested-reductions-2-routine.c: Adjust. * c-c++-common/goacc/orphan-reductions-2.c: Adjust. * gfortran.dg/goacc/nested-reductions-1-routine.f90: Adjust. * gfortran.dg/goacc/nested-reductions-2-routine.f90: Adjust. * gfortran.dg/goacc/orphan-reductions-1.f90: Adjust. * gfortran.dg/goacc/orphan-reductions-2.f90: Adjust. Diff: --- gcc/omp-offload.c | 7 ------- .../goacc/nested-reductions-1-routine.c | 10 ++++++--- .../goacc/nested-reductions-2-routine.c | 17 ++++++++------- .../c-c++-common/goacc/orphan-reductions-2.c | 24 +++++++++++++--------- .../goacc/nested-reductions-1-routine.f90 | 10 ++++++--- .../goacc/nested-reductions-2-routine.f90 | 17 ++++++++------- .../gfortran.dg/goacc/orphan-reductions-1.f90 | 4 ++++ .../gfortran.dg/goacc/orphan-reductions-2.f90 | 24 +++++++++++++--------- 8 files changed, 62 insertions(+), 51 deletions(-) diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 5110a424584..5cdb57d9132 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -1623,13 +1623,6 @@ oacc_loop_auto_partitions (oacc_loop *loop, unsigned outer_mask, non-innermost available level. */ unsigned this_mask = GOMP_DIM_MASK (GOMP_DIM_GANG); - /* Orphan reductions cannot have gang partitioning. */ - if ((loop->flags & OLF_REDUCTION) - && oacc_get_fn_attrib (current_function_decl) - && !lookup_attribute ("omp target entrypoint", - DECL_ATTRIBUTES (current_function_decl))) - this_mask = GOMP_DIM_MASK (GOMP_DIM_WORKER); - /* Find the first outermost available partition. */ while (this_mask <= outer_mask) this_mask <<= 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 index 9e34614eb15..45b8cf3451f 100644 --- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c @@ -8,18 +8,21 @@ void acc_routine (void) int i, j, k, sum, diff; { + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #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; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+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; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(+:sum) @@ -27,6 +30,7 @@ void acc_routine (void) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop collapse(2) reduction(+:sum) @@ -34,6 +38,7 @@ void acc_routine (void) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) @@ -41,27 +46,26 @@ void acc_routine (void) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(+:sum) - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(+:sum) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) reduction(-:diff) for (i = 0; i < 10; i++) { #pragma acc loop reduction(+:sum) - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(+:sum) for (k = 0; k < 10; k++) sum = 1; #pragma acc loop reduction(-:diff) - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(-:diff) for (k = 0; k < 10; k++) 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 index 9bd79dea4cf..3b2b0275ec8 100644 --- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c +++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c @@ -8,29 +8,29 @@ void acc_routine (void) int i, j, k, l, sum, diff; { + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+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." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(+:sum) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+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." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+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." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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 } @@ -39,28 +39,28 @@ void acc_routine (void) for (l = 0; l < 10; l++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(-:sum) for (k = 0; k < 10; k++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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 } @@ -69,10 +69,10 @@ void acc_routine (void) for (l = 0; l < 10; l++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ #pragma acc loop reduction(+:sum) for (i = 0; i < 10; i++) #pragma acc loop reduction(-:sum) // { dg-warning "conflicting reduction operations for .sum." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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 } @@ -81,18 +81,17 @@ void acc_routine (void) for (l = 0; l < 10; l++) sum = 1; + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+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." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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." } - // { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } for (j = 0; j < 10; j++) #pragma acc loop reduction(-:diff) for (k = 0; k < 10; k++) diff --git a/gcc/testsuite/c-c++-common/goacc/orphan-reductions-2.c b/gcc/testsuite/c-c++-common/goacc/orphan-reductions-2.c index 941e5c6126a..6ff8698a35c 100644 --- a/gcc/testsuite/c-c++-common/goacc/orphan-reductions-2.c +++ b/gcc/testsuite/c-c++-common/goacc/orphan-reductions-2.c @@ -1,17 +1,20 @@ -/* Ensure that the middle end does not assign gang level parallelism - to orphan loop containing reductions. */ +/* Verify that we diagnose "gang reduction on an orphan loop" for automatically + assigned gang level of parallelism. */ /* { dg-do compile } */ /* { dg-additional-options "-fopt-info-optimized-omp" } */ /* { dg-additional-options "-Wopenacc-parallelism" } */ #pragma acc routine gang +/* { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .+3 } + TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. */ int -f1 () /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" } */ +f1 () { int sum = 0, i; -#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC worker vector loop parallelism" } */ + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ +#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC gang vector loop parallelism" } */ for (i = 0; i < 100; i++) sum++; @@ -20,11 +23,12 @@ f1 () /* { dg-warning "region is gang partitioned but does not contain gang part #pragma acc routine gang int -f2 () /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" } */ +f2 () { int sum = 0, i, j; -#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC worker loop parallelism" } */ + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ +#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC gang worker loop parallelism" } */ for (i = 0; i < 100; i++) #pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC vector loop parallelism" } */ for (j = 0; j < 100; j++) @@ -35,14 +39,14 @@ f2 () /* { dg-warning "region is gang partitioned but does not contain gang part #pragma acc routine gang int -f3 () /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" } */ +f3 () { int sum = 0, i, j, k; -#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC worker loop parallelism" } */ + /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */ +#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC gang loop parallelism" } */ for (i = 0; i < 100; i++) -#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC seq loop parallelism" } */ - /* { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } */ +#pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC worker loop parallelism" } */ for (j = 0; j < 100; j++) #pragma acc loop reduction (+:sum) /* { dg-optimized "assigned OpenACC vector loop parallelism" } */ for (k = 0; k < 100; k++) diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 index e8264114714..e1b0a0202d4 100644 --- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 @@ -8,6 +8,7 @@ subroutine acc_routine () integer :: i, j, k, sum, diff + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 do j = 1, 10 @@ -17,6 +18,7 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop collapse(2) reduction(+:sum) do i = 1, 10 do j = 1, 10 @@ -26,6 +28,7 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(+:sum) @@ -36,6 +39,7 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop collapse(2) reduction(+:sum) @@ -46,6 +50,7 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 do j = 1, 10 @@ -56,10 +61,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(+:sum) - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(+:sum) do k = 1, 10 @@ -68,10 +73,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) reduction(-:diff) do i = 1, 10 !$acc loop reduction(+:sum) - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(+:sum) do k = 1, 10 @@ -80,7 +85,6 @@ subroutine acc_routine () end do !$acc loop reduction(-:diff) - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(-:diff) do k = 1, 10 diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 index 98b1aa641c0..73a05207910 100644 --- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 @@ -7,10 +7,10 @@ subroutine acc_routine () !$acc routine gang integer :: i, j, k, l, sum, diff + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 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 j = 1, 10 !$acc loop reduction(+:sum) do k = 1, 10 @@ -19,10 +19,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop collapse(2) ! { dg-warning "nested loop in reduction needs reduction clause for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 do k = 1, 10 !$acc loop reduction(+:sum) @@ -33,10 +33,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 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 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 } @@ -49,10 +49,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(+:sum) ! { dg-warning "conflicting reduction operations for .sum." } do k = 1, 10 @@ -61,10 +61,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(-:sum) do k = 1, 10 @@ -73,10 +73,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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 } @@ -89,10 +89,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$acc loop reduction(+:sum) do i = 1, 10 !$acc loop reduction(-:sum) ! { dg-warning "conflicting reduction operations for .sum." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } 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 } @@ -105,10 +105,10 @@ subroutine acc_routine () end do end do + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } !$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." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(+:sum) do k = 1, 10 @@ -117,7 +117,6 @@ subroutine acc_routine () end do !$acc loop reduction(+:sum) ! { dg-warning "nested loop in reduction needs reduction clause for .diff." } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do j = 1, 10 !$acc loop reduction(-:diff) do k = 1, 10 diff --git a/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90 b/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90 index 464dee1260a..8eed080a128 100644 --- a/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90 @@ -42,6 +42,7 @@ subroutine s2 end do !$acc loop reduction(+:sum) + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do i = 1, n !$acc loop gang reduction(+:sum) ! { dg-error "gang reduction on an orphan loop" } do j = 1, n @@ -92,6 +93,7 @@ integer function f2 () end do !$acc loop reduction(+:sum) + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do i = 1, n !$acc loop gang reduction(+:sum) ! { dg-error "gang reduction on an orphan loop" } do j = 1, n @@ -144,6 +146,7 @@ contains end do !$acc loop reduction(+:sum) + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do i = 1, n !$acc loop gang reduction(+:sum) ! { dg-error "gang reduction on an orphan loop" } do j = 1, n @@ -194,6 +197,7 @@ contains end do !$acc loop reduction(+:sum) + ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } do i = 1, n !$acc loop gang reduction(+:sum) ! { dg-error "gang reduction on an orphan loop" } do j = 1, n diff --git a/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-2.f90 b/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-2.f90 index 7ff0a57e620..47f8a326607 100644 --- a/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-2.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/orphan-reductions-2.f90 @@ -1,29 +1,33 @@ -! Ensure that the middle end does not assign gang level parallelism to -! orphan loop containing reductions. +! Verify that we diagnose "gang reduction on an orphan loop" for automatically +! assigned gang level of parallelism. ! { dg-do compile } ! { dg-additional-options "-fopt-info-optimized-omp" } ! { dg-additional-options "-Wopenacc-parallelism" } -subroutine s1 ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" } +subroutine s1 implicit none !$acc routine gang + ! { dg-bogus "\[Ww\]arning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .-3 } + !TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. integer i, sum sum = 0 - !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC worker vector loop parallelism" } + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } + !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC gang vector loop parallelism" } do i = 1, 10 sum = sum + 1 end do end subroutine s1 -subroutine s2 ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" } +subroutine s2 implicit none !$acc routine gang integer i, j, sum sum = 0 - !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC worker loop parallelism" } + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } + !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC gang worker loop parallelism" } do i = 1, 10 !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC vector loop parallelism" } do j = 1, 10 @@ -32,16 +36,16 @@ subroutine s2 ! { dg-warning "region is gang partitioned but does not contain ga end do end subroutine s2 -subroutine s3 ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" } +subroutine s3 implicit none !$acc routine gang integer i, j, k, sum sum = 0 - !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC worker loop parallelism" } + ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } + !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC gang loop parallelism" } do i = 1, 10 - !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC seq loop parallelism" } - ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 } + !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC worker loop parallelism" } do j = 1, 10 !$acc loop reduction (+:sum) ! { dg-optimized "assigned OpenACC vector loop parallelism" } do k = 1, 10