(find_barrier): Always use get_attr_length to compute length of instructions.
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 21 Oct 1995 22:22:27 +0000 (18:22 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 21 Oct 1995 22:22:27 +0000 (18:22 -0400)
(find_barrier): Always use get_attr_length to compute length of
instructions.  If count_hi or count_si out of range at end, need two
PREV_INSN calls not one.

From-SVN: r10496

gcc/config/sh/sh.c

index 8d295156c5c4eaeaa0035cbccb12064d3456db69..3a53b868be5045d75cb7fd160f078a8eafcbc3dd 100644 (file)
@@ -1213,14 +1213,11 @@ find_barrier (from)
      before the table.  This gives 1020.  */
   while (from && count_si < 1020 && count_hi < 512)
     {
-      int inc;
+      int inc = get_attr_length (from);
 
       if (GET_CODE (from) == BARRIER)
        found_barrier = from;
 
-      /* Count the length of this insn - we assume that all moves will
-        be 2 bytes long, except the DImode/DFmode movess.  */
-
       if (broken_move (from))
        {
          rtx src = SET_SRC (PATTERN (from));
@@ -1237,10 +1234,7 @@ find_barrier (from)
            }
          else
            found_si = 1;
-         inc = (GET_MODE_SIZE (GET_MODE (src)) > 4) ? 4 : 2;
        }
-      else
-       inc = get_attr_length (from);
 
       if (GET_CODE (from) == INSN
          && GET_CODE (PATTERN (from)) == SET
@@ -1270,8 +1264,14 @@ find_barrier (from)
         so we'll make one.  */
       rtx label = gen_label_rtx ();
 
-      /* We went one instruction too far above.  */
-      from = PREV_INSN (from);
+      /* If we exceeded the range, then we must back up over the last
+        instruction we looked at.  Otherwise, we just need to undo the
+        NEXT_INSN at the end of the loop.  */
+      if (count_hi > 512 || count_si > 1020)
+       from = PREV_INSN (PREV_INSN (from));
+      else
+       from = PREV_INSN (from);
+
       /* Walk back to be just before any jump or label.
         Putting it before a label reduces the number of times the branch
         around the constant pool table will be hit.  Putting it before