> Is the standard condition for define_memory_constraint here
> /* Likewise if the address will be reloaded because
> reg_equiv_address is nonzero. For reg_equiv_mem
> we have to check. */
> else if (REG_P (operand)
> && REGNO (operand) >=
> FIRST_PSEUDO_REGISTER && reg_renumber[REGNO (operand)] < 0 &&
> ((reg_equiv_mem (REGNO (operand)) != 0 && EXTRA_CONSTRAINT_STR
> (reg_equiv_mem (REGNO (operand)), c, p))
> || (reg_equiv_address (REGNO
> || (operand)) != 0)))
> win = 1;
> If so, shouldn't you check those conditions as well, or at least something
> similar? Not sure if reg_equiv_address needs to be allowed there, and
> guess reg_equiv_mem should satisfy the Q constraint, i.e. !MEM_VOLATILE_P
> memory_operand. Accepting any pseudo there sounds too risky to me...
You're right, and modifying a constraint to silence a bogus error is probably
too dangerous in any case. And there may be other affected architectures.
So patch withdrawn. The best fix is very likely in reload1.c in the end.