summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-11-26 19:50:48 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-11-26 19:50:48 +0000
commitc36b9c972a0c67b9cf8155a835db8d5c3dbd0570 (patch)
treea7d8c4ead7e2c03685dc59df611feb2bda014401 /gcc/function.c
parent67123c3ed27e659ccdc7427358bc5cab09ee8935 (diff)
downloadgcc-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.c11
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),