diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-26 06:56:53 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-08-26 06:56:53 -0400 |
commit | a7911cd2b4620ced3322c9dea68c926fa0ea16a7 (patch) | |
tree | 3cce62cd492b1a367d56263c40c5907090c3f449 | |
parent | 67340b0310b5f62fe9e6ff0316cf8cbe556278d1 (diff) | |
download | gcc-a7911cd2b4620ced3322c9dea68c926fa0ea16a7.zip gcc-a7911cd2b4620ced3322c9dea68c926fa0ea16a7.tar.gz gcc-a7911cd2b4620ced3322c9dea68c926fa0ea16a7.tar.bz2 |
(emit_reload_insns): Do nothing for SUBREG whose operand is unused subsequently.
(emit_reload_insns): Do nothing for SUBREG whose operand is unused
subsequently.
In secondary reload case, if paradoxical SUBREG for output, reload thing
inside SUBREG, just like gen_reload.
From-SVN: r10284
-rw-r--r-- | gcc/reload1.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 03ade38..5343e2d 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -6259,6 +6259,16 @@ emit_reload_insns (insn) XEXP (note, 0) = reload_reg_rtx[j]; continue; } + /* Likewise for a SUBREG of an operand that dies. */ + else if (GET_CODE (old) == SUBREG + && GET_CODE (SUBREG_REG (old)) == REG + && 0 != (note = find_reg_note (insn, REG_UNUSED, + SUBREG_REG (old)))) + { + XEXP (note, 0) = gen_lowpart_common (GET_MODE (old), + reload_reg_rtx[j]); + continue; + } else if (GET_CODE (old) == SCRATCH) /* If we aren't optimizing, there won't be a REG_UNUSED note, but we don't want to make an output reload. */ @@ -6344,11 +6354,23 @@ emit_reload_insns (insn) { rtx third_reloadreg = reload_reg_rtx[reload_secondary_out_reload[secondary_reload]]; + rtx tem; /* Copy primary reload reg to secondary reload reg. (Note that these have been swapped above, then secondary reload reg to OLD using our insn. */ + /* If REAL_OLD is a paradoxical SUBREG, remove it + and try to put the opposite SUBREG on + RELOADREG. */ + if (GET_CODE (real_old) == SUBREG + && (GET_MODE_SIZE (GET_MODE (real_old)) + > GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old)))) + && 0 != (tem = gen_lowpart_common + (GET_MODE (SUBREG_REG (real_old)), + reloadreg))) + real_old = SUBREG_REG (real_old), reloadreg = tem; + gen_reload (reloadreg, second_reloadreg, reload_opnum[j], reload_when_needed[j]); emit_insn ((GEN_FCN (tertiary_icode) |