[LLVMdev] Methods on addrspace pointers

Hal Finkel hfinkel at anl.gov
Mon Jan 20 15:29:52 PST 2014


----- Original Message -----
> From: "Brandon Holt" <bholt at cs.washington.edu>
> To: "Matt Arsenault" <Matthew.Arsenault at amd.com>
> Cc: "LLVM Developers Mailing List" <llvmdev at cs.uiuc.edu>
> Sent: Monday, January 20, 2014 5:19:27 PM
> Subject: Re: [LLVMdev] Methods on addrspace pointers
> 
> 
> 
> Thank you for the prompt response, Matt.
> 
> 
> On Jan 20, 2014, at 3:03 PM, Matt Arsenault <
> Matthew.Arsenault at amd.com > wrote:
> 
> 
> Since 3.4 you need to use the addrspacecast instruction to cast
> between address spaces. It's possible there are still some places
> left that haven't been fixed yet to use it instead of creating bit
> casts.
> 
> 
> 
> 
> Are you saying you think this is a bug and it should in fact be
> generating an addrspacecast? I will be looking into making this
> change, and if it would be accepted as a bug fix, I’d be happy to
> submit it.

Looks like a bug (regardless, it certainly shouldn't crash like that).

> 
> 
> 
> 
> 
> 
> 2. Is there a way to create methods that can be called with pointers
> to different address spaces? It seems there is no way to declare
> these in C++ using GNU attributes, and addrspace() seems to not be
> supported by C++11 attribute syntax, which could possibly express
> this. You can use __attribute__((address_space(N))
> 
> 
> 
> I have already been using that syntax to annotate pointer
> declarations. However I don’t think it can be applied to methods the
> way I was thinking. At least it doesn’t actually change them:
> 
> 
> 
> struct Foo {
> long x;
> 
> __attribute__((address_space(7))) void bar(long y) {
> printf("%ld %ld\n", x, y);
> }
> };
> 
> 
> Generates this declaration still:
> 
> 
> define linkonce_odr void @_ZN3Foo3barEl(%struct.Foo* %this, i64 %y)
> ssp uwtable align 2
> 
> 
> Though I think desired behavior would be:
> 
> 
> define linkonce_odr void @_ZN3Foo3barEl(%struct.Foo addrspace(7) *
> %this, i64 %y) ssp uwtable align 2
> 
> 
> (actually I think it’s more tricky because the address_space
> attribute could be applying to the return type. I’d think the
> correct way to specify the attribute on “this” would be to put it
> where “const” goes, after the parentheses)

Does it make sense for 'this' to be in one address space on some functions and in a different address space in other functions? If so, should the address space of 'this' contribute to overload resolution?

 -Hal

> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory




More information about the llvm-dev mailing list