(unroll_loop): Don't move reg if used in copy_end and that is a
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 May 1995 16:48:07 +0000 (16:48 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 May 1995 16:48:07 +0000 (16:48 +0000)
JUMP_INSN.

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

gcc/unroll.c

index 84a79ce..050273f 100644 (file)
@@ -728,17 +728,17 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
     int copy_start_luid = INSN_LUID (copy_start);
     int copy_end_luid = INSN_LUID (copy_end);
 
+    /* If a register is used in the jump insn, we must not duplicate it
+       since it will also be used outside the loop.  */
+    if (GET_CODE (copy_end) == JUMP_INSN)
+      copy_end_luid--;
+
     for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; ++j)
-      {
-       int first_uid = regno_first_uid[j];
-       int last_uid = regno_last_uid[j];
-
-       if (first_uid > 0 && first_uid <= max_uid_for_loop
-           && uid_luid[first_uid] >= copy_start_luid
-           && last_uid > 0 && last_uid <= max_uid_for_loop
-           && uid_luid[last_uid] <= copy_end_luid)
-         local_regno[j] = 1;
-      }
+      if (regno_first_uid[j] > 0 && regno_first_uid[j] <= max_uid_for_loop
+         && uid_luid[regno_first_uid[j]] >= copy_start_luid
+         && regno_last_uid[j] > 0 && regno_last_uid[j] <= max_uid_for_loop
+         && uid_luid[regno_last_uid[j]] <= copy_end_luid)
+       local_regno[j] = 1;
   }
 
   /* If this loop requires exit tests when unrolled, check to see if we