diff options
author | Thomas Preud'homme <thomas.preudhomme@arm.com> | 2014-12-05 18:36:57 +0000 |
---|---|---|
committer | Thomas Preud'homme <thopre01@gcc.gnu.org> | 2014-12-05 18:36:57 +0000 |
commit | 63edbb04b27db1e230d536ad5a07e7cebd6a5ed7 (patch) | |
tree | 4445a1a13ee2c2dc663ead126b3330874b434e75 | |
parent | fda3e2851e6f415354eb4045d288d3e91c4aa1ec (diff) | |
download | gcc-63edbb04b27db1e230d536ad5a07e7cebd6a5ed7.zip gcc-63edbb04b27db1e230d536ad5a07e7cebd6a5ed7.tar.gz gcc-63edbb04b27db1e230d536ad5a07e7cebd6a5ed7.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/c6x/c6x.c | 3 | ||||
-rw-r--r-- | gcc/regrename.c | 28 | ||||
-rw-r--r-- | gcc/regrename.h | 4 |
4 files changed, 28 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9dbd212..d037551 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/c6x/c6x.c b/gcc/config/c6x/c6x.c index 06319d0..9d2415a 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 66f562b..88321d0 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 03b7164..05c78ad 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 |