Thanks Jeff for the clue. Much appreciated. Regards Ayonam On 29 November 2012 00:14, Jeff Law <law@xxxxxxxxxx> wrote: > On 11/28/2012 11:37 AM, Ayonam Ray wrote: >> >> Hi, >> >> My architecture allows base + immed and base + index for loads but >> allows only base + immed for stores. How do I differentiate between >> them in the macro GO_IF_LEGITIMATE_ADDRESS? I only get the MEM rtx in >> that macro and have no clue whether the operand is an address for a >> load or a store. Is there any other way that I can differentiate >> between them? > > You can't differentiate them. Fundamentally the register allocator assumes > that a memory address is either valid or invalid regardless of whether or > not it's a load or store. > > What ports have done in the past with this situation is to support the > lowest common denominator in the movxx pattern, then add special constraints > for the cases that are only available on the load (or store). > > For an example, see how indexed addressing modes are handled on the PA. It > has integer indexed loads, but no integer indexed stores. It has indexed > loads and stores for floating point types. > > jeff