mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 14:01:04 +08:00
[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.
This commit is contained in:
parent
77d24d4364
commit
365cd5f9ba
@ -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;
|
||||
|
@ -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++)
|
||||
|
@ -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++)
|
||||
|
@ -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++)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user