OSDN Git Service

* regclass.c (record_reg_classes): Do not do the copying preferrencing
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 1999 11:10:11 +0000 (11:10 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 1999 11:10:11 +0000 (11:10 +0000)
when source does not die.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30913 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regclass.c

index de821d4..1957893 100644 (file)
@@ -1,5 +1,8 @@
 Tue Dec 14 12:07:29 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>
 
+       * regclass.c  (record_reg_classes): Do not do the copying preferrencing
+       when source does not die.
+
        * regclass.c (record_reg_classes): Handle INOUT operands propertly.
 
 1999-12-14  Jakub Jelinek  <jakub@redhat.com>
index f48a7c2..a67d91e 100644 (file)
@@ -1618,11 +1618,15 @@ 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
      and one is a pseudo with the other a hard reg that is in its
-     own register class, set the cost of that register class to -1.  */
+     own register class, set the cost of that register class to -1.
+     Do this only when source dies to avoid stressing of register
+     allocator by preferrencing two coliding registers into single
+     place.  */
 
   if ((set = single_set (insn)) != 0
       && ops[0] == SET_DEST (set) && ops[1] == SET_SRC (set)
-      && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG)
+      && GET_CODE (ops[0]) == REG && GET_CODE (ops[1]) == REG
+      && find_regno_note (insn, REG_DEAD, REGNO (ops[1])))
     for (i = 0; i <= 1; i++)
       if (REGNO (ops[i]) >= FIRST_PSEUDO_REGISTER)
        {