(optimize_reg_copy_1): Only update reg_live_length if it is
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 22 Mar 1996 14:11:37 +0000 (09:11 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 22 Mar 1996 14:11:37 +0000 (09:11 -0500)
non-negative.

From-SVN: r11596

gcc/local-alloc.c

index c36aca8948b4b3bd70153618b3e2130932ccb181..bde83b2e4c3f27ef2270dea11ef9840dd8b7ab1b 100644 (file)
@@ -818,18 +818,24 @@ optimize_reg_copy_1 (insn, dest, src)
            {
              if (sregno >= FIRST_PSEUDO_REGISTER)
                {
-                 reg_live_length[sregno] -= length;
-                 /* reg_live_length is only an approximation after combine
-                    if sched is not run, so make sure that we still have
-                    a reasonable value.  */
-                 if (reg_live_length[sregno] < 2)
-                   reg_live_length[sregno] = 2;
+                 if (reg_live_length[sregno] >= 0)
+                   {
+                     reg_live_length[sregno] -= length;
+                     /* reg_live_length is only an approximation after
+                        combine if sched is not run, so make sure that we
+                        still have a reasonable value.  */
+                     if (reg_live_length[sregno] < 2)
+                       reg_live_length[sregno] = 2;
+                   }
+
                  reg_n_calls_crossed[sregno] -= n_calls;
                }
 
              if (dregno >= FIRST_PSEUDO_REGISTER)
                {
-                 reg_live_length[dregno] += d_length;
+                 if (reg_live_length[dregno] >= 0)
+                   reg_live_length[dregno] += d_length;
+
                  reg_n_calls_crossed[dregno] += d_n_calls;
                }