https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97532
--- Comment #9 from Vladimir Makarov <vmakarov at gcc dot gnu.org> --- (In reply to Hongtao.liu from comment #6) > > > Shouldn't memory_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0))) imply > legitimate_address_p? memory_operand does not imply legitimate_address_p. When LRA processes regular memory it calls legitimate_address_p. But for special memory it did not do this. It is a responsibility of special constraint to check it. That is why it is called special (it might require more constraints on addressing or hard registers can be used). I guess you should check it in the constraint that base and index registers are of the right class.