diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-11-26 14:50:48 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-11-26 14:50:48 -0500 |
commit | 926d1ca5a340838f7a5c053ae3645796f6a2b211 (patch) | |
tree | a7d8c4ead7e2c03685dc59df611feb2bda014401 /gcc/function.c | |
parent | f353588adaad75336ab10149afdb0728be08830d (diff) | |
download | gcc-926d1ca5a340838f7a5c053ae3645796f6a2b211.zip gcc-926d1ca5a340838f7a5c053ae3645796f6a2b211.tar.gz gcc-926d1ca5a340838f7a5c053ae3645796f6a2b211.tar.bz2 |
(fixup_var_refs_1): Make pseudo for DEST in PROMOTED_MODE unless in a
SUBREG.
From-SVN: r10608
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/function.c b/gcc/function.c index b3e7109..e45eec6 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1453,7 +1453,7 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel) If it has a REG_LIBCALL note, delete the REG_LIBCALL and REG_RETVAL notes too. */ - if (GET_CODE (PATTERN (insn)) == CLOBBER + if (GET_CODE (PATTERN (insn)) == CLOBBER && XEXP (PATTERN (insn), 0) == var) { if ((note = find_reg_note (insn, REG_LIBCALL, NULL_RTX)) != 0) @@ -2059,13 +2059,14 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) fixeddest = XEXP (fixeddest, 0); /* Convert (SUBREG (MEM)) to a MEM in a changed mode. */ if (GET_CODE (fixeddest) == SUBREG) - fixeddest = fixup_memory_subreg (fixeddest, insn, 0); + { + fixeddest = fixup_memory_subreg (fixeddest, insn, 0); + promoted_mode = GET_MODE (fixeddest); + } else fixeddest = fixup_stack_1 (fixeddest, insn); - temp = gen_reg_rtx (GET_MODE (SET_SRC (x)) == VOIDmode - ? GET_MODE (fixeddest) - : GET_MODE (SET_SRC (x))); + temp = gen_reg_rtx (promoted_mode); emit_insn_after (gen_move_insn (fixeddest, gen_lowpart (GET_MODE (fixeddest), |