[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