re PR target/91814 (ICE in elimination_costs_in_insn, at reload1.c:3549 since r274926)
authorRichard Biener <rguenther@suse.de>
Thu, 19 Sep 2019 17:05:51 +0000 (17:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 19 Sep 2019 17:05:51 +0000 (17:05 +0000)
2019-09-19  Richard Biener  <rguenther@suse.de>

PR target/91814
* config/i386/i386-features.c (gen_gpr_to_xmm_move_src):
Force operand to a register if it isn't nonimmediate_operand.

From-SVN: r275971

gcc/ChangeLog
gcc/config/i386/i386-features.c

index 3be2b55523b648d9033541ff20e79e035e31f0d7..9010eaed92fa1f288773f329f973a47c7bac1698 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-19  Richard Biener  <rguenther@suse.de>
+
+       PR target/91814
+       * config/i386/i386-features.c (gen_gpr_to_xmm_move_src):
+       Force operand to a register if it isn't nonimmediate_operand.
+
 2019-09-19  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * config/arm/arm.md (<logical_op>di3): Use <optab> and <CODE>.
index 454eeaebef9f2a2e3b2abf00cd66abd7f5327943..f57a5555f8fef400ad92a2edc1dea031090e6ba3 100644 (file)
@@ -668,10 +668,13 @@ scalar_chain::emit_conversion_insns (rtx insns, rtx_insn *after)
 static rtx
 gen_gpr_to_xmm_move_src (enum machine_mode vmode, rtx gpr)
 {
+  if (!nonimmediate_operand (gpr, GET_MODE_INNER (vmode)))
+    gpr = force_reg (GET_MODE_INNER (vmode), gpr);
   switch (GET_MODE_NUNITS (vmode))
     {
     case 1:
-      return gen_rtx_SUBREG (vmode, gpr, 0);
+      /* We are not using this case currently.  */
+      gcc_unreachable ();
     case 2:
       return gen_rtx_VEC_CONCAT (vmode, gpr,
                                 CONST0_RTX (GET_MODE_INNER (vmode)));