https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91814

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
ISTR discussing this but holding back a fix at the time we weren't sure if we'd
preserve the non-subreg sets.  So sth like 

Index: gcc/config/i386/i386-features.c
===================================================================
--- gcc/config/i386/i386-features.c     (revision 275698)
+++ gcc/config/i386/i386-features.c     (working copy)
@@ -668,6 +668,8 @@ scalar_chain::emit_conversion_insns (rtx
 static rtx
 gen_gpr_to_xmm_move_src (enum machine_mode vmode, rtx gpr)
 {
+  if (!x86_64_general_operand (gpr, GET_MODE_INNER (vmode)))
+    gpr = force_reg (GET_MODE_INNER (vmode), gpr);
   switch (GET_MODE_NUNITS (vmode))
     {
     case 1:

fixes it with the question whether the use of x86_64_general_operand
is correct and whether it's necessary for the NUNITS == 1 case
(which IIRC isn't exercised anyway).

Reply via email to