Hi,
> --- 316,333 ----
> normally. We may assume that e->dest is not a header of any loop,
> as it now has exactly one predecessor. */
> while (loop_outer (e->src->loop_father)
> ! && dominated_by_p (CDI_DOMINATORS,
> ! e->src->loop_father->latch, e->dest))
> unloop (e->src->loop_father, &irred_invalidated);
> + l = e->src->loop_father;
> + while (l && loop_outer (l))
> + {
> + while (loop_outer (loop_outer (l))
> + && dominated_by_p (CDI_DOMINATORS,
> + loop_outer (l)->latch, e->dest))
> + unloop (loop_outer (l), &irred_invalidated);
> + l = loop_outer (l);
> + }
this will not work when e->src->loop_father is the cancelled loop,
since the first loop tested for removal is loop_outer (e->src->loop_father).
I would suggest
for (l = e->src->loop_father; loop_outer (l); l = f)
{
f = loop_outer (l);
if (dominated_by_p (CDI_DOMINATORS, l->latch, e->dest))
unloop (l, &irred_invalidated);
}
Otherwise ok,
Zdenek