re PR target/15417 (ICE while building an avr-cross compiler)
authorDenis Chertykov <denisc@overta.ru>
Tue, 31 Aug 2004 20:25:32 +0000 (20:25 +0000)
committerDenis Chertykov <denisc@gcc.gnu.org>
Tue, 31 Aug 2004 20:25:32 +0000 (00:25 +0400)
PR target/15417
* config/avr/avr.c (avr_hard_regno_mode_ok): Enable usage of
frame pointer register only in Pmode while reload in progress.

From-SVN: r86842

gcc/ChangeLog
gcc/config/avr/avr.c

index bc2d7bd16657309c81c6bc4cb038ea8382bec47d..26916e81b380413908fa2787d421d4bea71fa6cb 100644 (file)
@@ -1,3 +1,9 @@
+2004-08-31  Denis Chertykov  <denisc@overta.ru>
+
+       PR target/15417
+       * config/avr/avr.c (avr_hard_regno_mode_ok): Enable usage of
+       frame pointer register only in Pmode while reload in progress.
+
 2004-08-31  Stephane Carrez  <stcarrez@nerim.fr>
 
        PR target/15334
index 26d6fdb73fcc49620dcbd158bcd17a450518f2c1..509980559c46e5a81f6e24975a4631cb14ac225f 100644 (file)
@@ -5125,6 +5125,12 @@ avr_hard_regno_mode_ok (int regno, enum machine_mode mode)
   if (regno == REG_Y + 1)
     return 0;
 
+  /* Reload can use r28:r29 for reload register and for frame pointer
+   in one insn. It's wrong. We must disable it.  */
+  if (mode != Pmode && reload_in_progress && frame_pointer_required_p ()
+      && regno <= REG_Y && (regno + GET_MODE_SIZE (mode)) >= (REG_Y + 1))
+    return 0;
+
   if (mode == QImode)
     return 1;
   /*  if (regno < 24 && !AVR_ENHANCED)