Commit 94e6f783 by David Edelsohn Committed by Jeff Law

* regclass.c (record_reg_classes): Correctly handle 'p' constraint.

From-SVN: r25295
parent 1b4a979b
Thu Feb 18 20:44:21 1999 David Edelsohn <edelsohn@mhpcc.edu>
* regclass.c (record_reg_classes): Correctly handle 'p' constraint.
Thu Feb 18 19:59:37 1999 Marc Espie <espie@cvs.openbsd.org> Thu Feb 18 19:59:37 1999 Marc Espie <espie@cvs.openbsd.org>
* configure.in :Handle OpenBSD platforms. * configure.in :Handle OpenBSD platforms.
......
...@@ -1159,6 +1159,7 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) ...@@ -1159,6 +1159,7 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
const char *p = constraints[i]; const char *p = constraints[i];
rtx op = ops[i]; rtx op = ops[i];
enum machine_mode mode = modes[i]; enum machine_mode mode = modes[i];
int allows_addr = 0;
int allows_mem = 0; int allows_mem = 0;
int win = 0; int win = 0;
unsigned char c; unsigned char c;
...@@ -1262,7 +1263,11 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) ...@@ -1262,7 +1263,11 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn)
case '!': case '#': case '&': case '!': case '#': case '&':
case '0': case '1': case '2': case '3': case '4': case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9': case '5': case '6': case '7': case '8': case '9':
break;
case 'p': case 'p':
allows_addr = 1;
win = address_operand (op, GET_MODE (op));
break; break;
case 'm': case 'o': case 'V': case 'm': case 'o': case 'V':
...@@ -1393,7 +1398,10 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) ...@@ -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 (GET_CODE (op) == REG && REGNO (op) >= FIRST_PSEUDO_REGISTER)
{ {
if (classes[i] == NO_REGS) if (classes[i] == NO_REGS)
alt_fail = 1; {
if (! allows_addr)
alt_fail = 1;
}
else else
{ {
struct costs *pp = &this_op_costs[i]; struct costs *pp = &this_op_costs[i];
...@@ -1443,7 +1451,7 @@ record_reg_classes (n_alts, n_ops, ops, modes, constraints, insn) ...@@ -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 /* The only other way this alternative can be used is if this is a
constant that could be placed into memory. */ 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); alt_cost += MEMORY_MOVE_COST (mode, classes[i], 1);
else else
alt_fail = 1; alt_fail = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment