]> gcc.gnu.org Git - gcc.git/commitdiff
flow.c (count_basic_blocks, [...]): Remove last change.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Sat, 15 Apr 2000 15:20:58 +0000 (15:20 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 15 Apr 2000 15:20:58 +0000 (11:20 -0400)
* flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
* optabs.c (emit_libcall_block): If have REG_EHG_REGION, update
region number to -1.

From-SVN: r33164

gcc/ChangeLog
gcc/flow.c
gcc/optabs.c

index 7d752a671b323bee2395fcab3613d50ae96cf62f..2c8a972fc155b6507324a82f6b9fcc8d8b69a417 100644 (file)
@@ -1,3 +1,9 @@
+Sat Apr 15 10:59:19 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
+       * optabs.c (emit_libcall_block): If have REG_EHG_REGION, update
+       region number to -1.
+
 2000-04-15  Richard Earnshaw (rearnsah@arm.com)
 
        * emit-rtl.c (unshare_all_rtl_again): Unmark everything, then
index c0583e87f054450ba3e695e8a417846aefa7dac3..9f7537e3aeab6a367845d82649c0851f73a9ff93 100644 (file)
@@ -462,7 +462,6 @@ count_basic_blocks (f)
   register int count = 0;
   int eh_region = 0;
   int call_had_abnormal_edge = 0;
-  int in_libcall = 0;
 
   prev_code = JUMP_INSN;
   for (insn = f; insn; insn = NEXT_INSN (insn))
@@ -473,17 +472,9 @@ count_basic_blocks (f)
          || (GET_RTX_CLASS (code) == 'i'
              && (prev_code == JUMP_INSN
                  || prev_code == BARRIER
-                 || (prev_code == CALL_INSN
-                     && call_had_abnormal_edge && in_libcall == 0))))
+                 || (prev_code == CALL_INSN && call_had_abnormal_edge))))
        count++;
 
-      /* Track whether or not we are in a LIBCALL block.  These must
-        all be within the same basic block.  */
-      if (find_reg_note (insn, REG_LIBCALL, NULL_RTX) != 0)
-       in_libcall++;
-      else if (find_reg_note (insn, REG_RETVAL, NULL_RTX) != 0)
-       in_libcall--;
-
       /* Record whether this call created an edge.  */
       if (code == CALL_INSN)
        {
@@ -538,7 +529,6 @@ find_basic_blocks_1 (f)
   rtx label_value_list = NULL_RTX;
   rtx head = NULL_RTX;
   rtx end = NULL_RTX;
-  int in_libcall = 0;
   
   /* We process the instructions in a slightly different way than we did
      previously.  This is so that we see a NOTE_BASIC_BLOCK after we have
@@ -671,9 +661,8 @@ find_basic_blocks_1 (f)
              call_has_abnormal_edge = 1;
 
            /* A basic block ends at a call that can either throw or
-              do a non-local goto.  LIBCALLs must reside totally in one
-              basic block, so don't end a block after them.  */
-           if (call_has_abnormal_edge && in_libcall == 0)
+              do a non-local goto.  */
+           if (call_has_abnormal_edge)
              {
              new_bb_inclusive:
                if (head == NULL_RTX)
@@ -713,27 +702,21 @@ find_basic_blocks_1 (f)
             we know isn't part of any otherwise visible control flow.  */
             
          for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
-           {
-             if (REG_NOTE_KIND (note) == REG_LABEL)
-               {
-                 rtx lab = XEXP (note, 0), next;
+           if (REG_NOTE_KIND (note) == REG_LABEL)
+             {
+               rtx lab = XEXP (note, 0), next;
 
-                 if (lab == eh_return_stub_label)
-                   ;
-                 else if ((next = next_nonnote_insn (lab)) != NULL
-                          && GET_CODE (next) == JUMP_INSN
-                          && (GET_CODE (PATTERN (next)) == ADDR_VEC
-                              || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
+               if (lab == eh_return_stub_label)
                    ;
-                 else
-                   label_value_list
-                     = alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
-               }
-             else if (REG_NOTE_KIND (note) == REG_LIBCALL)
-               in_libcall++;
-             else if (REG_NOTE_KIND (note) == REG_RETVAL)
-               in_libcall--;
-           }
+               else if ((next = next_nonnote_insn (lab)) != NULL
+                        && GET_CODE (next) == JUMP_INSN
+                        && (GET_CODE (PATTERN (next)) == ADDR_VEC
+                            || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
+                 ;
+               else
+                 label_value_list
+                   = alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
+             }
        }
     }
 
index 85bb24eae616840fb3346af3d4cd534f7319b788..5f2a76ad9b9757d75db9468dd2162dc48a7143f1 100644 (file)
@@ -2758,19 +2758,21 @@ emit_libcall_block (insns, target, result, equiv)
   rtx prev, next, first, last, insn;
 
   /* look for any CALL_INSNs in this sequence, and attach a REG_EH_REGION
-     reg note to indicate that this call cannot throw. (Unless there is
-     already a REG_EH_REGION note.) */
+     reg note to indicate that this call cannot throw or execute a nonlocal
+     goto. (Unless there is already a REG_EH_REGION note, in which case
+     we update it.)  */
 
   for (insn = insns; insn; insn = NEXT_INSN (insn))
-    {
-      if (GET_CODE (insn) == CALL_INSN)
-        {
-          rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
-          if (note == NULL_RTX)
-            REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1),
-                                                  REG_NOTES (insn));
-        }
-    }
+    if (GET_CODE (insn) == CALL_INSN)
+      {
+       rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+
+       if (note != 0)
+         XEXP (note, 0) = GEN_INT (-1);
+       else
+         REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1),
+                                               REG_NOTES (insn));
+      }
 
   /* First emit all insns that set pseudos.  Remove them from the list as
      we go.  Avoid insns that set pseudos which were referenced in previous
This page took 0.110924 seconds and 5 git commands to generate.