fix pr78384

PR tree-optimization/78384
	* tree-ssa-loop-split.c (patch_loop_exit): Use correct edge.

testsuite/
	PR tree-optimization/78384
	* gcc.dg/pr78384.c: New test.

From-SVN: r244811
This commit is contained in:
Michael Matz 2017-01-23 13:57:31 +00:00 committed by Michael Matz
parent b4fad9fa0e
commit d886761fd0
4 changed files with 36 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2017-01-23 Michael Matz <matz@suse.de>
PR tree-optimization/78384
* tree-ssa-loop-split.c (patch_loop_exit): Use correct edge.
2017-01-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/79186

View File

@ -1,3 +1,8 @@
2017-01-23 Michael Matz <matz@suse.de>
PR tree-optimization/78384
* gcc.dg/pr78384.c: New test.
2017-01-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/79186

View File

@ -0,0 +1,25 @@
/* PR tree-optimization/78384
{ dg-do compile }
{ dg-options "-O3 -w -fsplit-loops" } */
void
a2 (int wv, int yg, int r9)
{
while (wv < 1)
{
int vn = r9 % 0;
while (yg < 1)
{
int lz;
for (r9 = 0; r9 < 17; ++r9)
{
}
it:
lz = (yg++ >= 0) ? 2 : 0;
wv = vn < lz;
}
}
goto it;
}

View File

@ -159,7 +159,7 @@ patch_loop_exit (struct loop *loop, gcond *guard, tree nextval, tree newbound,
nextval, newbound);
update_stmt (stmt);
edge stay = single_pred_edge (loop->latch);
edge stay = EDGE_SUCC (exit->src, EDGE_SUCC (exit->src, 0) == exit);
exit->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE);
stay->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE);