Commit 05e0af43 by Cesar Philippidis Committed by Tom de Vries

[openacc] Fix ICE when compiling tile loop containing infinite loop

2018-04-16  Cesar Philippidis  <cesar@codesourcery.com>
	    Tom de Vries  <tom@codesourcery.com>

	PR middle-end/84955
	* omp-expand.c (expand_oacc_for): Add dummy false branch for
	tiled basic blocks without omp continue statements.

	* testsuite/libgomp.oacc-c-c++-common/pr84955.c: New test.
	* testsuite/libgomp.oacc-fortran/pr84955.f90: New test.

Co-Authored-By: Tom de Vries <tom@codesourcery.com>

From-SVN: r259406
parent 2d4e0a12
2018-04-16 Cesar Philippidis <cesar@codesourcery.com>
Tom de Vries <tom@codesourcery.com>
PR middle-end/84955
* omp-expand.c (expand_oacc_for): Add dummy false branch for
tiled basic blocks without omp continue statements.
2018-04-16 Aaron Sawdey <acsawdey@linux.ibm.com> 2018-04-16 Aaron Sawdey <acsawdey@linux.ibm.com>
PR target/83660 PR target/83660
......
...@@ -5439,6 +5439,14 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd) ...@@ -5439,6 +5439,14 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd)
split->flags ^= EDGE_FALLTHRU | EDGE_TRUE_VALUE; split->flags ^= EDGE_FALLTHRU | EDGE_TRUE_VALUE;
/* Add a dummy exit for the tiled block when cont_bb is missing. */
if (cont_bb == NULL)
{
edge e = make_edge (body_bb, exit_bb, EDGE_FALSE_VALUE);
e->probability = profile_probability::even ();
split->probability = profile_probability::even ();
}
/* Initialize the user's loop vars. */ /* Initialize the user's loop vars. */
gsi = gsi_start_bb (elem_body_bb); gsi = gsi_start_bb (elem_body_bb);
expand_oacc_collapse_vars (fd, true, &gsi, counts, e_offset); expand_oacc_collapse_vars (fd, true, &gsi, counts, e_offset);
......
2018-04-16 Cesar Philippidis <cesar@codesourcery.com>
Tom de Vries <tom@codesourcery.com>
PR middle-end/84955
* testsuite/libgomp.oacc-c-c++-common/pr84955.c: New test.
* testsuite/libgomp.oacc-fortran/pr84955.f90: New test.
2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org> 2018-04-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83064 PR fortran/83064
......
/* { dg-do compile } */
int
main (void)
{
int i, j;
#pragma acc parallel loop tile(2,3)
for (i = 1; i < 10; i++)
for (j = 1; j < 10; j++)
for (;;)
;
return i + j;
}
! { dg-do compile }
subroutine s
integer :: i, j
!$acc parallel loop tile(2,3)
do i = 1, 10
do j = 1, 10
do
end do
end do
end do
!$acc end parallel loop
end subroutine s
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment