+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
&& 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))
{
|| 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");
}
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;
}
}
+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>
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>
--- /dev/null
+! { 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