diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2021-11-26 13:11:16 +0100 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2021-11-30 12:59:14 +0100 |
commit | 365cd5f9ba812c389b404a53d99ab5dded5097f4 (patch) | |
tree | d8f1575a59ad6b41b6ec86307464f3b45493efd9 /gcc | |
parent | 77d24d43644909852998043335b5a0e09d1e8f02 (diff) | |
download | gcc-365cd5f9ba812c389b404a53d99ab5dded5097f4.zip gcc-365cd5f9ba812c389b404a53d99ab5dded5097f4.tar.gz gcc-365cd5f9ba812c389b404a53d99ab5dded5097f4.tar.bz2 |
[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.
Diffstat (limited to 'gcc')
8 files changed, 62 insertions, 51 deletions
diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 5110a42..5cdb57d 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 9e34614..45b8cf3 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 9bd79de..3b2b027 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 941e5c6..6ff8698 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 e826411..e1b0a02 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 98b1aa6..73a0520 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 464dee1..8eed080 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 7ff0a57..47f8a32 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 |