re PR target/91814 (ICE in elimination_costs_in_insn, at reload1.c:3549 since r274926)
authorRichard Biener <rguenther@suse.de>
Fri, 20 Sep 2019 11:14:34 +0000 (11:14 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 20 Sep 2019 11:14:34 +0000 (11:14 +0000)
2019-09-20  Richard Biener  <rguenther@suse.de>
Uros Bizjak  <ubizjak@gmail.com>

PR target/91814
* config/i386/i386-features.c (gen_gpr_to_xmm_move_src): Revert
previous change.
(general_scalar_chain::convert_op): Force not suitable memory
operands to a register.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
From-SVN: r275998

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

index 756b4d47e12fde5d0c83b7348518d53e5ffae054..76269e17eb04cd21c7ff8e8d4fb956da4fbbb2bc 100644 (file)
@@ -1,3 +1,12 @@
+2019-09-20  Richard Biener  <rguenther@suse.de>
+       Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/91814
+       * config/i386/i386-features.c (gen_gpr_to_xmm_move_src): Revert
+       previous change.
+       (general_scalar_chain::convert_op): Force not suitable memory
+       operands to a register.
+
 2019-09-20  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/91821
index 546d78d99b53c927c153d629f70b99565583ac06..9b297bac19100886768a14996fc4a5053b10e1e0 100644 (file)
@@ -668,8 +668,6 @@ 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:
@@ -835,6 +833,15 @@ general_scalar_chain::convert_op (rtx *op, rtx_insn *insn)
     {
       rtx tmp = gen_reg_rtx (GET_MODE (*op));
 
+      /* Handle movabs.  */
+      if (!memory_operand (*op, GET_MODE (*op)))
+       {
+         rtx tmp2 = gen_reg_rtx (GET_MODE (*op));
+
+         emit_insn_before (gen_rtx_SET (tmp2, *op), insn);
+         *op = tmp2;
+       }
+
       emit_insn_before (gen_rtx_SET (gen_rtx_SUBREG (vmode, tmp, 0),
                                     gen_gpr_to_xmm_move_src (vmode, *op)),
                        insn);