diff options
author | Richard Henderson <rth@cygnus.com> | 1998-03-04 18:42:22 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1998-03-04 18:42:22 -0800 |
commit | 5ec105cd718cc7a894cbfcd14f69863878ea8ab0 (patch) | |
tree | 486ebb0478e653083409bdc4b857feeee65c7081 | |
parent | ebb7b10b6d44ed8fcbc8318534bac98bc29643ef (diff) | |
download | gcc-5ec105cd718cc7a894cbfcd14f69863878ea8ab0.zip gcc-5ec105cd718cc7a894cbfcd14f69863878ea8ab0.tar.gz gcc-5ec105cd718cc7a894cbfcd14f69863878ea8ab0.tar.bz2 |
reload.c (find_reloads): Always force (subreg (mem)) to be reloaded if WORD_REGISTER_OPERATIONS.
* reload.c (find_reloads): Always force (subreg (mem)) to be
reloaded if WORD_REGISTER_OPERATIONS.
From-SVN: r18416
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload.c | 16 |
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c99b2d2..f5bb3fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Mar 5 02:41:27 1998 Richard Henderson <rth@cygnus.com> + + * reload.c (find_reloads): Always force (subreg (mem)) to be + reloaded if WORD_REGISTER_OPERATIONS. + Thu Mar 5 02:14:44 1998 Richard Henderson <rth@cygnus.com> * haifa-sched.c (free_list): Rename from free_pnd_lst. diff --git a/gcc/reload.c b/gcc/reload.c index bd22bbe..4187b12 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -2753,10 +2753,20 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) register access. If the data is, in fact, in memory we must always load using the size assumed to be in the register and let the insn do the different-sized - accesses. */ + accesses. + + This is doubly true if WORD_REGISTER_OPERATIONS. In + this case eliminate_regs has left non-paradoxical + subregs for push_reloads to see. Make sure it does + by forcing the reload. + + ??? When is it right at this stage to have a subreg + of a mem that is _not_ to be handled specialy? IMO + those should have been reduced to just a mem. */ || ((GET_CODE (operand) == MEM || (GET_CODE (operand)== REG && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) +#ifndef WORD_REGISTER_OPERATIONS && (((GET_MODE_BITSIZE (GET_MODE (operand)) < BIGGEST_ALIGNMENT) && (GET_MODE_SIZE (operand_mode[i]) @@ -2771,7 +2781,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) && INTEGRAL_MODE_P (GET_MODE (operand)) && LOAD_EXTEND_OP (GET_MODE (operand)) != NIL) #endif - )) + ) +#endif + ) /* Subreg of a hard reg which can't handle the subreg's mode or which would handle that mode in the wrong number of registers for subregging to work. */ |