]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[LRA]: Fix sparc bootstrap after recent patch for fp elimination for avr LRA port
authorVladimir N. Makarov <vmakarov@redhat.com>
Sat, 22 Jul 2023 00:28:50 +0000 (20:28 -0400)
committerVladimir N. Makarov <vmakarov@redhat.com>
Sat, 22 Jul 2023 00:29:55 +0000 (20:29 -0400)
The recent patch for fp elimination for avr LRA port modified an assert
which can be wrong for targets using hard frame pointer different from
frame pointer.  Also for such ports spilling pseudos assigned to fp
was wrong too in the new code.  Although this code is not used for any target
currently using LRA except for avr.  Given patch fixes the issues.

gcc/ChangeLog:

* lra-eliminations.cc (update_reg_eliminate): Fix the assert.
(lra_update_fp2sp_elimination): Use HARD_FRAME_POINTER_REGNUM
instead of FRAME_POINTER_REGNUM to spill pseudos.

gcc/lra-eliminations.cc

index cf0aa94b69aacbffd542d5e530c2266719fcbef4..1f4e3fec9e0ed7576fccaaa6ab2e34bf3df53a1b 100644 (file)
@@ -1179,8 +1179,7 @@ update_reg_eliminate (bitmap insns_with_changed_offsets)
          gcc_assert (ep->to_rtx != stack_pointer_rtx
                      || (ep->from == FRAME_POINTER_REGNUM
                          && !elimination_fp2sp_occured_p)
-                     || (ep->from != FRAME_POINTER_REGNUM
-                         && ep->from < FIRST_PSEUDO_REGISTER
+                     || (ep->from < FIRST_PSEUDO_REGISTER
                          && fixed_regs [ep->from]));
 
          /* Mark that is not eliminable anymore.  */
@@ -1398,7 +1397,7 @@ lra_update_fp2sp_elimination (void)
             "     Frame pointer can not be eliminated anymore\n");
   frame_pointer_needed = true;
   CLEAR_HARD_REG_SET (set);
-  add_to_hard_reg_set (&set, Pmode, FRAME_POINTER_REGNUM);
+  add_to_hard_reg_set (&set, Pmode, HARD_FRAME_POINTER_REGNUM);
   spill_pseudos (set);
   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
     if (ep->from == FRAME_POINTER_REGNUM && ep->to == STACK_POINTER_REGNUM)