]> gcc.gnu.org Git - gcc.git/commitdiff
(nonlocal_label_list): New variable.
authorJim Wilson <wilson@gcc.gnu.org>
Wed, 21 Jul 1993 21:44:07 +0000 (14:44 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 21 Jul 1993 21:44:07 +0000 (14:44 -0700)
(combine_instructions): Set it.
(try_combine, distribute_links): CALL_INSN terminates a basic
block if nonlocal_label_list is set.

From-SVN: r4960

gcc/combine.c

index 879f8c3f551c49bfd45abf459ee9a9c31d265094..fa18f29a134da4741f81a93cf150ec34ad1d75ec 100644 (file)
@@ -187,6 +187,11 @@ static int subst_low_cuid;
    structures.  */
 
 static int previous_num_undos;
+
+/* This is non-zero if there exists at least one nonlocal_label in the
+   current function.  This affects how basic block structure is determined.  */
+
+static rtx nonlocal_label_list;
 \f
 /* The next group of arrays allows the recording of the last value assigned
    to (hard or pseudo) register n.  We use this information to see if a
@@ -527,6 +532,8 @@ combine_instructions (f, nregs)
 
   setup_incoming_promotions ();
 
+  nonlocal_label_list = nonlocal_label_rtx_list ();
+
   for (insn = f; insn; insn = next ? next : NEXT_INSN (insn))
     {
       next = 0;
@@ -1875,6 +1882,8 @@ try_combine (i3, i2, i1)
 
          for (insn = NEXT_INSN (i3);
               insn && GET_CODE (insn) != CODE_LABEL
+              && (GET_CODE (PREV_INSN (insn)) != CALL_INSN
+                  || nonlocal_label_list == 0)
               && GET_CODE (PREV_INSN (insn)) != JUMP_INSN;
               insn = NEXT_INSN (insn))
            {
@@ -2047,7 +2056,9 @@ try_combine (i3, i2, i1)
                      XEXP (link, 0) = i3;
 
                if (GET_CODE (insn) == CODE_LABEL
-                   || GET_CODE (insn) == JUMP_INSN)
+                   || GET_CODE (insn) == JUMP_INSN
+                   || (GET_CODE (PREV_INSN (insn)) == CALL_INSN
+                       && nonlocal_label_list != 0))
                  break;
              }
          }
@@ -10037,6 +10048,8 @@ distribute_links (links)
 
       for (insn = NEXT_INSN (XEXP (link, 0));
           (insn && GET_CODE (insn) != CODE_LABEL
+           && (GET_CODE (PREV_INSN (insn)) != CALL_INSN
+               || nonlocal_label_list == 0)
            && GET_CODE (PREV_INSN (insn)) != JUMP_INSN);
           insn = NEXT_INSN (insn))
        if (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
This page took 0.074701 seconds and 5 git commands to generate.