https://gcc.gnu.org/g:ddd46d481a630bc31e292927fdeb1cc5c6808257

commit r15-4335-gddd46d481a630bc31e292927fdeb1cc5c6808257
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Sun Oct 13 11:40:39 2024 -0700

    dce: Use a base common base class for pass_cd_dce and pass_dce
    
    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.
    
    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>

Diff:
---
 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 66612b5d5751..3075459e25f4 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

Reply via email to