> @@ -1272,7 +1275,7 @@ maybe_optimize_arith_overflow (gimple_stmt_iterator 
> *gsi,
>     contributes nothing to the program, and can be deleted.  */
>  
>  static bool
> -eliminate_unnecessary_stmts (void)
> +eliminate_unnecessary_stmts (bool aggressive)
>  {
>    bool something_changed = false;
>    basic_block bb;
> @@ -1366,7 +1369,9 @@ eliminate_unnecessary_stmts (void)
>                         break;
>                       }
>                   }
> -               if (!dead)
> +               if (!dead
> +                   && (!aggressive
> +                       || bitmap_bit_p (visited_control_parents, bb->index)))

It seems to me that it may be worth to consider case where
visited_control_parents is 0 while all basic blocks in the CD relation
are live for different reasons.  I suppose this can happen in more
complex CFGs when the other arms of conditionals are live...

Honza
>                   {
>                     bitmap_clear (debug_seen);
>                     continue;
> @@ -1876,7 +1881,7 @@ perform_tree_ssa_dce (bool aggressive)
>    propagate_necessity (aggressive);
>    BITMAP_FREE (visited);
>  
> -  something_changed |= eliminate_unnecessary_stmts ();
> +  something_changed |= eliminate_unnecessary_stmts (aggressive);
>    something_changed |= cfg_altered;
>  
>    /* We do not update postdominators, so free them unconditionally.  */
> -- 
> 2.34.1

Reply via email to