Vladimir Makarov <vmaka...@redhat.com> writes:
> On 13-06-19 2:31 PM, Richard Sandiford wrote:
>> Richard Sandiford <rdsandif...@googlemail.com> writes:
>>> Vladimir Makarov <vmaka...@redhat.com> writes:
>>>> Index: lra.c
>>>> ===================================================================
>>>> --- lra.c  (revision 199753)
>>>> +++ lra.c  (working copy)
>>>> @@ -306,11 +306,11 @@ lra_emit_add (rtx x, rtx y, rtx z)
>>>>      || (disp != NULL_RTX && ! CONSTANT_P (disp))
>>>>      || (scale != NULL_RTX && ! CONSTANT_P (scale)))
>>>>    {
>>>> -    /* Its is not an address generation.  Probably we have no 3 op
>>>> +    /* It is not an address generation.   Probably we have no 3 op
>>>>         add.  Last chance is to use 2-op add insn.  */
>>>>      lra_assert (x != y && x != z);
>>>> -    emit_move_insn (x, z);
>>>> -    insn = gen_add2_insn (x, y);
>>>> +    emit_move_insn (x, y);
>>>> +    insn = gen_add2_insn (x, z);
>>>>      emit_insn (insn);
>>>>    }
>>>>         else
>>> Could you add a comment to lra_emit_add saying why it has to be this
>>> way round (move y, add z)?
>> Ping.
> I am going to add a comment when I submit my next patch (it will happen 
> today or tomorrow).

Thanks.

> The reason is simple as address segment is stored in y not in z and
> generation of addition of address segment to pseudo can fail (that is
> what happens for the PR).

Do you mean address segment in the x86 sense of "segment"?  I was just
a bit confused because the current comment says "It is not an address
generation", whereas it sounds like addresses are involved somewhere.

I suppose the commutation rules are that Y should be "no less complicated"
than Z, so maybe it wins from that point of view too.

Richard

Reply via email to