https://gcc.gnu.org/g:7ca7bf12324598cdfef53ed377082f1a8ee829e4
commit 7ca7bf12324598cdfef53ed377082f1a8ee829e4 Author: Ondřej Machota <ondrejmach...@gmail.com> Date: Mon Mar 17 23:30:08 2025 +0100 rtl-ssa-dce: add prefetch as prelive + clone on pass Diff: --- gcc/dce.cc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/gcc/dce.cc b/gcc/dce.cc index 55aeb64269ca..74c1a6f8a879 100644 --- a/gcc/dce.cc +++ b/gcc/dce.cc @@ -1451,8 +1451,7 @@ bool is_rtx_insn_prelive(rtx_insn *insn) { // return !find_call_stack_args (as_a <rtx_call_insn *> (insn), false, fast, arg_stores); // Only rtx_insn should be handled here - auto code = GET_CODE(insn); - gcc_assert(code == INSN); + gcc_assert(GET_CODE(insn) == INSN); /* Don't delete insns that may throw if we cannot do so. */ if (!(cfun->can_delete_dead_exceptions && can_alter_cfg) && !insn_nothrow_p (insn)) @@ -1473,6 +1472,11 @@ bool is_rtx_insn_prelive(rtx_insn *insn) { if (GET_CODE(body) == CLOBBER) // gcc/gcc/testsuite/gcc.c-torture/compile/20000605-1.c return true; + if (GET_CODE(body) == PREFETCH) + return true; + + // See deletable_insn_p_1 for UNSPEC. TRAP_IF is caught by may_trap_or_fault_p + // may_trap_or_fault_p helps a lot to pass some tests from RUNTESTSFLAGS=execute.exp // e. g. this one: testsuite/gcc.c-torture/execute/20020418-1.c // TODO : debug the testcase @@ -1481,10 +1485,6 @@ bool is_rtx_insn_prelive(rtx_insn *insn) { if (side_effects_with_mem(body) || can_throw_internal(body) || may_trap_or_fault_p(body)) return true; - // TODO : parallel, {pre,post}_{int,dec}, {pre,post}_modify, may_trap_or_fault_p - // Parallel is handled by volatile_refs_p - - return false; } @@ -1764,8 +1764,9 @@ namespace public: pass_rtl_ssa_dce(gcc::context *ctxt) : rtl_opt_pass(pass_data_rtl_ssa_dce, ctxt) - { - } + {} + + opt_pass * clone () final override { return new pass_rtl_ssa_dce (m_ctxt); } /* opt_pass methods: */ bool gate(function *) final override { return optimize > 0 && flag_dce; }