recog.c (constrain_operands): For a match, require that a non-register matches general_operand when strict >= 0.
* recog.c (constrain_operands) <case 'g'>: For a match, require that a non-register matches general_operand when strict >= 0. From-SVN: r106821
This commit is contained in:
parent
516ebd4486
commit
74e3e54a6c
@ -1,3 +1,8 @@
|
||||
2005-11-12 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* recog.c (constrain_operands) <case 'g'>: For a match, require
|
||||
that a non-register matches general_operand when strict >= 0.
|
||||
|
||||
2005-11-11 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* loop-invariant.c (move_loop_invariants): Fix a thinko in the
|
||||
|
20
gcc/recog.c
20
gcc/recog.c
@ -2429,16 +2429,22 @@ constrain_operands (int strict)
|
||||
break;
|
||||
|
||||
/* No need to check general_operand again;
|
||||
it was done in insn-recog.c. */
|
||||
it was done in insn-recog.c. Well, except that reload
|
||||
doesn't check the validity of its replacements, but
|
||||
that should only matter when there's a bug. */
|
||||
case 'g':
|
||||
/* Anything goes unless it is a REG and really has a hard reg
|
||||
but the hard reg is not in the class GENERAL_REGS. */
|
||||
if (strict < 0
|
||||
|| GENERAL_REGS == ALL_REGS
|
||||
|| !REG_P (op)
|
||||
|| (reload_in_progress
|
||||
&& REGNO (op) >= FIRST_PSEUDO_REGISTER)
|
||||
|| reg_fits_class_p (op, GENERAL_REGS, offset, mode))
|
||||
if (REG_P (op))
|
||||
{
|
||||
if (strict < 0
|
||||
|| GENERAL_REGS == ALL_REGS
|
||||
|| (reload_in_progress
|
||||
&& REGNO (op) >= FIRST_PSEUDO_REGISTER)
|
||||
|| reg_fits_class_p (op, GENERAL_REGS, offset, mode))
|
||||
win = 1;
|
||||
}
|
||||
else if (strict < 0 || general_operand (op, mode))
|
||||
win = 1;
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user