cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns which cannot throw.
authorJakub Jelinek <jakub@redhat.com>
Thu, 8 Nov 2001 23:14:26 +0000 (00:14 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 8 Nov 2001 23:14:26 +0000 (00:14 +0100)
* cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns
which cannot throw.

From-SVN: r46863

gcc/ChangeLog
gcc/cfgrtl.c

index 06fa1f65f0f0d7fcc367f7dc29e6c42467c5fc8d..6535209c9718dc8cefdfaa5c8250a7af868b86b1 100644 (file)
@@ -1,3 +1,8 @@
+2001-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       * cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns
+       which cannot throw.
+
 Thu Nov  8 18:00:55 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * explow.c (convert_memory_address, case SUBREG): Only return
index 2987a50661875124e52fe98170f67e5fee3e8a62..5d785cafb50015a3ab4eeb8436c05f672cdcefae 100644 (file)
@@ -1819,7 +1819,7 @@ purge_dead_edges (bb)
      basic_block bb;
 {
   edge e, next;
-  rtx insn = bb->end;
+  rtx insn = bb->end, note;
   bool purged = false;
 
   if (GET_CODE (insn) == JUMP_INSN && !simplejump_p (insn))
@@ -1878,6 +1878,17 @@ purge_dead_edges (bb)
       return purged;
     }
 
+  /* If this instruction cannot trap, remove REG_EH_REGION notes.  */
+  if (GET_CODE (insn) == INSN
+      && (note = find_reg_note (insn, REG_EH_REGION, NULL)))
+    {
+      rtx eqnote;
+      if (! may_trap_p (PATTERN (insn))
+         || ((eqnote = find_reg_equal_equiv_note (insn))
+             && ! may_trap_p (XEXP (eqnote, 0))))
+       remove_note (insn, note);
+    }
+
   /* Cleanup abnormal edges caused by throwing insns that have been
      eliminated.  */
   if (! can_throw_internal (bb->end))