[llvm-dev] [RFC] BasicAA considers address spaces?

escha via llvm-dev
Sun, 09 Aug 2015 12:46:26 -0000

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.

—escha