From 63edbb04b27db1e230d536ad5a07e7cebd6a5ed7 Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Fri, 5 Dec 2014 18:36:57 +0000 Subject: [PATCH] regrename.c (find_best_rename_reg): Rename to ... 2014-12-05 Thomas Preud'homme 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/c6x/c6x.c | 3 ++- gcc/regrename.c | 28 +++++++++++++++++----------- gcc/regrename.h | 4 ++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9dbd2125b06..d0375513a23 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-12-05 Thomas Preud'homme + + * 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 PR ipa/64192 diff --git a/gcc/config/c6x/c6x.c b/gcc/config/c6x/c6x.c index 06319d0306d..9d2415a7379 100644 --- a/gcc/config/c6x/c6x.c +++ b/gcc/config/c6x/c6x.c @@ -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); diff --git a/gcc/regrename.c b/gcc/regrename.c index 66f562bbbc3..88321d03e54 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -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) { diff --git a/gcc/regrename.h b/gcc/regrename.h index 03b7164530b..05c78ad5a45 100644 --- a/gcc/regrename.h +++ b/gcc/regrename.h @@ -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 -- 2.30.2