> 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,

OK, I will re-test with this variant, it is shorter indeed ;)

Thanks,
Honza
> 
> Zdenek

Reply via email to