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

Reply via email to