OpenACC tile clause – apply exit/cycle checks (PR 93552)
PR fortran/93552 * match.c (match_exit_cycle): With OpenACC, check the kernels loop directive and tile clause as well. PR fortran/93552 * gfortran.dg/goacc/tile-4.f90: New.
This commit is contained in:
parent
f1a681a174
commit
2bd8c3ff35
4 changed files with 59 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-02-24 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
PR fortran/93552
|
||||
* match.c (match_exit_cycle): With OpenACC, check the kernels loop
|
||||
directive and tile clause as well.
|
||||
|
||||
2020-02-23 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/93889
|
||||
|
|
|
@ -2878,6 +2878,7 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op)
|
|||
&& o != NULL
|
||||
&& o->state == COMP_OMP_STRUCTURED_BLOCK
|
||||
&& (o->head->op == EXEC_OACC_LOOP
|
||||
|| o->head->op == EXEC_OACC_KERNELS_LOOP
|
||||
|| o->head->op == EXEC_OACC_PARALLEL_LOOP
|
||||
|| o->head->op == EXEC_OACC_SERIAL_LOOP))
|
||||
{
|
||||
|
@ -2887,9 +2888,20 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op)
|
|||
|| o->head->next->op == EXEC_DO_WHILE)
|
||||
&& o->previous != NULL
|
||||
&& o->previous->tail->op == o->head->op);
|
||||
if (o->previous->tail->ext.omp_clauses != NULL
|
||||
&& o->previous->tail->ext.omp_clauses->collapse > 1)
|
||||
collapse = o->previous->tail->ext.omp_clauses->collapse;
|
||||
if (o->previous->tail->ext.omp_clauses != NULL)
|
||||
{
|
||||
/* Both collapsed and tiled loops are lowered the same way, but are not
|
||||
compatible. In gfc_trans_omp_do, the tile is prioritized. */
|
||||
if (o->previous->tail->ext.omp_clauses->tile_list)
|
||||
{
|
||||
collapse = 0;
|
||||
gfc_expr_list *el = o->previous->tail->ext.omp_clauses->tile_list;
|
||||
for ( ; el; el = el->next)
|
||||
++collapse;
|
||||
}
|
||||
else if (o->previous->tail->ext.omp_clauses->collapse > 1)
|
||||
collapse = o->previous->tail->ext.omp_clauses->collapse;
|
||||
}
|
||||
if (st == ST_EXIT && cnt <= collapse)
|
||||
{
|
||||
gfc_error ("EXIT statement at %C terminating !$ACC LOOP loop");
|
||||
|
@ -2897,8 +2909,11 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op)
|
|||
}
|
||||
if (st == ST_CYCLE && cnt < collapse)
|
||||
{
|
||||
gfc_error ("CYCLE statement at %C to non-innermost collapsed"
|
||||
" !$ACC LOOP loop");
|
||||
gfc_error (o->previous->tail->ext.omp_clauses->tile_list
|
||||
? G_("CYCLE statement at %C to non-innermost tiled"
|
||||
" !$ACC LOOP loop")
|
||||
: G_("CYCLE statement at %C to non-innermost collapsed"
|
||||
" !$ACC LOOP loop"));
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-02-24 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
PR fortran/93552
|
||||
* gfortran.dg/goacc/tile-4.f90: New.
|
||||
|
||||
2020-02-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||
Kugan Vivekandarajah <kugan.vivekanandarajah@linaro.org>
|
||||
|
||||
|
@ -43,7 +48,7 @@
|
|||
2020-02-21 Jan Hubicka <hubicka@ucw.cz>
|
||||
Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/93586
|
||||
PR tree-optimization/93586
|
||||
* gcc.dg/torture/pr93586.c: New testcase.
|
||||
|
||||
2020-02-21 Martin Jambor <mjambor@suse.cz>
|
||||
|
|
27
gcc/testsuite/gfortran.dg/goacc/tile-4.f90
Normal file
27
gcc/testsuite/gfortran.dg/goacc/tile-4.f90
Normal file
|
@ -0,0 +1,27 @@
|
|||
! { dg-do compile }
|
||||
!
|
||||
! Contributed by G. Steinmetz
|
||||
!
|
||||
! PR fortran/93552
|
||||
! only collapsed an not tile was checked:
|
||||
program p
|
||||
integer :: i, j
|
||||
!$acc parallel loop tile(2,2)
|
||||
outer: do i = 1, 8
|
||||
do j = 1, 8
|
||||
exit ! { dg-error "statement at .1. terminating ..ACC LOOP loop" }
|
||||
cycle outer ! { dg-error "to non-innermost tiled" }
|
||||
end do
|
||||
end do outer
|
||||
end
|
||||
|
||||
! Kernels loop was missing the check:
|
||||
subroutine test
|
||||
!$acc kernels loop collapse(2)
|
||||
outer: do i = 1, 4
|
||||
do j = 1, 4
|
||||
exit ! { dg-error "statement at .1. terminating ..ACC LOOP loop" }
|
||||
cycle outer ! { dg-error "to non-innermost collapsed" }
|
||||
end do
|
||||
end do outer
|
||||
end
|
Loading…
Add table
Reference in a new issue