Commit accef103 by Jeffrey A Law Committed by Jeff Law

regclass.c (record_reg_classes): Update comment for merging register class…

regclass.c (record_reg_classes): Update comment for merging register class preferences in reg->reg copies.

        * regclass.c (record_reg_classes): Update comment for merging
        register class preferences in reg->reg copies.  Tighten conditions
        for merging register class preferences in reg->reg copies.

From-SVN: r30943
parent 705e8733
Wed Dec 15 01:23:29 1999 Jeffrey A Law (law@cygnus.com)
* regclass.c (record_reg_classes): Update comment for merging
register class preferences in reg->reg copies. Tighten conditions
for merging register class preferences in reg->reg copies.
Wed Dec 15 02:19:32 1999 David Edelsohn <edelsohn@gnu.org> Wed Dec 15 02:19:32 1999 David Edelsohn <edelsohn@gnu.org>
* rs6000.md (tablejumpdi): Generate DImode LABEL_REF. * rs6000.md (tablejumpdi): Generate DImode LABEL_REF.
......
...@@ -1622,11 +1622,18 @@ record_reg_classes (n_alts, n_ops, ops, modes, subreg_changes_size, ...@@ -1622,11 +1622,18 @@ record_reg_classes (n_alts, n_ops, ops, modes, subreg_changes_size,
} }
/* If this insn is a single set copying operand 1 to operand 0 /* If this insn is a single set copying operand 1 to operand 0
and one is a pseudo with the other a hard reg that is in its and one operand is a pseudo with the other a hard reg or a pseudo
own register class, set the cost of that register class to -1. that prefers a register that is in its own register class then
Do this only when source dies to avoid stressing of register we may want to adjust the cost of that register class to -1.
allocator by preferrencing two coliding registers into single
place. */ Avoid the adjustment if the source does not die to avoid stressing of
register allocator by preferrencing two coliding registers into single
class.
Also avoid the adjustment if a copy between registers of the class
is expensive (ten times the cost of a default copy is considered
arbitrarily expensive). This avoids losing when the preferred class
is very expensive as the source of a copy instruction. */
if ((set = single_set (insn)) != 0 if ((set = single_set (insn)) != 0
&& ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set) && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
...@@ -1640,10 +1647,15 @@ record_reg_classes (n_alts, n_ops, ops, modes, subreg_changes_size, ...@@ -1640,10 +1647,15 @@ record_reg_classes (n_alts, n_ops, ops, modes, subreg_changes_size,
int class; int class;
int nr; int nr;
if (regno >= FIRST_PSEUDO_REGISTER && reg_pref != 0 if (regno >= FIRST_PSEUDO_REGISTER && reg_pref != 0)
&& (reg_class_size[(unsigned char) reg_pref[regno].prefclass] {
== CLASS_MAX_NREGS (reg_pref[regno].prefclass, mode))) enum reg_class pref = reg_pref[regno].prefclass;
op_costs[i].cost[(unsigned char) reg_pref[regno].prefclass] = -1;
if ((reg_class_size[(unsigned char) pref]
== CLASS_MAX_NREGS (pref, mode))
&& REGISTER_MOVE_COST (pref, pref) < 10 * 2)
op_costs[i].cost[(unsigned char) pref] = -1;
}
else if (regno < FIRST_PSEUDO_REGISTER) else if (regno < FIRST_PSEUDO_REGISTER)
for (class = 0; class < N_REG_CLASSES; class++) for (class = 0; class < N_REG_CLASSES; class++)
if (TEST_HARD_REG_BIT (reg_class_contents[class], regno) if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment