(scan_loop): Treat pseudo duplicated for exit tests just
authorRichard Stallman <rms@gnu.org>
Thu, 20 May 1993 04:34:02 +0000 (04:34 +0000)
committerRichard Stallman <rms@gnu.org>
Thu, 20 May 1993 04:34:02 +0000 (04:34 +0000)
like we treat user vars in seeing if we can move a SET.

From-SVN: r4514

gcc/loop.c

index 7c72e8c72b83ac5cfc21a37666fe469bec023fbe..357eee672d9d45d730a627e09d1348719ebc8447 100644 (file)
@@ -682,13 +682,16 @@ scan_loop (loop_start, end, nregs)
            ;
          /* In order to move a register, we need to have one of three cases:
             (1) it is used only in the same basic block as the set
-            (2) it is not a user variable.
+            (2) it is not a user variable and it is not used in the
+                exit test (this can cause the variable to be used
+                before it is set just like a user-variable).
             (3) the set is guaranteed to be executed once the loop starts,
                 and the reg is not used until after that.  */
          else if (! ((! maybe_never
                       && ! loop_reg_used_before_p (set, p, loop_start,
                                                    scan_start, end))
-                     || ! REG_USERVAR_P (SET_DEST (PATTERN (p)))
+                     || (! REG_USERVAR_P (SET_DEST (PATTERN (p)))
+                         && ! REG_LOOP_TEST_P (SET_DEST (PATTERN (p))))
                      || reg_in_basic_block_p (p, SET_DEST (PATTERN (p)))))
            ;
          else if ((tem = invariant_p (src))