re PR tree-optimization/56350 (ICE in vectorizable_reduction, at tree-vect-loop.c:4731)
2013-02-18 Richard Biener <rguenther@suse.de> PR middle-end/56350 * cfghooks.c (merge_blocks): If we merge a latch into another block adjust references to it. * cfgloop.c (flow_loops_find): Reset latch before recomputing it. (verify_loop_structure): Verify that a recorded latch is in fact a latch. * gcc.dg/torture/pr56350.c: New testcase. From-SVN: r196118
This commit is contained in:
parent
5e97dfb679
commit
6aaf596b40
|
@ -1,3 +1,12 @@
|
|||
2013-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/56350
|
||||
* cfghooks.c (merge_blocks): If we merge a latch into another
|
||||
block adjust references to it.
|
||||
* cfgloop.c (flow_loops_find): Reset latch before recomputing it.
|
||||
(verify_loop_structure): Verify that a recorded latch is in fact
|
||||
a latch.
|
||||
|
||||
2013-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56321
|
||||
|
|
|
@ -761,7 +761,12 @@ merge_blocks (basic_block a, basic_block b)
|
|||
{
|
||||
e->src = a;
|
||||
if (current_loops != NULL)
|
||||
rescan_loop_exit (e, true, false);
|
||||
{
|
||||
/* If b was a latch, a now is. */
|
||||
if (e->dest->loop_father->latch == b)
|
||||
e->dest->loop_father->latch = a;
|
||||
rescan_loop_exit (e, true, false);
|
||||
}
|
||||
}
|
||||
a->succs = b->succs;
|
||||
a->flags |= b->flags;
|
||||
|
|
|
@ -466,6 +466,8 @@ flow_loops_find (struct loops *loops)
|
|||
"loop %d with header %d\n",
|
||||
loop->num, header->index);
|
||||
}
|
||||
/* Reset latch, we recompute it below. */
|
||||
loop->latch = NULL;
|
||||
larray.safe_push (loop);
|
||||
}
|
||||
|
||||
|
@ -1413,6 +1415,19 @@ verify_loop_structure (void)
|
|||
error ("loop %d%'s header does not have exactly 2 entries", i);
|
||||
err = 1;
|
||||
}
|
||||
if (loop->latch)
|
||||
{
|
||||
if (!find_edge (loop->latch, loop->header))
|
||||
{
|
||||
error ("loop %d%'s latch does not have an edge to its header", i);
|
||||
err = 1;
|
||||
}
|
||||
if (!dominated_by_p (CDI_DOMINATORS, loop->latch, loop->header))
|
||||
{
|
||||
error ("loop %d%'s latch is not dominated by its header", i);
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
|
||||
{
|
||||
if (!single_succ_p (loop->latch))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/56350
|
||||
* gcc.dg/torture/pr56350.c: New testcase.
|
||||
|
||||
2013-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56321
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int a, b;
|
||||
short c;
|
||||
|
||||
void f(void)
|
||||
{
|
||||
int a = 0;
|
||||
int *k = 0;
|
||||
|
||||
for(; a < 2; a++);
|
||||
|
||||
if(!!(b |= a < 3) - 1)
|
||||
{
|
||||
if(0)
|
||||
for (;; a++)
|
||||
{
|
||||
for (; c; *k = 0);
|
||||
lbl1:
|
||||
;
|
||||
}
|
||||
|
||||
for(; *k; k++)
|
||||
{
|
||||
c = b ? : a;
|
||||
|
||||
if (c)
|
||||
lbl2:
|
||||
b = 0;
|
||||
}
|
||||
goto lbl1;
|
||||
}
|
||||
|
||||
for(;; b++)
|
||||
{
|
||||
if(b)
|
||||
goto lbl2;
|
||||
|
||||
k = &b;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue