On Wed, Jan 03, 2018 at 02:07:36PM +0100, Martin Liška wrote:
> 2018-01-03  Martin Liska  <mli...@suse.cz>
> 
>       PR tree-optimization/83593
>       * tree-ssa-strlen.c (strlen_check_and_optimize_stmt): Clean-up
>       EH gimple statements.
>       (strlen_dom_walker::before_dom_children): Call
>       gimple_purge_dead_eh_edges.
>       (pass_strlen::execute): Return TODO_cleanup_cfg if needed.

The ChangeLog entry doesn't contain all the changes, like:
> @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "gimple-iterator.h"
>  #include "gimplify-me.h"
>  #include "expr.h"
> +#include "tree-cfg.h"
>  #include "tree-dfa.h"
>  #include "domwalk.h"
>  #include "tree-ssa-alias.h"

the above one.

>  static bool
> -strlen_check_and_optimize_stmt (gimple_stmt_iterator *gsi)
> +strlen_check_and_optimize_stmt (gimple_stmt_iterator *gsi, bool *cleanup_eh)

This one (i.e. addition of a new argument).

> @@ -3318,10 +3337,16 @@ do_invalidate (basic_block dombb, gimple *phi, bitmap 
> visited, int *count)
>  class strlen_dom_walker : public dom_walker
>  {
>  public:
> -  strlen_dom_walker (cdi_direction direction) : dom_walker (direction) {}
> +  strlen_dom_walker (cdi_direction direction)
> +    : dom_walker (direction), m_cleanup_cfg (false)
> +  {}

This one.
>  
>    virtual edge before_dom_children (basic_block);
>    virtual void after_dom_children (basic_block);
> +
> +  /* Flag that will trigger TODO_cleanup_cfg to be returned in strlen
> +     execute function.  */
> +  bool m_cleanup_cfg;

This one too.

> +  bool cleanup_eh = false;
> +
>    /* Attempt to optimize individual statements.  */
>    for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
> -    if (strlen_check_and_optimize_stmt (&gsi))
> +    if (strlen_check_and_optimize_stmt (&gsi, &cleanup_eh))
>        gsi_next (&gsi);

And the fact that strlen_check_and_optimize_stmt caller has been adjusted.

>  
> +  if (cleanup_eh)
> +    {
> +      gimple_purge_dead_eh_edges (bb);
> +      m_cleanup_cfg = true;
> +    }

This should be
  if (cleanup_eh && gimple_purge_dead_eh_edges (bb))
    m_cleanup_cfg = true;

Ok with that change and updated ChangeLog entry if it passes
bootstrap/regtest.

        Jakub

Reply via email to