(convert_move): When truncating, call force_reg first if
authorJim Wilson <wilson@gcc.gnu.org>
Wed, 8 Sep 1993 18:58:14 +0000 (11:58 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 8 Sep 1993 18:58:14 +0000 (11:58 -0700)
it is something that gen_lowpart won't understand.

From-SVN: r5287

gcc/expr.c

index cb48acd9c7940d49c11ffb74d077b567fe459e0c..0404c6b4a4cf1b5968c0e5e1f935b7076b13a96e 100644 (file)
@@ -870,6 +870,13 @@ convert_move (to, from, unsignedp)
   if (GET_MODE_BITSIZE (from_mode) > BITS_PER_WORD
       && GET_MODE_BITSIZE (to_mode) <= BITS_PER_WORD)
     {
+      if (!((GET_CODE (from) == MEM
+            && ! MEM_VOLATILE_P (from)
+            && direct_load[(int) to_mode]
+            && ! mode_dependent_address_p (XEXP (from, 0)))
+           || GET_CODE (from) == REG
+           || GET_CODE (from) == SUBREG))
+       from = force_reg (from_mode, from);
       convert_move (to, gen_lowpart (word_mode, from), 0);
       return;
     }