diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-11-26 19:50:48 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-11-26 19:50:48 +0000 |
commit | c36b9c972a0c67b9cf8155a835db8d5c3dbd0570 (patch) | |
tree | a7d8c4ead7e2c03685dc59df611feb2bda014401 /gcc/function.c | |
parent | 67123c3ed27e659ccdc7427358bc5cab09ee8935 (diff) | |
download | gcc-c36b9c972a0c67b9cf8155a835db8d5c3dbd0570.tar.gz |
(fixup_var_refs_1): Make pseudo for DEST in PROMOTED_MODE unless in a
SUBREG.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10608 138bc75d-0d04-0410-961f-82ee72b054a4
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 b3e71092934..e45eec64e06 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), |