> 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. -- Eric Botcazou