+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
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:
{
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);