[llvm-dev] [RFC] BasicAA considers address spaces?
Daniel Berlin via llvm-dev
llvm-dev at lists.llvm.org
Wed Aug 12 12:03:34 PDT 2015
On Wed, Aug 12, 2015 at 12:00 PM, Jingyue Wu via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> I was lost from the thread at some point.
> Making the interface more general sounds good to me. This helps to solve
> Escha's concern that targets can know more about aliasing than just
> comparing address spaces.
> If there are no objections, I'll
> 1) add a new interface to TTI such as isTriviallyDisjoint. It returns false
> by default.
> 2) create a new AA that checks this interface, and add it to the AA chain.
> It could be named TargetAwareAliasAnalysis.
> On Sun, Aug 9, 2015 at 2:34 PM, Hal Finkel via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>> ----- Original Message -----
>> > From: "escha" <escha at apple.com>
>> > To: "Hal Finkel" <hfinkel at anl.gov>
>> > Cc: "Matt Arsenault" <Matthew.Arsenault at amd.com>,
>> > llvm-dev at lists.llvm.org, "Justin Holewinski"
>> > <jholewinski at nvidia.com>
>> > Sent: Sunday, August 9, 2015 7:46:26 AM
>> > Subject: Re: [llvm-dev] [RFC] BasicAA considers address spaces?
>> > Personally I feel the most intuitive approach would be to have an
>> > equivalent of isTriviallyDisjoint for IR; we already have a model
>> > for how it would work, and it could be a TTI call. I’ve kind of
>> > wanted this for a while because there’s a lot of address-space-esque
>> > aliasing relationships that can’t be easily modeled on the IR level.
>> > For example (in our model), we have some constraints like this:
>> > Global memory can’t alias local memory.
>> > Global writeable memory can’t alias global readonly memory (different
>> > address spaces).
>> > Stack memory can’t alias global memory (different address spaces).
>> > Texture reads cannot alias texture writes, because you can’t bind a
>> > texture as readable and writeable at the same time. Texture writes,
>> > however, can alias each other.
>> > Vertex shader outputs can’t really alias each other, even though they
>> > are technically “stores”.
>> > (there’s more where that came from)
>> > These are all very trivial to express in code (the trivially disjoint
>> > function in our backend is like 50 lines of code to cover all the
>> > cases), but a few of them are slightly more complex than “address
>> > space A can’t alias B”, so having a generic callback might be nicer
>> > and more powerful than a “does address space A alias address space
>> > B” callback, I think.
>> Could you provide a specific example of a case where the address space is
>> not enough? [maybe you did above, but if so, I don't know which one].
>> Perhaps we should just do the most generic thing: Provide an AA/TTI shim
>> which allows any target provide an implementation of AA (as part of the
>> chain of AA passes). Thoughts?
>> > —escha
>> Hal Finkel
>> Assistant Computational Scientist
>> Leadership Computing Facility
>> Argonne National Laboratory
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org http://llvm.cs.uiuc.edu
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org http://llvm.cs.uiuc.edu
More information about the llvm-dev