(convert_move): Put FROM into a register if it is a SUBREG.
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:15:14 +0000 (08:15 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:15:14 +0000 (08:15 -0400)
From-SVN: r1732

gcc/expr.c

index 1e4191f9bb0b1fe391771d9a1a233243665fc9f1..8bb7e41d7404cc85544fbd0d97fd116512ea4f79 100644 (file)
@@ -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;
        }