(reload): If function has nonlocal label, mark all caller-saved regs
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 13 Apr 1997 12:15:28 +0000 (08:15 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 13 Apr 1997 12:15:28 +0000 (08:15 -0400)
as used.

From-SVN: r13863

gcc/reload1.c

index a7b4238d1b5c2f1ce3c2cf3b9b9fb7124d348b48..42fe5c7565c1b7020968a4983f703510c474ef04 100644 (file)
@@ -589,10 +589,18 @@ reload (first, global, dumpfile)
      as homes for pseudo registers.
      This is done here rather than (eg) in global_alloc
      because this point is reached even if not optimizing.  */
-
   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
     mark_home_live (i);
 
+  /* A function that receives a nonlocal goto must save all call-saved
+     registers.  */
+  if (current_function_has_nonlocal_label)
+    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+      {
+       if (! call_used_regs[i] && ! fixed_regs[i])
+         regs_ever_live[i] = 1;
+      }
+
   for (i = 0; i < scratch_list_length; i++)
     if (scratch_list[i])
       mark_scratch_live (scratch_list[i]);