[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