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
+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>
PR tree-optimization/37021
+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>
PR tree-optimization/37021
--- /dev/null
+/* { 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:
+ ;
+}
if (e != e2)
{
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
ei_next (&ei);