https://gcc.gnu.org/g:f75018f0b959b76e0ba0b7bf2dbbe47e80d8cbe6
commit f75018f0b959b76e0ba0b7bf2dbbe47e80d8cbe6 Author: Ondřej Machota <ondrejmach...@gmail.com> Date: Mon Mar 31 08:50:34 2025 +0200 rtl-ssa-dce: improve code Diff: --- gcc/dce.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/gcc/dce.cc b/gcc/dce.cc index 53934d19c0ac..a90a8d9ccf53 100644 --- a/gcc/dce.cc +++ b/gcc/dce.cc @@ -1538,6 +1538,14 @@ bool is_prelive(insn_info *insn) if (def->kind() != access_kind::SET) continue; + // We need to perform some kind of reset_unmarked_insns_debug_uses + // to be able to reproduce ud_dce - now only 4 tests are falling + // because of debug_insn being dependent on parallel with set flags + // gcc.c-torture/execute/20051215-1.c + // gcc.c-torture/execute/20100805-1.c + // gcc.c-torture/execute/pr39339.c + // gcc.c-torture/execute/pr47925.c + // This might be messed up a bit if (def->regno() == FRAME_POINTER_REGNUM || def->regno() == STACK_POINTER_REGNUM) @@ -1813,14 +1821,14 @@ rtl_ssa_dce() rtl_ssa_dce_init(); std::unordered_set<insn_info *> marked = rtl_ssa_dce_mark(); rtl_ssa_dce_sweep(marked); - // std::cerr << "\033[31m" << "SSA debug start" << "\033[0m" << "\n"; - // debug (crtl->ssa); - // for (insn_info * insn : crtl->ssa->all_insns()) { - // if (insn->is_artificial()) - // continue; - // debug(insn->rtl()); - // } - // std::cerr << "\033[31m" << "SSA debug end" << "\033[0m" << "\n"; + std::cerr << "\033[31m" << "SSA debug start" << "\033[0m" << "\n"; + debug (crtl->ssa); + for (insn_info * insn : crtl->ssa->all_insns()) { + if (insn->is_artificial()) + continue; + debug(insn->rtl()); + } + std::cerr << "\033[31m" << "SSA debug end" << "\033[0m" << "\n"; rtl_ssa_dce_done(); // if (delete_trivially_dead_insns(get_insns (), max_reg_num ())) { // std::cerr << "\033[31m" << "rtl_ssa_dce did not delete everything :(" << "\033[0m" << "\n";