OSDN Git Service

record_reg_classes): When an alternative requires a match, but we do
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 24 Mar 1993 01:18:04 +0000 (01:18 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 24 Mar 1993 01:18:04 +0000 (01:18 +0000)
it with a copy into a register, that alternative wins.

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

gcc/regclass.c

index 7c5a256..5067210 100644 (file)
@@ -957,18 +957,12 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
                  if (rtx_equal_p (ops[j], op))
                    ;
 
-                 /* If we can't put the other operand into a register, this
-                    alternative can't be used.  */
-
-                 else if (classes[j] == NO_REGS)
-                   alt_fail = 1;
+                 /* If we can put the other operand into a register, add to
+                    the cost of this alternative the cost to copy this
+                    operand to the register used for the other operand.  */
 
-                 /* Otherwise, add to the cost of this alternative the cost
-                    to copy this operand to the register used for the other
-                    operand.  */
-
-                 else
-                   alt_cost += copy_cost (op, mode, classes[j], 1);
+                 if (classes[j] != NO_REGS)
+                   alt_cost += copy_cost (op, mode, classes[j], 1), win = 1;
                }
              else if (GET_CODE (ops[j]) != REG
                       || REGNO (ops[j]) < FIRST_PSEUDO_REGISTER)