Hi,
the change in my patch was intentional, I forgot to send the email. Sorry for 
that.
The reason is that labels/predictions/debug statements now go specially though 
DCE
and are marked as neecessary, but not really handled so (i.e. we can remove 
conditional
controlling only debug statements).
This can cause an infinite loop.
> > It's apparently another bug in the DCE pass.  
> 
> But it comes from a stalled ABNORMAL flag after the FRE3 pass so:

I suppose the CFG verifier should also catch this.  I wonder how this can lead
to wrong code as opossed to infinite loop?
I can imagine DCE being confused about non-control-flow stmt and conclude the
abnormal path as the path leaving the loop.  I will look into the testcase more.

Thanks for working this out!
Honza
> 
> Index: tree-ssa-pre.c
> ===================================================================
> --- tree-ssa-pre.c    (revision 231856)
> +++ tree-ssa-pre.c    (working copy)
> @@ -4128,6 +4128,14 @@ eliminate_dom_walker::before_dom_childre
>                     print_gimple_stmt (dump_file, stmt, 0, 0);
>                   }
>  
> +               if (is_gimple_call (stmt)
> +                   && stmt_can_make_abnormal_goto (stmt))
> +                 {
> +                   bitmap_set_bit (need_ab_cleanup, gimple_bb (stmt)-
> >index);
> +                   if (dump_file && (dump_flags & TDF_DETAILS))
> +                     fprintf (dump_file, "  Removed AB side-effects.\n");
> +                 }
> +
>                 pre_stats.eliminations++;
>                 continue;
>               }
> 
> is apparently sufficient.  Testing...
> 
> -- 
> Eric Botcazou

Reply via email to