llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Igor Gorban (igorban-intel) <details> <summary>Changes</summary> 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 --- Full diff: https://github.com/llvm/llvm-project/pull/199424.diff 2 Files Affected: - (modified) clang/lib/Sema/OpenCLBuiltins.td (+11) - (added) clang/test/SemaOpenCL/intel-split-work-group-barrier-builtins.cl (+22) ``````````diff diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index dd96e5ac84bd3..623c3ce0bfcd0 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -1902,6 +1902,7 @@ 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 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">; @@ -2268,6 +2269,16 @@ let Extension = FuncExtIntelSubgroupsLongLocalBlockIO in { def : Builtin<"intel_sub_group_block_write_ul8", [Void, PointerType<ULong, LocalAS>, VectorType<ULong, 8>], Attr.Convergent>; } +let Extension = FuncExtIntelSplitWorkGroupBarrier in { + def : Builtin<"intel_work_group_barrier_arrive", [Void, MemFenceFlags], Attr.Convergent>; + def : Builtin<"intel_work_group_barrier_wait", [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, 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); +} `````````` </details> https://github.com/llvm/llvm-project/pull/199424 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
