When the insn to delete is a debug insn there's no point in figuring
out whether it might be the last real insn and thus we have to purge
dead edges.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

2022-05-11  Richard Biener  <rguent...@suse.de>

        PR rtl-optimization/105559
        * cfgrtl.cc (delete_insn_and_edges): Only perform search to BB_END
        for non-debug insns.
---
 gcc/cfgrtl.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/cfgrtl.cc b/gcc/cfgrtl.cc
index 74ea14efc61..8e9fd1266b3 100644
--- a/gcc/cfgrtl.cc
+++ b/gcc/cfgrtl.cc
@@ -240,7 +240,7 @@ delete_insn_and_edges (rtx_insn *insn)
       basic_block bb = BLOCK_FOR_INSN (insn);
       if (BB_END (bb) == insn)
        purge = true;
-      else if (DEBUG_INSN_P (BB_END (bb)))
+      else if (NONDEBUG_INSN_P (insn) && DEBUG_INSN_P (BB_END (bb)))
        for (rtx_insn *dinsn = NEXT_INSN (insn);
             DEBUG_INSN_P (dinsn); dinsn = NEXT_INSN (dinsn))
          if (BB_END (bb) == dinsn)
-- 
2.35.3

Reply via email to