regrename.c (find_best_rename_reg): Rename to ...
authorThomas Preud'homme <thomas.preudhomme@arm.com>
Fri, 5 Dec 2014 18:36:57 +0000 (18:36 +0000)
committerThomas Preud'homme <thopre01@gcc.gnu.org>
Fri, 5 Dec 2014 18:36:57 +0000 (18:36 +0000)
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

gcc/ChangeLog
gcc/config/c6x/c6x.c
gcc/regrename.c
gcc/regrename.h

index 9dbd2125b06c5ae56bc50e24245295fd0db59071..d0375513a23beccc6ae5c255668ab7e2f4ae1534 100644 (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
index 06319d0306d755ba7736c452ec6bb22aa5be0753..9d2415a73796d969f9e62cc45c51788c947fc3e2 100644 (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);
 
index 66f562bbbc3e247233d4819cd1fb8aef0959f012..88321d03e547ea6dd1b68ad7a9a17632a3573651 100644 (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)
        {
index 03b7164530b48118480f60fda1170126ec6c5be1..05c78ad5a459d51e6c32456c465fd0be58c9d1cf 100644 (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