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")