AlexVlx wrote:

> For AMDGPU and NVPTX, pointers are allowed to drop their address spaces 
> transparently. So, `void AS(3) *` can convert to `void *`. Languages like 
> CUDA and SYCL and HIP use these 'language' address spaces to describe exactly 
> this, but my assertion is that it's more of a function of the target. I'm 
> sure @arsenm could explain the underlying implementation more deeply.

I think this view is somewhat problematic, as it mixes target concepts and 
language concepts in a dangerous way. Neither CUDA, nor HIP nor SYCL (AFAICT) 
do what is described, all of those are AS agnostic *languages*. Unlike e.g. 
OpenCL, a `__shared__` `int` is just an `int`, whereas the way in which we 
handle ASes in Clang / on the language level is typeful i.e. a `__private` 
`int` is not an `int` in OpenCL. An explicit pointer to a numbered AS generally 
does not blindly convert to a vanilla pointer in HIP or CUDA, observe e.g.: 
https://gcc.godbolt.org/z/cY4aa9cx8. So no, HIP and CUDA don't actually allow 
this behaviour per se. They chose different linguistic defaults. Furthermore, 
it's tricky to uplift target semantics into linguistic ones, for a language 
that is supposed to be generic. 

I don't necessarily mind this in this form, as an opt-in "here-be-dragons" 
mechanism which gets one into rather unspecified non-standard language 
dialect/extension territory. I do object to the very relaxed take that it is 
sound and just how things should work because some targets allow it. We should 
probably not try to sneakily back-legislate what standard C/C++ are.


https://github.com/llvm/llvm-project/pull/115777
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to