aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-09-20 11:14:34 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-09-20 11:14:34 +0000
commitb049c26955642f80c1c3a84782d20c36b858d7d3 (patch)
tree873895897517495f7d3ab659c864bcf283a4fb6a /gcc
parentd63eadac7db10d4846bdffa93fd164cb035fb102 (diff)
downloadgcc-b049c26955642f80c1c3a84782d20c36b858d7d3.zip
gcc-b049c26955642f80c1c3a84782d20c36b858d7d3.tar.gz
gcc-b049c26955642f80c1c3a84782d20c36b858d7d3.tar.bz2
re PR target/91814 (ICE in elimination_costs_in_insn, at reload1.c:3549 since r274926)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386-features.c11
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 756b4d4..76269e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,13 @@
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
* tree-vect-loop.c (check_reduction_path): Check we can compute
diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
index 546d78d..9b297ba 100644
--- a/gcc/config/i386/i386-features.c
+++ b/gcc/config/i386/i386-features.c
@@ -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);