re PR rtl-optimization/42258 (redundant register move around mul instruction)
gcc/ PR rtl-optimization/42258 * ira-lives.c (check_and_make_def_conflict): Ignore conflict for a use that may match DEF. testsuite/ PR rtl-optimization/42258 * gcc.target/arm/thumb1-mul-moves.c: New test. From-SVN: r157581
This commit is contained in:
parent
f9ceed32dc
commit
002b2dee5d
@ -1,3 +1,9 @@
|
||||
2010-03-19 Bernd Schmidt <bernd.schmidt@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/42258
|
||||
* ira-lives.c (check_and_make_def_conflict): Ignore conflict for a
|
||||
use that may match DEF.
|
||||
|
||||
2010-03-19 Michael Matz <matz@suse.de>
|
||||
|
||||
PR c++/43116
|
||||
|
@ -499,6 +499,8 @@ check_and_make_def_conflict (int alt, int def, enum reg_class def_cl)
|
||||
|
||||
for (use = 0; use < recog_data.n_operands; use++)
|
||||
{
|
||||
int alt1;
|
||||
|
||||
if (use == def || recog_data.operand_type[use] == OP_OUT)
|
||||
continue;
|
||||
|
||||
@ -507,6 +509,22 @@ check_and_make_def_conflict (int alt, int def, enum reg_class def_cl)
|
||||
else
|
||||
use_cl = recog_op_alt[use][alt].cl;
|
||||
|
||||
/* If there's any alternative that allows USE to match DEF, do not
|
||||
record a conflict. If that causes us to create an invalid
|
||||
instruction due to the earlyclobber, reload must fix it up. */
|
||||
for (alt1 = 0; alt1 < recog_data.n_alternatives; alt1++)
|
||||
if (recog_op_alt[use][alt1].matches == def
|
||||
|| (use < recog_data.n_operands - 1
|
||||
&& recog_data.constraints[use][0] == '%'
|
||||
&& recog_op_alt[use + 1][alt1].matches == def)
|
||||
|| (use >= 1
|
||||
&& recog_data.constraints[use - 1][0] == '%'
|
||||
&& recog_op_alt[use - 1][alt1].matches == def))
|
||||
break;
|
||||
|
||||
if (alt1 < recog_data.n_alternatives)
|
||||
continue;
|
||||
|
||||
advance_p = check_and_make_def_use_conflict (dreg, def_cl, use,
|
||||
use_cl, advance_p);
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-03-19 Bernd Schmidt <bernd.schmidt@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/42258
|
||||
* gcc.target/arm/thumb1-mul-moves.c: New test.
|
||||
|
||||
2010-03-19 Michael Matz <matz@suse.de>
|
||||
|
||||
PR c++/43116
|
||||
|
11
gcc/testsuite/gcc.target/arm/thumb1-mul-moves.c
Normal file
11
gcc/testsuite/gcc.target/arm/thumb1-mul-moves.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* Check for unnecessary register moves. */
|
||||
/* { dg-options "-mthumb -Os" } */
|
||||
/* { dg-require-effective-target arm_thumb1_ok } */
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
return x*42;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "mov\[\\t \]*r0," } } */
|
||||
|
Loading…
Reference in New Issue
Block a user