Proposed resolution to aliasing issue.
Mark Mitchell
mark@codesourcery.com
Wed May 11 21:55:00 GMT 2005
Giovanni Bajo wrote:
> Mark Mitchell <mark@codesourcery.com> wrote:
>
>
>>Our proposed approach is to -- by default -- assume that "g" may
>>access all of "b". However, in the event that the corresponding parameter to
>>"g" has an attribute (name TBD, possibly the same as the one that
>>appears in Danny's recent patch), then we may assume that "g" (and its
>>callees) do not use the pointer to obtain access to any fields of "b".
>>
>>For example:
>>
>> void g(A *p __attribute__((X)));
>>
>> void f() {
>> B b;
>> g(&b.a); /* Compiler may assume the rest of b is not accessed
>> in "g". */
>> }
>
>
> It is not clear if you are speaking here of the C language or GENERIC, but
> anyway I'll comment.
C.
> Can the meaning of the attribute be reversed? I would like it to mark places
> where upcasts can happen.
In tandem with making the optimization off by default, yes, that would
be OK. The important thing is that we provide a mechanism to get the
optimization, but that it is off by default.
> After all, there is absolutely no point in enabling it by default if, to make
> it useful, you have to decorate billions of function declarations.
You don't have to do that; you find the handful that matter in your
program, and decorate those, just as people do now for functions that
are pure, const, etc.
> - For the C and the C++ frontend, do not enable TBAA through -Ox, just keep it
> a separate option (-ftree-tbaa).
Picking nits:
Let's not call this type-based alias analysis. We've already given a
meaning for that term. Sadly, I don't have a good suggestion. Also,
any switch with "tree" in it meant to be used by real users has probably
been misnamed. The tree-ness isn't relevant to users.
> - Add __attribute__((upcast)) that can be used to decorate pointers in
> parameter declarations which might be subject to upcasting during the
> function's body execution.
Picking more nits:
It's not just upcast, and so that's probably not the best name, but no
matter; I take your meaning.
> - For C++ frontend, we can have a -fpod-upcast which adds attribute upcast
> automatically for all pointers to POD types.
> - Explain in the documentation that -ftree-tbaa is risky for C/C++ unless the
> code base is audited and __attribute__((upcast)) added wherever appropriate.
> - For the Java/Fortran/Ada frontend, probably TBAA can be on by default at -Ox,
> but I dunno.
I would be OK with this approach.
--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304
More information about the Gcc
mailing list