Commit b9aba0a0 by Richard Biener Committed by Richard Biener

re PR tree-optimization/71881 (ICE on valid code at -O3 with -g enabled on…

re PR tree-optimization/71881 (ICE on valid code at -O3 with -g enabled on x86_64-linux-gnu: cannot update SSA form)

2016-07-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71881
	* tree-loop-distribution.c (destroy_loop): Remove blocks in
	reverse DOM order to make debug temp generation happy.

	* gcc.dg/torture/pr71881.c: New testcase.

From-SVN: r238374
parent 9513d5fb
2016-07-15 Richard Biener <rguenther@suse.de> 2016-07-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/71881
* tree-loop-distribution.c (destroy_loop): Remove blocks in
reverse DOM order to make debug temp generation happy.
2016-07-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/71887 PR tree-optimization/71887
* tree-ssa-phiopt.c (absorbing_element_p): Add rhs arg and * tree-ssa-phiopt.c (absorbing_element_p): Add rhs arg and
verify it is not zero for division / modulo handling. verify it is not zero for division / modulo handling.
......
2016-07-15 Richard Biener <rguenther@suse.de> 2016-07-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/71881
* gcc.dg/torture/pr71881.c: New testcase.
2016-07-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/71887 PR tree-optimization/71887
* gcc.dg/torture/pr71887.c: New testcase. * gcc.dg/torture/pr71887.c: New testcase.
......
/* { dg-do compile } */
/* { dg-additional-options "-g" } */
int a, b, c, d, *e, f, g;
int fn1 ()
{
char h[2];
int i = 0;
for (; i < 2; i++)
{
if (c)
for (*e = 0; *e;)
{
int j[f];
i = *e;
}
h[i] = 0;
}
for (; a;)
return h[0];
for (b = 0; b;)
i = g = (1 & i) < d;
return 0;
}
...@@ -888,13 +888,15 @@ destroy_loop (struct loop *loop) ...@@ -888,13 +888,15 @@ destroy_loop (struct loop *loop)
cancel_loop_tree (loop); cancel_loop_tree (loop);
rescan_loop_exit (exit, false, true); rescan_loop_exit (exit, false, true);
for (i = 0; i < nbbs; i++) i = nbbs;
do
{ {
/* We have made sure to not leave any dangling uses of SSA /* We have made sure to not leave any dangling uses of SSA
names defined in the loop. With the exception of virtuals. names defined in the loop. With the exception of virtuals.
Make sure we replace all uses of virtual defs that will remain Make sure we replace all uses of virtual defs that will remain
outside of the loop with the bare symbol as delete_basic_block outside of the loop with the bare symbol as delete_basic_block
will release them. */ will release them. */
--i;
for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi); for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi);
gsi_next (&gsi)) gsi_next (&gsi))
{ {
...@@ -912,6 +914,8 @@ destroy_loop (struct loop *loop) ...@@ -912,6 +914,8 @@ destroy_loop (struct loop *loop)
} }
delete_basic_block (bbs[i]); delete_basic_block (bbs[i]);
} }
while (i != 0);
free (bbs); free (bbs);
set_immediate_dominator (CDI_DOMINATORS, dest, set_immediate_dominator (CDI_DOMINATORS, dest,
......
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