re PR rtl-optimization/89676 (Redundant moves for long long shift on 32bit x86)

2019-03-22  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/89676
	* lra-constraints.c (curr_insn_transform): Do match reload for
	early clobbers even if the match was successful.

2019-03-22  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/89676
	* gcc.target/i386/pr89676.c: New.

From-SVN: r269878
This commit is contained in:
Vladimir Makarov 2019-03-22 16:59:21 +00:00 committed by Vladimir Makarov
parent eca5f9254b
commit c07a0a226b
4 changed files with 35 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2019-03-22 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/89676
* lra-constraints.c (curr_insn_transform): Do match reload for
early clobbers even if the match was successful.
2019-03-22 Jakub Jelinek <jakub@redhat.com>
PR c++/87481

View file

@ -4256,6 +4256,20 @@ curr_insn_transform (bool check_only_p)
|| MEM_P (SET_DEST (curr_insn_set))
|| GET_CODE (SET_DEST (curr_insn_set)) == SUBREG))))
optional_p = true;
else if (goal_alt_matched[i][0] != -1
&& curr_static_id->operand[i].type == OP_OUT
&& (curr_static_id->operand_alternative
[goal_alt_number * n_operands + i].earlyclobber))
{
/* Generate reloads for output and matched inputs. This
is the easiest way to avoid creation of non-existing
conflicts in lra-lives.c. */
match_reload (i, goal_alt_matched[i], outputs, goal_alt[i], &before,
&after, TRUE);
outputs[n_outputs++] = i;
outputs[n_outputs] = -1;
continue;
}
else
continue;
}

View file

@ -1,3 +1,8 @@
2019-03-22 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/89676
* gcc.target/i386/pr89676.c: New.
2019-03-22 Jakub Jelinek <jakub@redhat.com>
PR c++/60702

View file

@ -0,0 +1,10 @@
/* PR rtl-optimization/89676 */
/* { dg-do compile } */
/* { dg-options "-O2 -m32 -march=i686" } */
unsigned long long
foo (unsigned long long i)
{
return i << 3;
}
/* { dg-final { scan-assembler-times "movl" 2 } } */