loop.c (scan_loop): Be more selective about what invariants are moved out of a loop.
authorJeffrey A Law <law@cygnus.com>
Mon, 19 Oct 1998 12:20:32 +0000 (12:20 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 19 Oct 1998 12:20:32 +0000 (06:20 -0600)
        * loop.c (scan_loop): Be more selective about what invariants are
        moved out of a loop.

From-SVN: r23178

gcc/ChangeLog
gcc/loop.c

index 6acdbaeb4f23c44a94434c7fed69f464b8260f1b..5d3a4cb020bc4acdee540fd15b1a85f29b622dd6 100644 (file)
@@ -1,3 +1,8 @@
+Mon Oct 19 11:40:56 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * loop.c (scan_loop): Be more selective about what invariants are
+       moved out of a loop.
+
 Mon Oct 19 10:46:58 PDT 1998 Jeff Law  (law@cygnus.com)
 
        * version.c: Bump for snapshot.
index 792992026dd917c9223113cc0089f2a9ef40bebc..749a2ac4b5d9ca1ad0e78ebd14467d0e3f14db10 100644 (file)
@@ -837,13 +837,7 @@ scan_loop (loop_start, end, unroll_p, bct_p)
             We don't know its life-span, so we can't compute the benefit.  */
          if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
            ;
-         else if (/* The set is a user-variable or it is used in
-                     the exit test (this can cause the variable to be
-                     used before it is set just like a
-                     user-variable)...  */
-                  (REG_USERVAR_P (SET_DEST (set))
-                   || REG_LOOP_TEST_P (SET_DEST (set)))
-                  /* And the set is not guaranteed to be executed one
+         else if (/* The set is not guaranteed to be executed one
                      the loop starts, or the value before the set is
                      needed before the set occurs... */
                   && (maybe_never
@@ -854,14 +848,11 @@ scan_loop (loop_start, end, unroll_p, bct_p)
                      something after this point in the loop might
                      depend on its value before the set).  */
                   && !reg_in_basic_block_p (p, SET_DEST (set)))
-           /* It is unsafe to move the set.  The fact that these
-              three conditions are considered in conjunction means
-              that we are assuming various conditions, such as:
-
-                o It's OK to move a set of a variable which was not
-                  created by the user and is not used in an exit test
-                  even if that point in the set would not be reached
-                  during execution of the loop.  */
+           /* It is unsafe to move the set.  
+
+              This code used to consider it OK to move a set of a variable
+              which was not created by the user and not used in an exit test.
+              That behavior is incorrect and was removed.  */
            ;
          else if ((tem = invariant_p (src))
                   && (dependencies == 0