[LLVMdev] Reducing Generic Address Space Usage
Matt Arsenault
Matthew.Arsenault at amd.com
Tue Mar 25 15:21:07 PDT 2014
On 03/25/2014 02:31 PM, Jingyue Wu wrote:
>
> However, we have three concerns on this:
> a) I doubt this optimization is valid for all targets, because LLVM
> language reference
> (http://llvm.org/docs/LangRef.html#addrspacecast-to-instruction) says
> addrspacecast "can be a no-op cast or a complex value modification,
> depending on the target and the address space pair."
I think most of the simple cast optimizations would be acceptable. The
addrspacecasted pointer still needs to point to the same memory
location, so changing an access to use a different address space would
be OK. I think canonicalizing accesses to use the original address space
of a casted pointer when possible would make sense.
> b) NVPTX and R600 have different address numbering for the generic
> address space, which makes things more complicated.
> c) We don't have a good understanding of the R600 backend.
>
R600 currently does not support the flat address space instructions
intended to use for the generic address space. I posted a patch a while
ago that half added it, which I can try to work on finishing if it would
help.
I also do not understand how NVPTX uses address spaces, particularly how
it can use 0 as the the generic address space.
> 2. How effective do we want this optimization to be?
>
> In the short term, I want it to be able to eliminate unnecessary
> non-generic-to-generic addrspacecasts the front-end generates for the
> NVPTX target. For example,
>
> %p1 = addrspace i32 addrspace(3)* %p0 to i32*
> %v = load i32* %p1
>
> =>
>
> %v = load i32 addrspace(3)* %p0
>
> We want similar optimization for store+addrspacecast and
> gep+addrspacecast as well.
>
> In a long term, we could for sure improve this optimization to handle
> more instructions and more patterns.
>
I believe most of the cast simplifications that apply to bitcasts of
pointers also apply to addrspacecast. I have some patches waiting that
extend some of the more basic ones to understand addrspacecast (e.g.
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140120/202296.html),
plus a few more that I haven't posted yet. Mostly they are little cast
simplifications like your example in instcombine, but also SROA to
eliminate allocas that are addrspacecasted.
-Matt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140325/ab358263/attachment.html>
More information about the llvm-dev
mailing list