Author: Igor Gorban Date: 2026-05-26T05:16:57-07:00 New Revision: 79337832f7a35c1ae5326a80c37a6459dd752048
URL: https://github.com/llvm/llvm-project/commit/79337832f7a35c1ae5326a80c37a6459dd752048 DIFF: https://github.com/llvm/llvm-project/commit/79337832f7a35c1ae5326a80c37a6459dd752048.diff LOG: [OpenCL] Add cl_intel_split_work_group_barrier builtins (#199424) Add cl_intel_split_work_group_barrier declarations to OpenCLBuiltins.td and cover the extension with a dedicated header-free SPIR test. Specification: https://registry.khronos.org/OpenCL/extensions/intel/cl_intel_split_work_group_barrier.html Co-authored-by: Copilot Added: clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl Modified: clang/lib/Sema/OpenCLBuiltins.td Removed: ################################################################################ diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index d0c4b4ae58880..761c9771b0891 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -1895,25 +1895,26 @@ let Extension = FunctionExtension<"cl_khr_kernel_clock __opencl_c_kernel_clock_s } //-------------------------------------------------------------------- -// Intel diff erent sub-group extensions. -def FuncExtIntelSubgroups : FunctionExtension<"cl_intel_subgroups">; -def FuncExtIntelSubgroupsShort : FunctionExtension<"cl_intel_subgroups_short">; -def FuncExtIntelSubgroupsChar : FunctionExtension<"cl_intel_subgroups_char">; -def FuncExtIntelSubgroupsLong : FunctionExtension<"cl_intel_subgroups_long">; +// Intel extensions. +def FuncExtIntelBfloat16Conversions : FunctionExtension<"cl_intel_bfloat16_conversions">; +def FuncExtIntelSplitWorkGroupBarrier : FunctionExtension<"cl_intel_split_work_group_barrier">; def FuncExtIntelSubgroupBufferPrefetch : FunctionExtension<"cl_intel_subgroup_buffer_prefetch">; def FuncExtIntelSubgroupLocalBlockIO : FunctionExtension<"cl_intel_subgroup_local_block_io">; -def FuncExtIntelBfloat16Conversions : FunctionExtension<"cl_intel_bfloat16_conversions">; -def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">; -def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">; +def FuncExtIntelSubgroups : FunctionExtension<"cl_intel_subgroups">; +def FuncExtIntelSubgroupsChar : FunctionExtension<"cl_intel_subgroups_char">; +def FuncExtIntelSubgroupsCharLocalBlockIO : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_local_block_io">; +def FuncExtIntelSubgroupsCharPrefetch : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_buffer_prefetch">; def FuncExtIntelSubgroupsCharRWImages : FunctionExtension<"cl_intel_subgroups_char __opencl_c_read_write_images">; +def FuncExtIntelSubgroupsLong : FunctionExtension<"cl_intel_subgroups_long">; +def FuncExtIntelSubgroupsLongLocalBlockIO : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_local_block_io">; +def FuncExtIntelSubgroupsLongPrefetch : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_buffer_prefetch">; def FuncExtIntelSubgroupsLongRWImages : FunctionExtension<"cl_intel_subgroups_long __opencl_c_read_write_images">; def FuncExtIntelSubgroupsPrefetch : FunctionExtension<"cl_intel_subgroups cl_intel_subgroup_buffer_prefetch">; -def FuncExtIntelSubgroupsShortPrefetch : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_buffer_prefetch">; -def FuncExtIntelSubgroupsCharPrefetch : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_buffer_prefetch">; -def FuncExtIntelSubgroupsLongPrefetch : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_buffer_prefetch">; +def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">; +def FuncExtIntelSubgroupsShort : FunctionExtension<"cl_intel_subgroups_short">; def FuncExtIntelSubgroupsShortLocalBlockIO : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_local_block_io">; -def FuncExtIntelSubgroupsCharLocalBlockIO : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_local_block_io">; -def FuncExtIntelSubgroupsLongLocalBlockIO : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_local_block_io">; +def FuncExtIntelSubgroupsShortPrefetch : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_buffer_prefetch">; +def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">; // cl_intel_subgroups - shuffle functions // intel_sub_group_shuffle(T, uint) for float/int/uint vectors, half/double @@ -2285,6 +2286,18 @@ let Extension = FuncExtIntelBfloat16Conversions in { def : Builtin<"intel_convert_as_bfloat1616_float16", [VectorType<Float, 16>, VectorType<UShort, 16>], Attr.Const>; } +let Extension = FuncExtIntelSplitWorkGroupBarrier in { + def : Builtin<"intel_work_group_barrier_arrive", [Void, MemFenceFlags], Attr.Convergent>; + let MinVersion = CL20 in { + def : Builtin<"intel_work_group_barrier_arrive", [Void, MemFenceFlags, MemoryScope], Attr.Convergent>; + } + + def : Builtin<"intel_work_group_barrier_wait", [Void, MemFenceFlags], Attr.Convergent>; + let MinVersion = CL20 in { + def : Builtin<"intel_work_group_barrier_wait", [Void, MemFenceFlags, MemoryScope], Attr.Convergent>; + } +} + //-------------------------------------------------------------------- // Arm extensions. let Extension = ArmIntegerDotProductInt8 in { diff --git a/clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl b/clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl new file mode 100644 index 0000000000000..da4623aa9d893 --- /dev/null +++ b/clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -triple spir-unknown-unknown -cl-std=CL3.0 -fdeclare-opencl-builtins -verify -fsyntax-only %s +// expected-no-diagnostics + +// Keep this test header-free so it exercises OpenCLBuiltins.td instead of +// declarations from opencl-c.h. + +typedef unsigned int cl_mem_fence_flags; +typedef enum memory_scope { + memory_scope_work_item = 0, + memory_scope_work_group = 1, + memory_scope_device = 2, + memory_scope_all_svm_devices = 3, + memory_scope_sub_group = 4 +} memory_scope; + +void test_split_work_group_barrier(cl_mem_fence_flags flags, + memory_scope scope) { + intel_work_group_barrier_arrive(flags); + intel_work_group_barrier_wait(flags); + intel_work_group_barrier_arrive(flags, scope); + intel_work_group_barrier_wait(flags, scope); +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
