aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDenis Chertykov <denisc@overta.ru>2004-08-31 20:25:32 +0000
committerDenis Chertykov <denisc@gcc.gnu.org>2004-09-01 00:25:32 +0400
commit678584fc80fc69fbd3c4f5f15d484ed6006f41be (patch)
treec272fd851277c3b6414354daa4ce337aa8a8dcd1 /gcc
parent43b430575923b65a922d3a4b1ec414296eaf9075 (diff)
downloadgcc-678584fc80fc69fbd3c4f5f15d484ed6006f41be.zip
gcc-678584fc80fc69fbd3c4f5f15d484ed6006f41be.tar.gz
gcc-678584fc80fc69fbd3c4f5f15d484ed6006f41be.tar.bz2
re PR target/15417 (ICE while building an avr-cross compiler)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bc2d7bd..26916e8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 26d6fdb..5099805 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -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)