From 94e6f78366432e9495ea7d041f43134122b23753 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Thu, 18 Feb 1999 19:49:19 +0000 Subject: [PATCH] * regclass.c (record_reg_classes): Correctly handle 'p' constraint. From-SVN: r25295 --- gcc/ChangeLog | 4 ++++ gcc/regclass.c | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 921f2490fd8..5aff4b3700d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Thu Feb 18 20:44:21 1999 David Edelsohn + + * regclass.c (record_reg_classes): Correctly handle 'p' constraint. + Thu Feb 18 19:59:37 1999 Marc Espie * configure.in :Handle OpenBSD platforms. diff --git a/gcc/regclass.c b/gcc/regclass.c index f1761206143..9faf8ab3f78 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -1159,6 +1159,7 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) const char *p = constraints[i]; rtx op = ops[i]; enum machine_mode mode = modes[i]; + int allows_addr = 0; int allows_mem = 0; int win = 0; unsigned char c; @@ -1262,7 +1263,11 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) case '!': case '#': case '&': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + break; + case 'p': + allows_addr = 1; + win = address_operand (op, GET_MODE (op)); break; case 'm': case 'o': case 'V': @@ -1393,7 +1398,10 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) if (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER) { if (classes[i] == NO_REGS) - alt_fail = 1; + { + if (! allows_addr) + alt_fail = 1; + } else { struct costs *pp = &this_op_costs[i]; @@ -1443,7 +1451,7 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) /* The only other way this alternative can be used is if this is a constant that could be placed into memory. */ - else if (CONSTANT_P (op) && allows_mem) + else if (CONSTANT_P (op) && (allows_addr || allows_mem)) alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1); else alt_fail = 1; -- 2.30.2