On Mon, Oct 14, 2024 at 4:30 AM Andrew Pinski <quic_apin...@quicinc.com> wrote:
>
> The classes pass_dce and pass_cd_dce share the same mechansim for their
> params and almost the same execute functionality so let's create a new
> base class which will be used for these two classes and move the common
> code into the same one.
>
> Note update_address_taken_p was updated to be a NSDMI instead of initializing
> it explicitly in the constructor.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

Thanks,
Richard.

> gcc/ChangeLog:
>
>         * tree-ssa-dce.cc (tree_ssa_dce): Remove.
>         (tree_ssa_cd_dce): Remove.
>         (class pass_dce_base): New class.
>         (class pass_dce): Use pass_dce_base as the base class.
>         (class pass_cd_dce): Likewise.
>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/tree-ssa-dce.cc | 72 +++++++++++++++++++--------------------------
>  1 file changed, 31 insertions(+), 41 deletions(-)
>
> diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc
> index 66612b5d575..3075459e25f 100644
> --- a/gcc/tree-ssa-dce.cc
> +++ b/gcc/tree-ssa-dce.cc
> @@ -2057,19 +2057,6 @@ perform_tree_ssa_dce (bool aggressive)
>    return todo;
>  }
>
> -/* Pass entry points.  */
> -static unsigned int
> -tree_ssa_dce (void)
> -{
> -  return perform_tree_ssa_dce (/*aggressive=*/false);
> -}
> -
> -static unsigned int
> -tree_ssa_cd_dce (void)
> -{
> -  return perform_tree_ssa_dce (/*aggressive=*/optimize >= 2);
> -}
> -
>  namespace {
>
>  const pass_data pass_data_dce =
> @@ -2085,15 +2072,11 @@ const pass_data pass_data_dce =
>    0, /* todo_flags_finish */
>  };
>
> -class pass_dce : public gimple_opt_pass
> +class pass_dce_base : public gimple_opt_pass
>  {
>  public:
> -  pass_dce (gcc::context *ctxt)
> -    : gimple_opt_pass (pass_data_dce, ctxt), update_address_taken_p (false)
> -  {}
> -
>    /* opt_pass methods: */
> -  opt_pass * clone () final override { return new pass_dce (m_ctxt); }
> +  bool gate (function *) final override { return flag_tree_dce != 0; }
>    void set_pass_param (unsigned n, bool param) final override
>      {
>        gcc_assert (n == 0 || n == 1);
> @@ -2102,17 +2085,38 @@ public:
>        else if (n == 1)
>         remove_unused_locals_p = param;
>      }
> -  bool gate (function *) final override { return flag_tree_dce != 0; }
> -  unsigned int execute (function *) final override
> +
> +protected:
> +  pass_dce_base (const pass_data &data, gcc::context *ctxt)
> +    : gimple_opt_pass (data, ctxt)
> +  {}
> +  unsigned int execute_dce (function *, bool aggressive)
>      {
> -      return (tree_ssa_dce ()
> +      return (perform_tree_ssa_dce (aggressive)
>               | (remove_unused_locals_p ? TODO_remove_unused_locals : 0)
>               | (update_address_taken_p ? TODO_update_address_taken : 0));
>      }
>
>  private:
> -  bool update_address_taken_p;
> +  bool update_address_taken_p = false;
>    bool remove_unused_locals_p = false;
> +}; // class pass_dce_base
> +
> +
> +class pass_dce : public pass_dce_base
> +{
> +public:
> +  pass_dce (gcc::context *ctxt)
> +    : pass_dce_base (pass_data_dce, ctxt)
> +  {}
> +
> +  /* opt_pass methods: */
> +  opt_pass * clone () final override { return new pass_dce (m_ctxt); }
> +  unsigned int execute (function *func) final override
> +    {
> +      return execute_dce (func, /*aggressive=*/false);
> +    }
> +
>  }; // class pass_dce
>
>  } // anon namespace
> @@ -2138,34 +2142,20 @@ const pass_data pass_data_cd_dce =
>    0, /* todo_flags_finish */
>  };
>
> -class pass_cd_dce : public gimple_opt_pass
> +class pass_cd_dce : public pass_dce_base
>  {
>  public:
>    pass_cd_dce (gcc::context *ctxt)
> -    : gimple_opt_pass (pass_data_cd_dce, ctxt), update_address_taken_p 
> (false)
> +    : pass_dce_base (pass_data_cd_dce, ctxt)
>    {}
>
>    /* opt_pass methods: */
>    opt_pass * clone () final override { return new pass_cd_dce (m_ctxt); }
> -  void set_pass_param (unsigned n, bool param) final override
> -    {
> -      gcc_assert (n == 0 || n == 1);
> -      if (n == 0)
> -       update_address_taken_p = param;
> -      else if (n == 1)
> -       remove_unused_locals_p = param;
> -    }
> -  bool gate (function *) final override { return flag_tree_dce != 0; }
> -  unsigned int execute (function *) final override
> +  unsigned int execute (function *func) final override
>      {
> -      return (tree_ssa_cd_dce ()
> -             | (remove_unused_locals_p ? TODO_remove_unused_locals : 0)
> -             | (update_address_taken_p ? TODO_update_address_taken : 0));
> +      return execute_dce (func, /*aggressive=*/optimize >= 2);
>      }
>
> -private:
> -  bool update_address_taken_p;
> -  bool remove_unused_locals_p = false;
>  }; // class pass_cd_dce
>
>  } // anon namespace
> --
> 2.43.0
>

Reply via email to