aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-01-29 10:09:30 -0700
committerJeff Law <law@gcc.gnu.org>1993-01-29 10:09:30 -0700
commitf2fbfe928c613bf60a0db04ff744f25ccc5bdfdf (patch)
treeb1e94aae02bf46487726ffe0c9b566468e031157
parentd39b68546912b1dfc4bc0e53de27636ddef41c50 (diff)
downloadgcc-f2fbfe928c613bf60a0db04ff744f25ccc5bdfdf.zip
gcc-f2fbfe928c613bf60a0db04ff744f25ccc5bdfdf.tar.gz
gcc-f2fbfe928c613bf60a0db04ff744f25ccc5bdfdf.tar.bz2
reload.c (find_reloads_toplev): When handling a (subreg (reg)) where (reg) will be replaced by a memory...
* reload.c (find_reloads_toplev): When handling a (subreg (reg)) where (reg) will be replaced by a memory reference, if the memory address is invalid for the mode of the subreg, then search the memory address for reloads. From-SVN: r3385
-rw-r--r--gcc/reload.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index c75f158..3ea095c 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -3477,7 +3477,9 @@ find_reloads_toplev (x, ind_levels, is_set_dest)
#endif
&& (reg_equiv_address[regno] != 0
|| (reg_equiv_mem[regno] != 0
- && ! offsettable_memref_p (reg_equiv_mem[regno]))))
+ && (! strict_memory_address_p (GET_MODE (x),
+ XEXP (reg_equiv_mem[regno], 0))
+ || ! offsettable_memref_p (reg_equiv_mem[regno])))))
{
int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
rtx addr = (reg_equiv_address[regno] ? reg_equiv_address[regno]