Skip to content

Commit 7933783

Browse files
[OpenCL] Add cl_intel_split_work_group_barrier builtins (llvm#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
1 parent 10c0de8 commit 7933783

2 files changed

Lines changed: 48 additions & 13 deletions

File tree

clang/lib/Sema/OpenCLBuiltins.td

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,25 +1895,26 @@ let Extension = FunctionExtension<"cl_khr_kernel_clock __opencl_c_kernel_clock_s
18951895
}
18961896

18971897
//--------------------------------------------------------------------
1898-
// Intel different sub-group extensions.
1899-
def FuncExtIntelSubgroups : FunctionExtension<"cl_intel_subgroups">;
1900-
def FuncExtIntelSubgroupsShort : FunctionExtension<"cl_intel_subgroups_short">;
1901-
def FuncExtIntelSubgroupsChar : FunctionExtension<"cl_intel_subgroups_char">;
1902-
def FuncExtIntelSubgroupsLong : FunctionExtension<"cl_intel_subgroups_long">;
1898+
// Intel extensions.
1899+
def FuncExtIntelBfloat16Conversions : FunctionExtension<"cl_intel_bfloat16_conversions">;
1900+
def FuncExtIntelSplitWorkGroupBarrier : FunctionExtension<"cl_intel_split_work_group_barrier">;
19031901
def FuncExtIntelSubgroupBufferPrefetch : FunctionExtension<"cl_intel_subgroup_buffer_prefetch">;
19041902
def FuncExtIntelSubgroupLocalBlockIO : FunctionExtension<"cl_intel_subgroup_local_block_io">;
1905-
def FuncExtIntelBfloat16Conversions : FunctionExtension<"cl_intel_bfloat16_conversions">;
1906-
def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">;
1907-
def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">;
1903+
def FuncExtIntelSubgroups : FunctionExtension<"cl_intel_subgroups">;
1904+
def FuncExtIntelSubgroupsChar : FunctionExtension<"cl_intel_subgroups_char">;
1905+
def FuncExtIntelSubgroupsCharLocalBlockIO : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_local_block_io">;
1906+
def FuncExtIntelSubgroupsCharPrefetch : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_buffer_prefetch">;
19081907
def FuncExtIntelSubgroupsCharRWImages : FunctionExtension<"cl_intel_subgroups_char __opencl_c_read_write_images">;
1908+
def FuncExtIntelSubgroupsLong : FunctionExtension<"cl_intel_subgroups_long">;
1909+
def FuncExtIntelSubgroupsLongLocalBlockIO : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_local_block_io">;
1910+
def FuncExtIntelSubgroupsLongPrefetch : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_buffer_prefetch">;
19091911
def FuncExtIntelSubgroupsLongRWImages : FunctionExtension<"cl_intel_subgroups_long __opencl_c_read_write_images">;
19101912
def FuncExtIntelSubgroupsPrefetch : FunctionExtension<"cl_intel_subgroups cl_intel_subgroup_buffer_prefetch">;
1911-
def FuncExtIntelSubgroupsShortPrefetch : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_buffer_prefetch">;
1912-
def FuncExtIntelSubgroupsCharPrefetch : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_buffer_prefetch">;
1913-
def FuncExtIntelSubgroupsLongPrefetch : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_buffer_prefetch">;
1913+
def FuncExtIntelSubgroupsRWImages : FunctionExtension<"cl_intel_subgroups __opencl_c_read_write_images">;
1914+
def FuncExtIntelSubgroupsShort : FunctionExtension<"cl_intel_subgroups_short">;
19141915
def FuncExtIntelSubgroupsShortLocalBlockIO : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_local_block_io">;
1915-
def FuncExtIntelSubgroupsCharLocalBlockIO : FunctionExtension<"cl_intel_subgroups_char cl_intel_subgroup_local_block_io">;
1916-
def FuncExtIntelSubgroupsLongLocalBlockIO : FunctionExtension<"cl_intel_subgroups_long cl_intel_subgroup_local_block_io">;
1916+
def FuncExtIntelSubgroupsShortPrefetch : FunctionExtension<"cl_intel_subgroups_short cl_intel_subgroup_buffer_prefetch">;
1917+
def FuncExtIntelSubgroupsShortRWImages : FunctionExtension<"cl_intel_subgroups_short __opencl_c_read_write_images">;
19171918

19181919
// cl_intel_subgroups - shuffle functions
19191920
// intel_sub_group_shuffle(T, uint) for float/int/uint vectors, half/double
@@ -2285,6 +2286,18 @@ let Extension = FuncExtIntelBfloat16Conversions in {
22852286
def : Builtin<"intel_convert_as_bfloat1616_float16", [VectorType<Float, 16>, VectorType<UShort, 16>], Attr.Const>;
22862287
}
22872288

2289+
let Extension = FuncExtIntelSplitWorkGroupBarrier in {
2290+
def : Builtin<"intel_work_group_barrier_arrive", [Void, MemFenceFlags], Attr.Convergent>;
2291+
let MinVersion = CL20 in {
2292+
def : Builtin<"intel_work_group_barrier_arrive", [Void, MemFenceFlags, MemoryScope], Attr.Convergent>;
2293+
}
2294+
2295+
def : Builtin<"intel_work_group_barrier_wait", [Void, MemFenceFlags], Attr.Convergent>;
2296+
let MinVersion = CL20 in {
2297+
def : Builtin<"intel_work_group_barrier_wait", [Void, MemFenceFlags, MemoryScope], Attr.Convergent>;
2298+
}
2299+
}
2300+
22882301
//--------------------------------------------------------------------
22892302
// Arm extensions.
22902303
let Extension = ArmIntegerDotProductInt8 in {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// RUN: %clang_cc1 -triple spir-unknown-unknown -cl-std=CL3.0 -fdeclare-opencl-builtins -verify -fsyntax-only %s
2+
// expected-no-diagnostics
3+
4+
// Keep this test header-free so it exercises OpenCLBuiltins.td instead of
5+
// declarations from opencl-c.h.
6+
7+
typedef unsigned int cl_mem_fence_flags;
8+
typedef enum memory_scope {
9+
memory_scope_work_item = 0,
10+
memory_scope_work_group = 1,
11+
memory_scope_device = 2,
12+
memory_scope_all_svm_devices = 3,
13+
memory_scope_sub_group = 4
14+
} memory_scope;
15+
16+
void test_split_work_group_barrier(cl_mem_fence_flags flags,
17+
memory_scope scope) {
18+
intel_work_group_barrier_arrive(flags);
19+
intel_work_group_barrier_wait(flags);
20+
intel_work_group_barrier_arrive(flags, scope);
21+
intel_work_group_barrier_wait(flags, scope);
22+
}

0 commit comments

Comments
 (0)