On Tue, Nov 8, 2011 at 8:35 PM, Jeff Law <l...@redhat.com> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 11/07/11 15:53, Richard Guenther wrote:
>> On Mon, Nov 7, 2011 at 10:25 PM, Jakub Jelinek <ja...@redhat.com>
>> wrote:
>>> Hi!
>>>
>>> This patch attempts to optimize VEC_BASE if we know that offsetof
>>> of base is 0 (unless the compiler is doing something strange, it
>>> is true). It doesn't have a clear code size effect, some .text
>>> sections grew, supposedly because of more inlining, some .text
>>> sections shrunk.
>>>
>>> Bootstrapped/regtested on x86_64-linux and i686-linux.
>>
>> I wonder why the compiler doesn't optimize this ... certainly it
>> looks backward to, in
>>
>> <bb 2>: if (c_2(D) != 0B) goto <bb 3>; else goto <bb 4>;
>>
>> <bb 3>: D.2948_3 = &c_2(D)->fld; goto <bb 5>;
>>
>> <bb 4>: D.2948_4 = 0B;
>>
>> <bb 5>: # D.2948_1 = PHI <D.2948_3(3), 0B(4)> return D.2948_1;
>>
>> see that D.2948_4 is equal to D.2948_3 for c_2 == 0, so I'm not
>> sure which pass would be able to detect this (but the optimziation
>> opportunity would be on the PHI node, so maybe it should be done in
>> phiopt).
> Right, I see that now.
>
> But D2948_3 doesn't flow through block #4, thus we can't use its value
> for the PHI arg associated with the edge 4->5.  So even with the
> equivalency  I think to optimize this we'd have to detect the
> construct as a whole and collapse it into &c_2->fld.
>
> Presumably that's what your patch in a later message does.

Yes.  It collapses it into c_2.  As pointer type differences are no longer
important in the GIMPLE IL we can represent &c_2->fld simply as c_2
and thus with copy propagation we'd present phiopt with something
it already handles.  Unfortunately rewriting all &c_2->fld style expressions
simply as c_2 plays foul with _FORTIFY_SOURCE and object size
computation (where it makes a difference which field at offset zero
you access ...).  So instead of canonicalizing address computations
using ADDR_EXPR to POINTER_PLUS_EXPR in general for 4.7 the
only thing we can do is special case the above case in phiopt (which
is probably worthwhile - that pattern ought to be quite common).

Richard.

> jeff
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iQEcBAEBAgAGBQJOuYRuAAoJEBRtltQi2kC7E2YH/1ayeLWX3GoOnq5u+JxpyWkx
> Fh/Dnar+Ad2jJJMrbx7vUUhAH54OEUDTWKYMQOn8ThUTnMmQtgb4uNqdyO78RfyM
> BIVzzpTjD3Ud1+xxlzg8YCjvBw/NekRp9l4HiZpwwRIfTQRpKhWZ+oWe3bBgs+4B
> LCVQWA9I5cGBhv09u7OOsYhicuAUa1Tj/XNF4NWE1GVsjilj+ESvZUj5Zd7dvxft
> QzGh0fNn+RB9LVu6kktvU5CCX/sVBjVDnTaOP14zYGAEMFrWYjanE0n9+b6cVf9W
> degmRowfMzOLvphsWEPFVZCTJPuDfkLlc5k6X3MkgpEFwQu6uo2S/k8vd98PAr8=
> =vcgh
> -----END PGP SIGNATURE-----
>

Reply via email to