Commit 9fcebb5a by Richard Biener Committed by Richard Biener

re PR tree-optimization/71398 (ICE at -O3 in 32-bit and 64-bit mode on…

re PR tree-optimization/71398 (ICE at -O3 in 32-bit and 64-bit mode on x86_64-linux-gnu (Segmentation fault, find_edge))

2016-06-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71398
	* tree-ssa-loop-ivcanon.c (unloop_loops): First unloop, then
	remove edges.

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

From-SVN: r237117
parent d48ab010
2016-06-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/71398
* tree-ssa-loop-ivcanon.c (unloop_loops): First unloop, then
remove edges.
2016-06-05 James Bowman <james.bowman@ftdichip.com> 2016-06-05 James Bowman <james.bowman@ftdichip.com>
* config/ft32/ft32.c (ft32_setup_incoming_varargs, * config/ft32/ft32.c (ft32_setup_incoming_varargs,
......
2016-06-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/71398
* gcc.dg/torture/pr71398.c: New testcase.
2016-06-06 Uros Bizjak <ubizjak@gmail.com> 2016-06-06 Uros Bizjak <ubizjak@gmail.com>
PR target/71389 PR target/71389
......
/* { dg-do compile } */
unsigned a, b, c[1];
void __assert_fail() __attribute__((__noreturn__));
void fn1()
{
int d;
unsigned e;
for (;;)
{
d = 0;
for (; d <= 6; d++)
c[d] || a ? 0 : __assert_fail();
for (; e <= 5; e++)
a = b;
}
}
...@@ -615,16 +615,6 @@ static void ...@@ -615,16 +615,6 @@ static void
unloop_loops (bitmap loop_closed_ssa_invalidated, unloop_loops (bitmap loop_closed_ssa_invalidated,
bool *irred_invalidated) bool *irred_invalidated)
{ {
/* First remove edges in peeled copies. */
unsigned i;
edge e;
FOR_EACH_VEC_ELT (edges_to_remove, i, e)
{
bool ok = remove_path (e);
gcc_assert (ok);
}
edges_to_remove.release ();
while (loops_to_unloop.length ()) while (loops_to_unloop.length ())
{ {
struct loop *loop = loops_to_unloop.pop (); struct loop *loop = loops_to_unloop.pop ();
...@@ -660,6 +650,16 @@ unloop_loops (bitmap loop_closed_ssa_invalidated, ...@@ -660,6 +650,16 @@ unloop_loops (bitmap loop_closed_ssa_invalidated,
} }
loops_to_unloop.release (); loops_to_unloop.release ();
loops_to_unloop_nunroll.release (); loops_to_unloop_nunroll.release ();
/* Remove edges in peeled copies. */
unsigned i;
edge e;
FOR_EACH_VEC_ELT (edges_to_remove, i, e)
{
bool ok = remove_path (e);
gcc_assert (ok);
}
edges_to_remove.release ();
} }
/* Tries to unroll LOOP completely, i.e. NITER times. /* Tries to unroll LOOP completely, i.e. NITER times.
......
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