diff options
author | Andrew Pinski <quic_apinski@quicinc.com> | 2024-10-13 11:40:39 -0700 |
---|---|---|
committer | Andrew Pinski <quic_apinski@quicinc.com> | 2024-10-14 07:35:02 -0700 |
commit | ddd46d481a630bc31e292927fdeb1cc5c6808257 (patch) | |
tree | 498023b6c4d16bc3554310ae5cb1b4a5a4ac68bd /gcc | |
parent | 60de5585812f59a3095fa6208b01ddb8382634a0 (diff) | |
download | gcc-ddd46d481a630bc31e292927fdeb1cc5c6808257.zip gcc-ddd46d481a630bc31e292927fdeb1cc5c6808257.tar.gz gcc-ddd46d481a630bc31e292927fdeb1cc5c6808257.tar.bz2 |
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_apinski@quicinc.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-ssa-dce.cc | 72 |
1 files changed, 31 insertions, 41 deletions
diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index 66612b5..3075459 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 |