gcse.c (pre_insert_insn): Tweek to notice that calls do not always end basic blocks...
authorRichard Henderson <rth@cygnus.com>
Wed, 7 Oct 1998 17:36:32 +0000 (10:36 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 7 Oct 1998 17:36:32 +0000 (10:36 -0700)
        * gcse.c (pre_insert_insn): Tweek to notice that calls do not
        always end basic blocks for abnormal edge reasons.

From-SVN: r22897

gcc/ChangeLog
gcc/gcse.c

index 8f3850d5288bdb3c956b97363c95a4e89611e149..ce6b19a08dc782df9a4f095fb7bddf37fece2c93 100644 (file)
@@ -1,3 +1,8 @@
+Wed Oct  7 17:33:39 1998  Richard Henderson  <rth@cygnus.com>
+
+       * gcse.c (pre_insert_insn): Tweek to notice that calls do not
+       always end basic blocks for abnormal edge reasons.
+
 Wed Oct  7 14:40:43 1998  Nick Clifton  <nickc@cygnus.com>
 
        * config/i386/i386.h: Remove definition of
index 463959d520ac58661813c04e400c8212b1661353..c77aa33d022e5340b8c46479b6da79cb12745f4a 100644 (file)
@@ -4376,7 +4376,10 @@ pre_insert_insn (expr, bb)
     }
   /* Likewise if the last insn is a call, as will happen in the presence
      of exception handling.  */
-  else if (GET_CODE (insn) == CALL_INSN)
+  /* ??? The flag_exceptions test is not exact.  We don't know if we are
+     actually in an eh region.  Fix flow to tell us this.  */
+  else if (GET_CODE (insn) == CALL_INSN
+          && (current_function_has_nonlocal_label || flag_exceptions))
     {
       HARD_REG_SET parm_regs;
       int nparm_regs;
@@ -4389,6 +4392,8 @@ pre_insert_insn (expr, bb)
 
       /* It should always be the case that we can put these instructions
         anywhere in the basic block.  Check this.  */
+      /* ??? Well, it would be the case if we'd split all critical edges.
+        Since we didn't, we may very well abort.  */
       if (!TEST_BIT (pre_antloc[bb], expr->bitmap_index)
          && !TEST_BIT (pre_transp[bb], expr->bitmap_index))
        abort ();