[llvm-dev] RFC: Resolving TBAA issues
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Sun Aug 20 09:27:32 PDT 2017
On 08/20/2017 11:22 AM, Daniel Berlin via llvm-dev wrote:
> Sorry, hit send early.
>
>
> On Sun, Aug 20, 2017 at 9:16 AM, Daniel Berlin <dberlin at dberlin.org
> <mailto:dberlin at dberlin.org>> wrote:
>
>
>
> On Sun, Aug 20, 2017 at 8:54 AM, Ivan A. Kosarev via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Hello Daniel,
>
> > The problem with the way you are trying to show this is that
> > there are many ways to prove no-alias, and TBAA is one of them.
> > The reason i stare at dump files and debug info is precisely to
> > separate the TBAA portion from the rest.
>
> Makes sense to me. However, for a translation unit like this:
>
> struct BUF1 { ... };
> struct BUF2 { ... };
>
> int foo(int n, struct BUF1* p, struct BUF2* q) {
> for (int i = 0; i < n; i++)
> p->b1 += q->b2;
> return 0;
> }
>
> I think we can be sure there are no ways for the compiler to
> know that these two accesses do not overlap, except TBAA.
>
>
> This is definitely false in general.
> Again, speaking about GCC, the logic for whether fields can be
> accessed is separate from the logic about whether TBAA says fields
> can be accessed.
> In some cases the flags to control the logic are both controlled
> by fstrict-aliasing, but are unrelated to tbaa.
>
Our current TBAA combines these two things (field-offset-based
determinations and strictly-type-based rules) into what we call TBAA.
This proposal does likewise. Are there advantages to splitting them that
we should consider?
Thanks again,
Hal
>
> Even if you have tried to place the fields at the same offset, as
> you have, whether it can disambiguate the accesses can depend on
> more than just TBAA, including alignment rules, etc.
>
>
> You definitely may be able to come up with examples where only tbaa
> *should* be active, but i don't think it's really a safe way to go
> about testing assumptions about TBAA.
> For example, it also assumes no bugs in the other methods of analysis,
> which is defintitely not a safe assumption :)
>
> If you only care about the *end result* (IE whether it's allow to say
> the accesses overlap) it is generally going to be okay, but again,
> this assumes no bug in any implementation
>
> If you want to test tbaa specific things for real, you'd have to print
> the tbaa trees and results as gcc sees them, for example.
> That's really the only way to be sure.
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170820/a55b48dc/attachment.html>
More information about the llvm-dev
mailing list