OSDN Git Service

2005-09-07 Andreas Krebbel <krebbel1@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Sep 2005 07:52:48 +0000 (07:52 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Sep 2005 07:52:48 +0000 (07:52 +0000)
* reload1.c (fixup_eh_region_note): Remove assertion.
(fixup_abnormal_edges): Reverted removal of call to
find_many_sub_basic_blocks made on 2005-08-31.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103984 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reload1.c

index cac2e62..f97e855 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-07  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * reload1.c (fixup_eh_region_note): Remove assertion.
+       (fixup_abnormal_edges): Reverted removal of call to 
+       find_many_sub_basic_blocks made on 2005-08-31.
+
 2005-09-07  Richard Henderson  <rth@redhat.com>
 
         * function.c (ARG_POINTER_CFA_OFFSET): Move ...
index 236afce..33840b5 100644 (file)
@@ -3788,24 +3788,6 @@ fixup_eh_region_note (rtx insn, rtx prev, rtx next)
        REG_NOTES (i)
          = gen_rtx_EXPR_LIST (REG_EH_REGION, XEXP (note, 0), REG_NOTES (i));
       }
-
-  /* ??? Since we entered with one eh insn, we should exit with one eh insn;
-     otherwise we're unsure that we're not losing an exception.  Except that
-     the instruction stream incoming to reload doesn't pass the "if 
-     reg_eh_region is present, may_trap_p is true" smoke test.
-
-     Worse, even if it did, rtx_addr_can_trap_p returns false for some forms
-     of address that include constants regardless of the actual value of the
-     constant.  If we decide that "int a[3]; a[100000]" should be considered
-     non-trapping, we should get that story straight across more of the
-     compiler.  If we decide that it should trap, then we cannot decide
-     may_trap_p on the basis of rtx_addr_can_trap_p at all.  Which may not
-     be such a big thing -- it doesn't seem hard to get MEM_NOTRAP_P set
-     correctly in the first place.
-
-     Fixing all that is not in the cards for gcc 4.2, so for the nonce we
-     allow all eh insns to evaporate.  */
-  gcc_assert (trap_count <= 1);
 }
 
 /* Reload pseudo-registers into hard regs around each insn as needed.
@@ -8191,6 +8173,15 @@ fixup_abnormal_edges (void)
        }
     }
 
+  /* We've possibly turned single trapping insn into multiple ones.  */
+  if (flag_non_call_exceptions)
+    {
+      sbitmap blocks;
+      blocks = sbitmap_alloc (last_basic_block);
+      sbitmap_ones (blocks);
+      find_many_sub_basic_blocks (blocks);
+    }
+
   if (inserted)
     commit_edge_insertions ();