summaryrefslogtreecommitdiff
path: root/gcc/regclass.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-03-23 20:18:04 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-03-23 20:18:04 -0500
commit77e67eac60930cda48fcf7ceaa9dca6ebf69ae60 (patch)
tree2b8093135eccd70afe32761679d8b301c152e609 /gcc/regclass.c
parent6d44728adfc89930ea4ecb5defac6e10c4a78922 (diff)
downloadgcc-77e67eac60930cda48fcf7ceaa9dca6ebf69ae60.tar.gz
record_reg_classes): When an alternative requires a match...
record_reg_classes): When an alternative requires a match, but we do it with a copy into a register, that alternative wins. From-SVN: r3862
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r--gcc/regclass.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c
index 7c5a25676d1..50672109208 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -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)