re PR tree-optimization/66101 (internal compiler error: in verify_loop_structure, at cfgloop.c:1662)
2015-05-12 Richard Biener <rguenther@suse.de> PR tree-optimization/66101 * tree-ssa-dce.c (remove_dead_stmt): Properly mark loops for fixup if we turn a loop exit edge to a fallthru edge. * gcc.dg/torture/pr66101.c: New testcase. From-SVN: r223065
This commit is contained in:
parent
caf07df9db
commit
7e37fe6f62
|
@ -1,3 +1,9 @@
|
||||||
|
2015-05-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/66101
|
||||||
|
* tree-ssa-dce.c (remove_dead_stmt): Properly mark loops for
|
||||||
|
fixup if we turn a loop exit edge to a fallthru edge.
|
||||||
|
|
||||||
2015-05-12 Richard Biener <rguenther@suse.de>
|
2015-05-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/37021
|
PR tree-optimization/37021
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-05-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/66101
|
||||||
|
* gcc.dg/torture/pr66101.c: New testcase.
|
||||||
|
|
||||||
2015-05-12 Richard Biener <rguenther@suse.de>
|
2015-05-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/37021
|
PR tree-optimization/37021
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
jmp_buf env;
|
||||||
|
|
||||||
|
int a, c, d, e;
|
||||||
|
|
||||||
|
int
|
||||||
|
bar ()
|
||||||
|
{
|
||||||
|
int b = *(long *) 7 == 5 ? : 0;
|
||||||
|
if (a || a > b)
|
||||||
|
longjmp (env, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
foo ()
|
||||||
|
{
|
||||||
|
long f;
|
||||||
|
setjmp (env);
|
||||||
|
for (; d; c++)
|
||||||
|
switch (c)
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
f = bar () >> 1;
|
||||||
|
if (e)
|
||||||
|
goto L;
|
||||||
|
if (bar () >> 1)
|
||||||
|
goto L;
|
||||||
|
}
|
||||||
|
L:
|
||||||
|
;
|
||||||
|
}
|
|
@ -1149,7 +1149,12 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb)
|
||||||
if (e != e2)
|
if (e != e2)
|
||||||
{
|
{
|
||||||
cfg_altered = true;
|
cfg_altered = true;
|
||||||
remove_edge (e2);
|
/* If we made a BB unconditionally exit a loop then this
|
||||||
|
transform alters the set of BBs in the loop. Schedule
|
||||||
|
a fixup. */
|
||||||
|
if (loop_exit_edge_p (bb->loop_father, e))
|
||||||
|
loops_state_set (LOOPS_NEED_FIXUP);
|
||||||
|
remove_edge (e2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ei_next (&ei);
|
ei_next (&ei);
|
||||||
|
|
Loading…
Reference in New Issue