regclass.c (record_reg_classes): Do not do the copying preferrencing when source...
authorJan Hubicka <hubicka@freesoft.cz>
Tue, 14 Dec 1999 11:10:11 +0000 (12:10 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 14 Dec 1999 11:10:11 +0000 (11:10 +0000)
* regclass.c  (record_reg_classes): Do not do the copying preferrencing
when source does not die.

From-SVN: r30913

gcc/ChangeLog
gcc/regclass.c

index de821d4f5d29cf87a4b3d9ab1f31207195db9056..1957893a6ad31c2abe372be14f28384b8570a466 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 f48a7c2658ca28ae2d51293d640c8f397e46b191..a67d91e100b264324c58a2cec99364638ee91160 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)
        {