On 10/27/20 3:01 AM, Richard Biener wrote:
> On Tue, 27 Oct 2020, Jan Hubicka wrote:
>
>>> On Mon, 26 Oct 2020, Jan Hubicka wrote:
>>>
>>>> Hi,
>>>> while looking for special cases of buitins I noticed that tree-ssa-ccp
>>>> can use EAF_RETURNS_ARG.  I wonder if same should be done by value
>>>> numbering and other propagators....
>>> The issue is that changing
>>>
>>>   q = memcpy (p, r);
>>>   .. use q ...
>>>
>>> to
>>>
>>>   memcpy (p, r);
>>>   .. use p ..
>>>
>>> is bad for RA so we generally do not want to copy-propagate
>>> EAF_RETURNS_ARG.  We eventually do want to optimize a following
>>>
>>>
>>>   if (q == p)
>>>
>>> of course.  And we eventually want to do the _reverse_ transform,
>>> replacing
>>>
>>>   memcpy (p, r)
>>>   .. use p ..
>>>
>>> with
>>>
>>>   tem = memcpy (p, r)
>>>   .. use tem ..
>>>
>>> ISTR playing with patches doing all of the above, would need to dig
>>> them out again.  There's also a PR about this I think.
>>>
>>> Bernd added some code to RTL call expansion, not sure exactly
>>> what it does...
>> It adds copy intstruction to call fusage, so RTL backend now about the
>> equivalence.
>> void *
>> test(void *a, void *b, int l)
>> {
>>   __builtin_memcpy (a,b,l);
>>   return a;
>> }
>> eliminates the extra copy. So I would say that we should not be affraid
>> to propagate in gimple world. It is a minor thing I guess though.
>> (my interest is mostly to get rid of unnecesary special casing of
>> builtins, as these special cases are clearly not well maintained
>> because almost no one knows about them:)
> The complication is when this appears in a loop like
>
>  for (; n; --n)
>    {
>      p = memcpy (p, s, k);
>      p += j;
>    }
>
> then I assume IVOPTs can do a better job knowing the equivalence
> (guess we'd still need to teach SCEV about this then ...) and
> when it's not present explicitely in the SSA chain any SSA based
> analysis has difficulties seeing it.
>
> ISTR I saw regressions when doing a patch propagating those
> equivalences.

SImilarly.  I don't remember the details, but definitely remember being
surprised that the propagation caused regressions and then chasing it
down to a bad interaction with the register allocator.


jeff


Reply via email to