regrename.c (find_best_rename_reg): Rename to ...

2014-12-05  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * regrename.c (find_best_rename_reg): Rename to ...
    (find_rename_reg): This. Also add a parameter to skip tick check.
    * regrename.h: Likewise.
    * config/c6x/c6x.c (try_rename_operands): Adapt to above renaming.

From-SVN: r218434
This commit is contained in:
Thomas Preud'homme 2014-12-05 18:36:57 +00:00 committed by Thomas Preud'homme
parent fda3e2851e
commit 63edbb04b2
4 changed files with 28 additions and 14 deletions

View File

@ -1,3 +1,10 @@
2014-12-05 Thomas Preud'homme <thomas.preudhomme@arm.com>
* regrename.c (find_best_rename_reg): Rename to ...
(find_rename_reg): This. Also add a parameter to skip tick check.
* regrename.h: Likewise.
* config/c6x/c6x.c (try_rename_operands): Adapt to above renaming.
2014-12-05 Martin Jambor <mjambor@suse.cz>
PR ipa/64192

View File

@ -3513,7 +3513,8 @@ try_rename_operands (rtx_insn *head, rtx_insn *tail, unit_req_table reqs,
COMPL_HARD_REG_SET (unavailable, reg_class_contents[(int) super_class]);
old_reg = this_head->regno;
best_reg = find_best_rename_reg (this_head, super_class, &unavailable, old_reg);
best_reg =
find_rename_reg (this_head, super_class, &unavailable, old_reg, true);
regrename_do_replace (this_head, best_reg);

View File

@ -357,11 +357,13 @@ check_new_reg_p (int reg ATTRIBUTE_UNUSED, int new_reg,
/* For the chain THIS_HEAD, compute and return the best register to
rename to. SUPER_CLASS is the superunion of register classes in
the chain. UNAVAILABLE is a set of registers that cannot be used.
OLD_REG is the register currently used for the chain. */
OLD_REG is the register currently used for the chain. BEST_RENAME
controls whether the register chosen must be better than the
current one or just respect the given constraint. */
int
find_best_rename_reg (du_head_p this_head, enum reg_class super_class,
HARD_REG_SET *unavailable, int old_reg)
find_rename_reg (du_head_p this_head, enum reg_class super_class,
HARD_REG_SET *unavailable, int old_reg, bool best_rename)
{
bool has_preferred_class;
enum reg_class preferred_class;
@ -400,15 +402,19 @@ find_best_rename_reg (du_head_p this_head, enum reg_class super_class,
new_reg))
continue;
if (!check_new_reg_p (old_reg, new_reg, this_head, *unavailable))
continue;
if (!best_rename)
return new_reg;
/* In the first pass, we force the renaming of registers that
don't belong to PREFERRED_CLASS to registers that do, even
though the latters were used not very long ago. */
if (check_new_reg_p (old_reg, new_reg, this_head,
*unavailable)
&& ((pass == 0
&& !TEST_HARD_REG_BIT (reg_class_contents[preferred_class],
best_new_reg))
|| tick[best_new_reg] > tick[new_reg]))
if ((pass == 0
&& !TEST_HARD_REG_BIT (reg_class_contents[preferred_class],
best_new_reg))
|| tick[best_new_reg] > tick[new_reg])
best_new_reg = new_reg;
}
if (pass == 0 && best_new_reg != old_reg)
@ -480,8 +486,8 @@ rename_chains (void)
if (n_uses < 2)
continue;
best_new_reg = find_best_rename_reg (this_head, super_class,
&this_unavailable, reg);
best_new_reg = find_rename_reg (this_head, super_class,
&this_unavailable, reg, true);
if (dump_file)
{

View File

@ -89,8 +89,8 @@ extern void regrename_init (bool);
extern void regrename_finish (void);
extern void regrename_analyze (bitmap);
extern du_head_p regrename_chain_from_id (unsigned int);
extern int find_best_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *,
int);
extern int find_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *, int,
bool);
extern void regrename_do_replace (du_head_p, int);
#endif