[LLVMdev] Address space extension

Matt Arsenault Matthew.Arsenault at amd.com
Wed Aug 7 16:41:22 PDT 2013


On 08/07/2013 04:07 PM, Erik Schnetter wrote:
> On 2013-08-07, at 18:55 , Matt Arsenault <Matthew.Arsenault at amd.com> wrote:
>
>> On 08/07/2013 03:52 PM, Michele Scandale wrote:
>>> In the opencl specification is said that the four address spaces are disjoint, so my conclusion of non aliasing with the others.
>> In OpenCL 2.0, you can cast between the generic address space and global/local/private, so there's also that to consider.
>
> I believe this just means that there is a single equivalent of "void*" that can hold all kinds of pointers and address spaces. Casting forth and back must preserve the address space. If I read the standard correctly, the OpenCL compiler may also compile functions several times, once for each combination of address spaces.
>
> -erik
>
Allowing casts to the specific address spaces makes that not work in the 
general case. For example, a function like this could not simply be 
duplicated for each address space and have it still work:

void foo(int* x, int is_local)
{
      if (is_local)
      {
           local int* y = (local int*) x;
           // ...
       }
       else
       {
            global int* z = (global int*) z;
            // ...
        }
}




More information about the llvm-dev mailing list