aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-11-26 14:50:48 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1995-11-26 14:50:48 -0500
commit926d1ca5a340838f7a5c053ae3645796f6a2b211 (patch)
treea7d8c4ead7e2c03685dc59df611feb2bda014401 /gcc/function.c
parentf353588adaad75336ab10149afdb0728be08830d (diff)
downloadgcc-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.c11
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),