On 06/04/2018 08:06 AM, Paul Koning wrote:
> 
> 
>> On Jun 4, 2018, at 9:51 AM, Jeff Law <l...@redhat.com> wrote:
>>
>> On 06/04/2018 07:31 AM, Paul Koning wrote:
>>> The internals manual in its description of the "matching constraint" says 
>>> that it works for cases where the in and out operands are somewhat 
>>> different, such as *p++ vs. *p.  Obviously that is meant to cover post_inc 
>>> side effects.
>>>
>>> The curious thing is that auto-inc-dec.c specifically avoids doing this: if 
>>> it finds what looks like a suitable candidate for auto-inc or auto-dec 
>>> optimization but that operand occurs more than once in the insn, it doesn't 
>>> make the change.  The result is code that's both larger and slower for 
>>> machines that have post_inc etc. addressing modes.  The gccint 
>>> documentation suggests that it was the intent to optimize this case, so I 
>>> wonder why it is avoided.
>> I wouldn't be terribly surprised if the old flow.c based auto-inc
>> discovery handled this, but the newer auto-inc-dec.c doesn't.  The docs
>> were probably written prior to the conversion.
> 
> That fits, because there is a reference to "the flow pass of the compiler" 
> when these constructs are introduced in section 14.16.
> 
> So is this an omission, or is there a reason why that optimization was 
> removed?  
I would guess omission, probably on the assumption it wasn't terribly
important and there wasn't really a good way to test it.    There aren't
many targets that use auto-inc getting a lot of attention these days,
and those that do can't have multiple memory operands.

Jeff

Reply via email to