aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorAndy Hutchinson <hutchinsonandy@aim.com>2008-06-15 18:24:27 +0000
committerAndy Hutchinson <hutchinsonandy@gcc.gnu.org>2008-06-15 18:24:27 +0000
commitf4df5771d99a334b5029890619621b643a420db9 (patch)
tree4642715925145ea6e03f7758a9866644a50e3941 /gcc/config
parent147fc44bcd5fdc30c1518a433b42a896a6d42a54 (diff)
downloadgcc-f4df5771d99a334b5029890619621b643a420db9.zip
gcc-f4df5771d99a334b5029890619621b643a420db9.tar.gz
gcc-f4df5771d99a334b5029890619621b643a420db9.tar.bz2
re PR target/36336 (ICE push_reload - psuedo reg_equiv_constant)
PR target/36336 * config/avr/avr.h (LEGITIMIZE_RELOAD_ADDRESS): Add check for reg_equiv_constant. From-SVN: r136818
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/avr/avr.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 90e62a3..d915aff 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -437,6 +437,11 @@ extern int avr_reg_order[];
}
#define XEXP_(X,Y) (X)
+
+/* LEGITIMIZE_RELOAD_ADDRESS will allow register R26/27 to be used, where it
+ is no worse than normal base pointers R28/29 and R30/31. For example:
+ If base offset is greater than 63 bytes or for R++ or --R addressing. */
+
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
do { \
if (1&&(GET_CODE (X) == POST_INC || GET_CODE (X) == PRE_DEC)) \
@@ -448,6 +453,7 @@ do { \
} \
if (GET_CODE (X) == PLUS \
&& REG_P (XEXP (X, 0)) \
+ && reg_equiv_constant[REGNO (XEXP (X, 0))] == 0 \
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
&& INTVAL (XEXP (X, 1)) >= 1) \
{ \