[llvm-dev] RFC: Representing unions in TBAA

Ivan A. Kosarev via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 14 10:10:20 PDT 2017


Sure, I will provide those. I just wanted to make sure this doesn't 
sound like what you know will not work for some reasons I'm not aware of.

On 14/08/17 20:04, Daniel Berlin wrote:
> Do you have a formal description of your approach with examples?
> I have a bit of trouble visualizing exactly what your approach does.
>
> On Mon, Aug 14, 2017 at 9:58 AM, Ivan A. Kosarev via llvm-dev 
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
>     Hello Steven, Hal and Daniel,
>
>     Thanks a lot for your discussion; it really helps with summarizing
>     current TBAA issues and ways to resolve them.
>
>     Do you guys know anything of the current status of the proposed
>     change? Steven, will you please let us know if the work is in
>     progress and if there is any ETA you can share?
>
>     I'm asking because we are working on an alternative approach that
>     not only supports accesses to union members, bit fields, fields of
>     aggregate and union types, but also allows to represent accesses
>     to aggregates and unions the same way we do it for scalars so that
>     !tbaa.struct is replaced with plain !tbaa, meaning TBAA
>     information can be propagated uniformly regardless of types of
>     accessed objects. As a consequence, it supports identification of
>     user types defined in different translation units, even if some of
>     them are written in C and others are in C++. It also defines a set
>     of language-neutral formal rules that LLVM codegen follows to
>     determine whether a given pair of accesses are allowed to overlap
>     by rules of the input language. As of today, we know this
>     implementation covers all currently supported TBAA functionality
>     reflected in the test suites and to test the new functionality we
>     have SROA improved to preserve TBAA information.
>
>     The point is, our approach does not try to describe accesses as
>     (type, offset) pairs and instead represents access sequences
>     explicitly beginning from the base type followed by field
>     descriptors, which is what makes the approach so flexible.
>     TypeBasedAAResult::Aliases() and MDNode::getMostGenericTBAA() are
>     a bit more complex than they used to be (they actually use the
>     same internal function), but rely exclusively on linear scans of
>     access sequences unless we have a situation when have to check if
>     one of the accessed types is the type of a member of the other
>     one, in which case it seems we just have to traverse through
>     fields recursively no matter what.
>
>     So, I wonder if this or similar approaches have ever been
>     considered before and what are the cons, if there are any sounded.
>     Do you think it is worth to consider it now?
>
>     Thanks again,
>
>     -- 
>
>     _______________________________________________
>     LLVM Developers mailing list
>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170814/bdf346b9/attachment.html>


More information about the llvm-dev mailing list