[Bug tree-optimization/105740] missed optimization switch transformation for conditions with duplicate conditions
luoxhu at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jun 21 02:45:07 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105740
--- Comment #2 from luoxhu at gcc dot gnu.org ---
Run if_to_switch and convert_switch again after copyprop2 could remove the
redundant statement and expose opportunity for if-to-switch again, is this
reasonable or just move if-to-switch/switch-conversion later run only once?
diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc
index f7b0b02628b..8f55d0e2f75 100644
--- a/gcc/gimple-if-to-switch.cc
+++ b/gcc/gimple-if-to-switch.cc
@@ -484,6 +484,8 @@ public:
|| bit_test_cluster::is_enabled ());
}
+ opt_pass *clone () { return new pass_if_to_switch (m_ctxt); }
+
virtual unsigned int execute (function *);
}; // class pass_if_to_switch
diff --git a/gcc/passes.def b/gcc/passes.def
index 375d3d62d51..b257307e085 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -243,6 +243,8 @@ along with GCC; see the file COPYING3. If not see
Clean them up. Failure to do so well can lead to false
positives from warnings for erroneous code. */
NEXT_PASS (pass_copy_prop);
+ NEXT_PASS (pass_if_to_switch);
+ NEXT_PASS (pass_convert_switch);
/* Identify paths that should never be executed in a conforming
program and isolate those paths. */
NEXT_PASS (pass_isolate_erroneous_paths);
diff --git a/gcc/tree-switch-conversion.cc b/gcc/tree-switch-conversion.cc
index 50a17927f39..d5c8262785e 100644
--- a/gcc/tree-switch-conversion.cc
+++ b/gcc/tree-switch-conversion.cc
@@ -2429,6 +2429,9 @@ public:
/* opt_pass methods: */
virtual bool gate (function *) { return flag_tree_switch_conversion != 0; }
+
+ opt_pass *clone () { return new pass_convert_switch (m_ctxt); }
+
virtual unsigned int execute (function *);
More information about the Gcc-bugs
mailing list