[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG1854db74c549: opencl-c.h: add 3.0 optional extension support for a few more bits (authored by airlied). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 Files: clang/lib/Headers/opencl-c-base.h clang/lib/Headers/opencl-c.h Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -16011,7 +16011,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -16109,12 +16109,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -16151,7 +16151,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -16250,7 +16250,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -333,7 +333,13 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +/** + * Subgroups have different requirements on forward progress, so just test + * all the relevant macros. + * CL 3.0 sub-groups "they are not guaranteed to make independent forward progress" + * KHR subgroups "Subgroups within a workgroup are independent, make forward progress with respect to each other" + */ +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP #endif } memory_scope; Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -16011,7 +16011,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -16109,12 +16109,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -16151,7 +16151,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -16250,7 +16250,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
Anastasia accepted this revision. Anastasia added a comment. This revision is now accepted and ready to land. LGTM! Thanks Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
airlied updated this revision to Diff 364372. airlied added a comment. Added a comment on the subgroups difference. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 Files: clang/lib/Headers/opencl-c-base.h clang/lib/Headers/opencl-c.h Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -16011,7 +16011,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -16109,12 +16109,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -16151,7 +16151,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -16250,7 +16250,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -333,7 +333,13 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +/** + * Subgroups have different requirements on forward progress, so just test + * all the relevant macros. + * CL 3.0 sub-groups "they are not guaranteed to make independent forward progress" + * KHR subgroups "Subgroups within a workgroup are independent, make forward progress with respect to each other" + */ +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP #endif } memory_scope; Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -16011,7 +16011,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -16109,12 +16109,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -16151,7 +16151,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -16250,7 +16250,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
Anastasia added inline comments. Comment at: clang/lib/Headers/opencl-c-base.h:329 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP azabaznov wrote: > Anastasia wrote: > > We had a discussion with @azabaznov around features that are aliasing each > > other and we have discussed to use one feature macro for those. Clang > > should already ensure that both are set/unset simultaneously? And for those > > that are not set in clang we can set them correctly here in the header > > directly. > > > Yeah, I we did. Note that this is applicable to fp64 and 3d image writes, > while __openc_c_subgroups and cl_khr_subgroups are not equivalent as > extension requires subgroup-independent forward progress but > subgroup-independent forward progress is optional in OpenCL C 3.0. I'll try > submit a patch for 3d image writes feature macro support this week. Ok, I see so while the functions are identical they are not entirely equivalent extensions so vendors might support one but not the other? In this case I think we should keep checking both but it would be good to add a comment explaining why we are checking both macros here. Btw do you happen to have spec reference? I can't find anything relevant. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
airlied marked an inline comment as done. airlied added a comment. yeah I agree I'll drop those two changes. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
airlied updated this revision to Diff 359166. airlied added a comment. leave version checks alone since they are inside the outer extension check. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 Files: clang/lib/Headers/opencl-c-base.h clang/lib/Headers/opencl-c.h Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,7 +15282,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -15381,7 +15381,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -326,7 +326,7 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP #endif } memory_scope; Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,7 +15282,7 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); @@ -15381,7 +15381,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -326,7 +326,7 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
airlied updated this revision to Diff 359114. airlied added a comment. fixed up missing cl_khr_subgroups checks. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 Files: clang/lib/Headers/opencl-c-base.h clang/lib/Headers/opencl-c.h Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,21 +15282,21 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); uint__ovld get_num_sub_groups(void); -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_subgroups) || defined(cl_khr_subgroups) uint__ovld get_enqueued_num_sub_groups(void); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_subgroups) uint__ovld get_sub_group_id(void); uint__ovld get_sub_group_local_id(void); void__ovld __conv sub_group_barrier(cl_mem_fence_flags flags); -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_subgroups) || defined(cl_khr_subgroups) void__ovld __conv sub_group_barrier(cl_mem_fence_flags flags, memory_scope scope); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_subgroups) int __ovld __conv sub_group_all(int predicate); int __ovld __conv sub_group_any(int predicate); @@ -15381,7 +15381,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -326,7 +326,7 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP #endif } memory_scope; Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,21 +15282,21 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
azabaznov added inline comments. Comment at: clang/lib/Headers/opencl-c-base.h:329 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP Anastasia wrote: > We had a discussion with @azabaznov around features that are aliasing each > other and we have discussed to use one feature macro for those. Clang should > already ensure that both are set/unset simultaneously? And for those that are > not set in clang we can set them correctly here in the header directly. > Yeah, I we did. Note that this is applicable to fp64 and 3d image writes, while __openc_c_subgroups and cl_khr_subgroups are not equivalent as extension requires subgroup-independent forward progress but subgroup-independent forward progress is optional in OpenCL C 3.0. I'll try submit a patch for 3d image writes feature macro support this week. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
Anastasia added a subscriber: azabaznov. Anastasia added inline comments. Comment at: clang/lib/Headers/opencl-c-base.h:329 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP We had a discussion with @azabaznov around features that are aliasing each other and we have discussed to use one feature macro for those. Clang should already ensure that both are set/unset simultaneously? And for those that are not set in clang we can set them correctly here in the header directly. Comment at: clang/lib/Headers/opencl-c.h:15290 uint__ovld get_num_sub_groups(void); -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_subgroups) uint__ovld get_enqueued_num_sub_groups(void); I think that here guarding the OpenCL version is correct? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D105858/new/ https://reviews.llvm.org/D105858 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D105858: opencl-c.h: add 3.0 optional extension support for a few more bits
airlied created this revision. airlied added a project: clang. Herald added subscribers: ldrumm, Anastasia, yaxunl. airlied requested review of this revision. Herald added a subscriber: cfe-commits. These 3 are fairly simple, pipes, workgroups and subgroups. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D105858 Files: clang/lib/Headers/opencl-c-base.h clang/lib/Headers/opencl-c.h Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,21 +15282,21 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) // Shared Sub Group Functions uint__ovld get_sub_group_size(void); uint__ovld get_max_sub_group_size(void); uint__ovld get_num_sub_groups(void); -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_subgroups) uint__ovld get_enqueued_num_sub_groups(void); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_subgroups) uint__ovld get_sub_group_id(void); uint__ovld get_sub_group_local_id(void); void__ovld __conv sub_group_barrier(cl_mem_fence_flags flags); -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_subgroups) void__ovld __conv sub_group_barrier(cl_mem_fence_flags flags, memory_scope scope); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_subgroups) int __ovld __conv sub_group_all(int predicate); int __ovld __conv sub_group_any(int predicate); @@ -15381,7 +15381,7 @@ double __ovld __conv sub_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //cl_khr_subgroups cl_intel_subgroups +#endif //cl_khr_subgroups cl_intel_subgroups __opencl_c_subgroups #if defined(cl_khr_subgroup_extended_types) char __ovld __conv sub_group_broadcast( char value, uint index ); Index: clang/lib/Headers/opencl-c-base.h === --- clang/lib/Headers/opencl-c-base.h +++ clang/lib/Headers/opencl-c-base.h @@ -326,7 +326,7 @@ memory_scope_all_devices = memory_scope_all_svm_devices, #endif // __OPENCL_C_VERSION__ >= CL_VERSION_3_0 #endif // defined(__opencl_c_atomic_scope_all_devices) -#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) +#if defined(cl_intel_subgroups) || defined(cl_khr_subgroups) || defined(__opencl_c_subgroups) memory_scope_sub_group = __OPENCL_MEMORY_SCOPE_SUB_GROUP #endif } memory_scope; Index: clang/lib/Headers/opencl-c.h === --- clang/lib/Headers/opencl-c.h +++ clang/lib/Headers/opencl-c.h @@ -15142,7 +15142,7 @@ // OpenCL v2.0 s6.13.15 - Work-group Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_work_group_collective_functions) int __ovld __conv work_group_all(int predicate); int __ovld __conv work_group_any(int predicate); @@ -15240,12 +15240,12 @@ double __ovld __conv work_group_scan_inclusive_max(double x); #endif //cl_khr_fp64 -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_work_group_collective_functions) // OpenCL v2.0 s6.13.16 - Pipe Functions -#if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#if defined(__opencl_c_pipes) bool __ovld is_valid_reserve_id(reserve_id_t reserve_id); -#endif //defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_2_0) +#endif //defined(__opencl_c_pipes) // OpenCL v2.0 s6.13.17 - Enqueue Kernels @@ -15282,21 +15282,21 @@ // OpenCL Extension v2.0 s9.17 - Sub-groups -#if