https://github.com/igorban-intel updated https://github.com/llvm/llvm-project/pull/199424
>From 87c2b824ee0c93f87ec7a4a0048b273bc1b5eec8 Mon Sep 17 00:00:00 2001 From: "Gorban, Igor" <[email protected]> Date: Sat, 23 May 2026 21:00:17 +0200 Subject: [PATCH 1/3] [OpenCL] Add cl_intel_split_work_group_barrier builtins 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 --- clang/lib/Sema/OpenCLBuiltins.td | 13 +++++++++++ ...intel-split-work-group-barrier-builtins.cl | 22 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index d0c4b4ae58880..70a9cdfa2882d 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -1903,6 +1903,7 @@ def FuncExtIntelSubgroupsLong : FunctionExtension<"cl_intel_subgroups_long">; 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 FuncExtIntelSplitWorkGroupBarrier : FunctionExtension<"cl_intel_split_work_group_barrier">; def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">; def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">; def FuncExtIntelSubgroupsCharRWImages : FunctionExtension<"cl_intel_subgroups_char __opencl_c_read_write_images">; @@ -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); +} >From 2d68b6786e8f59ece12145152bb6c62765739be8 Mon Sep 17 00:00:00 2001 From: "Gorban, Igor" <[email protected]> Date: Tue, 26 May 2026 09:31:05 +0200 Subject: [PATCH 2/3] [OpenCL][NFC] Sort Intel FunctionExtension defs alphabetically Reorder the FunctionExtension declarations in the "Intel different sub-group extensions" section in alphabetical order to match LLVM coding style and make new additions easier to place. --- clang/lib/Sema/OpenCLBuiltins.td | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index 70a9cdfa2882d..7b1baf4bb1efc 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -1896,25 +1896,25 @@ let Extension = FunctionExtension<"cl_khr_kernel_clock __opencl_c_kernel_clock_s //-------------------------------------------------------------------- // Intel different 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">; -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 FuncExtIntelSplitWorkGroupBarrier : FunctionExtension<"cl_intel_split_work_group_barrier">; -def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">; -def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">; +def FuncExtIntelSubgroupBufferPrefetch : FunctionExtension<"cl_intel_subgroup_buffer_prefetch">; +def FuncExtIntelSubgroupLocalBlockIO : FunctionExtension<"cl_intel_subgroup_local_block_io">; +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 >From 0dd4f4b0bb0a2d5c53bca222dd919ba7416bbf68 Mon Sep 17 00:00:00 2001 From: "Gorban, Igor" <[email protected]> Date: Tue, 26 May 2026 09:35:25 +0200 Subject: [PATCH 3/3] [OpenCL][NFC] Update Intel extensions section comment The section now contains extensions beyond sub-group ones (cl_intel_bfloat16_conversions, cl_intel_split_work_group_barrier); broaden the comment accordingly. --- clang/lib/Sema/OpenCLBuiltins.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index 7b1baf4bb1efc..761c9771b0891 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -1895,7 +1895,7 @@ let Extension = FunctionExtension<"cl_khr_kernel_clock __opencl_c_kernel_clock_s } //-------------------------------------------------------------------- -// Intel different sub-group extensions. +// 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">; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
