Skip to content

Commit 883911a

Browse files
authored
[SYCL] Remove volatile variants of GenericCastToPtrExplicit built-ins (#18346)
The built-ins are implemented with pointer comparison. Volatile is not needed because memory pointed to by the pointer isn't accessed.
1 parent cd9216b commit 883911a

File tree

4 files changed

+6
-29
lines changed

4 files changed

+6
-29
lines changed

clang/lib/Sema/SPIRVBuiltins.td

+1-1
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ foreach AS = [GlobalAS, LocalAS, PrivateAS] in {
850850
def : SPVBuiltin<"GenericCastToPtrExplicit", [PointerType<Char, AS>, PointerType<Char, GenericAS>], Attr.Const>;
851851
}
852852

853-
foreach Ty = [Void, ConstType<Void>, VolatileType<Void>, VolatileType<ConstType<Void>>] in {
853+
foreach Ty = [Void, ConstType<Void>] in {
854854
def : SPVBuiltin<"GenericCastToPtrExplicit_ToGlobal", [PointerType<Ty, GlobalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
855855
def : SPVBuiltin<"GenericCastToPtrExplicit_ToLocal", [PointerType<Ty, LocalAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;
856856
def : SPVBuiltin<"GenericCastToPtrExplicit_ToPrivate", [PointerType<Ty, PrivateAS>, PointerType<Ty, DefaultAS>, Int], Attr.Const>;

libclc/libspirv/lib/amdgcn-amdhsa/conversion/GenericCastToPtrExplicit.cl

-12
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,6 @@ _CLC_DEF static bool __clc_amdgcn_is_global(generic void *ptr) {
3232
generic const void *ptr, int unused) { \
3333
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
3434
unused); \
35-
} \
36-
_CLC_DECL _CLC_OVERLOAD \
37-
ADDRSPACE volatile void *__spirv_GenericCastToPtrExplicit_To##NAME( \
38-
generic volatile void *ptr, int unused) { \
39-
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
40-
unused); \
41-
} \
42-
_CLC_DECL _CLC_OVERLOAD ADDRSPACE const volatile void \
43-
*__spirv_GenericCastToPtrExplicit_To##NAME( \
44-
generic const volatile void *ptr, int unused) { \
45-
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
46-
unused); \
4735
}
4836

4937
GenericCastToPtrExplicit_To(global, Global)

libclc/libspirv/lib/ptx-nvidiacl/conversion/GenericCastToPtrExplicit.cl

-12
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,6 @@ _CLC_DEF static bool __clc_nvvm_is_global(generic void *ptr) {
3131
generic const void *ptr, int unused) { \
3232
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
3333
unused); \
34-
} \
35-
_CLC_DECL _CLC_OVERLOAD \
36-
ADDRSPACE volatile void *__spirv_GenericCastToPtrExplicit_To##NAME( \
37-
generic volatile void *ptr, int unused) { \
38-
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
39-
unused); \
40-
} \
41-
_CLC_DECL _CLC_OVERLOAD ADDRSPACE const volatile void \
42-
*__spirv_GenericCastToPtrExplicit_To##NAME( \
43-
generic const volatile void *ptr, int unused) { \
44-
return __spirv_GenericCastToPtrExplicit_To##NAME((generic void *)ptr, \
45-
unused); \
4634
}
4735

4836
GenericCastToPtrExplicit_To(global, Global)

sycl/include/sycl/access/access.hpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ auto dynamic_address_cast(ElementType *Ptr) {
381381
constexpr auto SrcAS = deduce_AS<ElementType *>::value;
382382
using dst_type = typename DecoratedType<
383383
std::remove_pointer_t<remove_decoration_t<ElementType *>>, Space>::type *;
384+
using RemoveCvT = std::remove_cv_t<ElementType>;
384385

385386
if constexpr (!address_space_cast_is_possible(SrcAS, Space)) {
386387
return (dst_type) nullptr;
@@ -403,18 +404,18 @@ auto dynamic_address_cast(ElementType *Ptr) {
403404
#endif
404405
} else if constexpr (Space == global_space) {
405406
return (dst_type)__spirv_GenericCastToPtrExplicit_ToGlobal(
406-
Ptr, __spv::StorageClass::CrossWorkgroup);
407+
const_cast<RemoveCvT *>(Ptr), __spv::StorageClass::CrossWorkgroup);
407408
} else if constexpr (Space == local_space) {
408409
return (dst_type)__spirv_GenericCastToPtrExplicit_ToLocal(
409-
Ptr, __spv::StorageClass::Workgroup);
410+
const_cast<RemoveCvT *>(Ptr), __spv::StorageClass::Workgroup);
410411
} else if constexpr (Space == private_space) {
411412
return (dst_type)__spirv_GenericCastToPtrExplicit_ToPrivate(
412-
Ptr, __spv::StorageClass::Function);
413+
const_cast<RemoveCvT *>(Ptr), __spv::StorageClass::Function);
413414
#if !defined(__ENABLE_USM_ADDR_SPACE__)
414415
} else if constexpr (SrcAS == generic_space &&
415416
(Space == global_device || Space == global_host)) {
416417
return (dst_type)__spirv_GenericCastToPtrExplicit_ToGlobal(
417-
Ptr, __spv::StorageClass::CrossWorkgroup);
418+
const_cast<RemoveCvT *>(Ptr), __spv::StorageClass::CrossWorkgroup);
418419
#endif
419420
} else {
420421
static_assert(SupressNotImplementedAssert || Space != Space,

0 commit comments

Comments
 (0)