On 2012-06-16 00:45, Richard Sandiford wrote:
>        [(mem:GPR (match_operand:P 1 "register_operand" "d"))]
> 
>    Instead, we should define a new memory predicate/constraint pair
>    for memories that only accept register addresses.  I.e. there
>    should be a new predicate to go alongside things like
>    memory_operand and stack_operand, except that the new one would
>    be even more restrictive in the set of addresses that it allows.
>    mem_reg_operand seems as good a name as any, but I'm not wedded
>    to a particular name.

C.f. mem_noofs_operand inthe ARM port, and its uses in sync.md.

>    The atomic_exchange and atomic_fetch_add expanders should use
>    the code I quoted in the earlier message to force the original
>    memory_operand into this more restrictive form:
> 
>     if (!mem_reg_operand (operands[1], <MODE>mode))
>       {
>         addr = force_reg (Pmode, XEXP (operands[1], 0));
>         operands[1] = replace_equiv_address (operands[1], addr);
>       }

Not required if you use the proper predicate in the expander.
The middle-end will take care of this for you.


r~

Reply via email to