diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-08 19:25:16 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-08-08 19:25:16 -0400 |
commit | beb5a9b86e2cae18089a05b77b818e6649ccc770 (patch) | |
tree | 16b9c74e2ac3e971203912e196493901f9c091a1 /gcc/reload.c | |
parent | 1d19ceaaea3ea90a4c5b91ca1a126a38d210dda1 (diff) | |
download | gcc-beb5a9b86e2cae18089a05b77b818e6649ccc770.zip gcc-beb5a9b86e2cae18089a05b77b818e6649ccc770.tar.gz gcc-beb5a9b86e2cae18089a05b77b818e6649ccc770.tar.bz2 |
(find_reloads): Force reload for paradoxical SUBREG of MEM if
BYTES_BIG_ENDIAN.
From-SVN: r7875
Diffstat (limited to 'gcc/reload.c')
-rw-r--r-- | gcc/reload.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index b1727c8..e48ce28 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -2566,7 +2566,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) || GET_CODE (operand) == PLUS /* We must force a reload of paradoxical SUBREGs of a MEM because the alignment of the inner value - may not be enough to do the outer reference. + may not be enough to do the outer reference. On + big-endian machines, it may also reference outside + the object. On machines that extend byte operations and we have a SUBREG where both the inner and outer modes are no wider @@ -2584,6 +2586,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) < BIGGEST_ALIGNMENT) && (GET_MODE_SIZE (operand_mode[i]) > GET_MODE_SIZE (GET_MODE (operand)))) + || (GET_CODE (operand) == MEM && BYTES_BIG_ENDIAN) #ifdef LOAD_EXTEND_OP || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD && (GET_MODE_SIZE (GET_MODE (operand)) |