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
This commit is contained in:
Richard Biener 2019-09-20 11:14:34 +00:00 committed by Richard Biener
parent d63eadac7d
commit b049c26955
2 changed files with 18 additions and 2 deletions

View 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

View 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);