aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-07-31 08:15:14 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-07-31 08:15:14 -0400
commit3dc4195c6a0777d896bdd5c11691d80c54064bbe (patch)
treef3192c80d8abf6d2f979e17e5e1113374912dcd0
parent58c8c59349b32c5f8ced092c74d2918580c218f0 (diff)
downloadgcc-3dc4195c6a0777d896bdd5c11691d80c54064bbe.zip
gcc-3dc4195c6a0777d896bdd5c11691d80c54064bbe.tar.gz
gcc-3dc4195c6a0777d896bdd5c11691d80c54064bbe.tar.bz2
(convert_move): Put FROM into a register if it is a SUBREG.
From-SVN: r1732
-rw-r--r--gcc/expr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 1e4191f..8bb7e41 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -705,6 +705,12 @@ convert_move (to, from, unsignedp)
if ((code = can_extend_p (to_mode, from_mode, unsignedp))
!= CODE_FOR_nothing)
{
+ /* If FROM is a SUBREG, put it into a register. Do this
+ so that we always generate the same set of insns for
+ better cse'ing; if an intermediate assignment occurred,
+ we won't be doing the operation directly on the SUBREG. */
+ if (optimize > 0 && GET_CODE (from) == SUBREG)
+ from = force_reg (from_mode, from);
emit_unop_insn (code, to, from, equiv_code);
return;
}