diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-26 18:15:29 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-26 18:15:29 -0400 |
commit | 1b4d2764e3d7b87e1db457f2378d70c7fd35d031 (patch) | |
tree | 939ab542e548cd607a738859d961bee22af65766 /gcc | |
parent | a89088491643926984b58ed8d7349de5b80d5c30 (diff) | |
download | gcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.zip gcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.tar.gz gcc-1b4d2764e3d7b87e1db457f2378d70c7fd35d031.tar.bz2 |
(find_reloads_address): When check for out of range constant plus register...
(find_reloads_address): When check for out of range constant plus
register, accept any hard register instead of just fp, ap, sp.
From-SVN: r10521
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/reload.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index 620c90d..b64cb63 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4240,17 +4240,15 @@ find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels) return 0; } - /* If we have address of a stack slot but it's not valid - (displacement is too large), compute the sum in a register. */ + /* If we have address of a stack slot but it's not valid because the + displacement is too large, compute the sum in a register. + Handle all base registers here, not just fp/ap/sp, because on some + targets (namely SH) we can also get too large displacements from + big-endian corrections. */ else if (GET_CODE (ad) == PLUS - && (XEXP (ad, 0) == frame_pointer_rtx -#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM - || XEXP (ad, 0) == hard_frame_pointer_rtx -#endif -#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM - || XEXP (ad, 0) == arg_pointer_rtx -#endif - || XEXP (ad, 0) == stack_pointer_rtx) + && GET_CODE (XEXP (ad, 0)) == REG + && REGNO (XEXP (ad, 0)) < FIRST_PSEUDO_REGISTER + && REG_OK_FOR_BASE_P (XEXP (ad, 0)) && GET_CODE (XEXP (ad, 1)) == CONST_INT) { /* Unshare the MEM rtx so we can safely alter it. */ |