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

commit cd276ae9d29e1d0d0c2d25292d5c7a8e7272f707
Author: Ondřej Machota <ondrejmach...@gmail.com>
Date:   Fri May 9 13:32:14 2025 +0200

    rtl-ssa-dce: sketch debugize_insns

Diff:
---
 gcc/dce.cc             | 20 +++++++++++++++++---
 gcc/rtl-ssa/changes.cc |  3 +++
 gcc/timevar.def        |  1 +
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/gcc/dce.cc b/gcc/dce.cc
index e077485c93c3..fdf5a35d6765 100644
--- a/gcc/dce.cc
+++ b/gcc/dce.cc
@@ -1379,7 +1379,7 @@ private:
   void sweep ();
 
   void debuggize_insn (insn_info *);
-  void debbugize_insns (const std::unordered_set<insn_info *> &);
+  void debugize_insns (const std::unordered_set<insn_info *> &);
 
   offset_bitmap m_marked;
   sbitmap mm_marked_phis;
@@ -1877,7 +1877,7 @@ rtl_ssa_dce::debuggize_insn (insn_info *insn)
 }
 
 void
-rtl_ssa_dce::debbugize_insns (const std::unordered_set<insn_info *> 
&depends_on_dead_phi)
+rtl_ssa_dce::debugize_insns (const std::unordered_set<insn_info *> 
&depends_on_dead_phi)
 {
   for (insn_info *insn : crtl->ssa->reverse_all_insns ()) {
     if (insn->is_artificial () || 
@@ -1898,7 +1898,7 @@ rtl_ssa_dce::debbugize_insns (const 
std::unordered_set<insn_info *> &depends_on_
     // def_info* s = nullptr;
     // s->kind() == access_kind::SET
     rtx set;
-    // debbugize_insns should be called only if MAY_HAVE_DEBUG_BIND_INSNS
+    // debugize_insns should be called only if MAY_HAVE_DEBUG_BIND_INSNS
     if (MAY_HAVE_DEBUG_BIND_INSNS
                  && (set = single_set (rtl)) != NULL_RTX
       && !(*defs.begin ())->has_nondebug_insn_uses()
@@ -1929,6 +1929,20 @@ rtl_ssa_dce::debbugize_insns (const 
std::unordered_set<insn_info *> &depends_on_
                                          VAR_INIT_STATUS_INITIALIZED);
                  // count_reg_usage (bind_var_loc, counts + nreg, NULL_RTX, 1);
 
+      rtl_ssa::obstack_watermark watermark = crtl->ssa->new_change_attempt();
+      insn_info *debug_insn = crtl->ssa->create_insn(watermark, DEBUG_INSN, 
rtx bind_var_loc);
+      insn_change change(debug_insn);
+      change.move_range = insn_range_info(insn)
+      // TODO: chains
+
+      def_info *d = *defs.begin ();
+      if (d->kind() == access_kind::SET) {
+        set_info *s = static_cast<set_info *>(d);
+        for (use_info *u : s->all_uses()) {
+          // TODO: transform dependent insns
+        }
+      }
+
                  rtx_insn *bind = emit_debug_insn_before (bind_var_loc, rtl);
 
                  // if (replacements == NULL)
diff --git a/gcc/rtl-ssa/changes.cc b/gcc/rtl-ssa/changes.cc
index eb579ad3ad7e..b9861d24d380 100644
--- a/gcc/rtl-ssa/changes.cc
+++ b/gcc/rtl-ssa/changes.cc
@@ -1281,6 +1281,9 @@ function_info::create_insn (obstack_watermark &watermark,
     case INSN:
       rti = make_insn_raw (pat);
       break;
+       case DEBUG_INSN:
+         rti = make_debug_insn_raw(pat);
+         break;
     default:
       gcc_unreachable ();
     }
diff --git a/gcc/timevar.def b/gcc/timevar.def
index c1029d9dcf36..608451277d34 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -243,6 +243,7 @@ DEFTIMEVAR (TV_JUMP                  , "jump")
 DEFTIMEVAR (TV_FWPROP                , "forward prop")
 DEFTIMEVAR (TV_CSE                   , "CSE")
 DEFTIMEVAR (TV_DCE                   , "dead code elimination")
+DEFTIMEVAR (TV_RTL_SSA_DCE           , "rtl ssa dead code elimination")
 DEFTIMEVAR (TV_DSE1                  , "dead store elim1")
 DEFTIMEVAR (TV_DSE2                  , "dead store elim2")
 DEFTIMEVAR (TV_LOOP                  , "loop analysis")

Reply via email to