(reload): Initialize the previous_offset fields in reg_eliminate
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 23 Sep 1996 19:49:52 +0000 (15:49 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 23 Sep 1996 19:49:52 +0000 (15:49 -0400)
before calling setup_save_areas.

From-SVN: r12781

gcc/reload1.c

index a11053f..cac212b 100644 (file)
@@ -1460,19 +1460,26 @@ reload (first, global, dumpfile)
       /* If we have caller-saves, set up the save areas and see if caller-save
         will need a spill register.  */
 
-      if (caller_save_needed
-         && ! setup_save_areas (&something_changed)
-         && caller_save_spill_class  == NO_REGS)
+      if (caller_save_needed)
        {
-         /* The class we will need depends on whether the machine
-            supports the sum of two registers for an address; see
-            find_address_reloads for details.  */
-
-         caller_save_spill_class
-           = double_reg_address_ok ? INDEX_REG_CLASS : BASE_REG_CLASS;
-         caller_save_group_size
-           = CLASS_MAX_NREGS (caller_save_spill_class, Pmode);
-         something_changed = 1;
+         /* Set the offsets for setup_save_areas.  */
+         for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
+              ep++)
+           ep->previous_offset = ep->max_offset;
+
+         if ( ! setup_save_areas (&something_changed)
+             && caller_save_spill_class  == NO_REGS)
+           {
+             /* The class we will need depends on whether the machine
+                supports the sum of two registers for an address; see
+             find_address_reloads for details.  */
+
+             caller_save_spill_class
+               = double_reg_address_ok ? INDEX_REG_CLASS : BASE_REG_CLASS;
+             caller_save_group_size
+               = CLASS_MAX_NREGS (caller_save_spill_class, Pmode);
+             something_changed = 1;
+           }
        }
 
       /* See if anything that happened changes which eliminations are valid.