llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Juan Manuel Martinez Caamaño (jmmartinez) <details> <summary>Changes</summary> The pointer argument for `wait_for_event(int, event_t*)` should take the default address space: generic if available, otherwise private. Before this patch it would always be generic with `-fdeclare-opencl-builtins`. This was inconsistent with the behavior when opencl-c.h is included. --- Full diff: https://github.com/llvm/llvm-project/pull/134598.diff 2 Files Affected: - (modified) clang/lib/Sema/OpenCLBuiltins.td (+15-3) - (modified) clang/test/CodeGenOpenCL/fdeclare-opencl-builtins.cl (+9) ``````````diff diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index 4da61429fcce7..528b700a275e0 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -958,13 +958,25 @@ foreach name = ["async_work_group_strided_copy"] in { def : Builtin<name, [Event, PointerType<AGenTypeN, LocalAS>, PointerType<ConstType<AGenTypeN>, GlobalAS>, Size, Size, Event]>; def : Builtin<name, [Event, PointerType<AGenTypeN, GlobalAS>, PointerType<ConstType<AGenTypeN>, LocalAS>, Size, Size, Event]>; } -foreach name = ["wait_group_events"] in { - def : Builtin<name, [Void, Int, PointerType<Event, GenericAS>]>; -} foreach name = ["prefetch"] in { def : Builtin<name, [Void, PointerType<ConstType<AGenTypeN>, GlobalAS>, Size]>; } +// The wait_group_events is declared with an argument of type event_t*. +// The address-space of the pointer parameter is different if the generic address space is available. +multiclass BuiltinWithDefaultPointerArg<AddressSpace AS> { + foreach name = ["wait_group_events"] in { + def : Builtin<name, [Void, Int, PointerType<Event, AS>]>; + } +} + +let Extension = FuncExtOpenCLCNamedAddressSpaceBuiltins in { + defm : BuiltinWithDefaultPointerArg<PrivateAS>; +} +let Extension = FuncExtOpenCLCGenericAddressSpace in { + defm : BuiltinWithDefaultPointerArg<GenericAS>; +} + //-------------------------------------------------------------------- // OpenCL v2.0 s6.13.11 - Atomics Functions. // Functions that use memory_order and cl_mem_fence_flags enums are not diff --git a/clang/test/CodeGenOpenCL/fdeclare-opencl-builtins.cl b/clang/test/CodeGenOpenCL/fdeclare-opencl-builtins.cl index ac3bff9dbde27..8bd1db5d06819 100644 --- a/clang/test/CodeGenOpenCL/fdeclare-opencl-builtins.cl +++ b/clang/test/CodeGenOpenCL/fdeclare-opencl-builtins.cl @@ -48,6 +48,15 @@ void test_generic_optionality(float a, float *b) { float res = fract(a, b); } +// Test that the correct builtin is called depending on the generic address +// space feature availability. If not available, the __private version is called +// CHECK-LABEL: @test_wait_group_events +// CHECK-GAS: call spir_func void @_Z17wait_group_eventsiPU3AS49ocl_event +// CHECK-NOGAS: call spir_func void @_Z17wait_group_eventsiP9ocl_event +void test_wait_group_events(int i, event_t *e) { + wait_group_events(i, e); +} + // CHECK: attributes [[ATTR_CONST]] = // CHECK-SAME: memory(none) // CHECK: attributes [[ATTR_PURE]] = `````````` </details> https://github.com/llvm/llvm-project/pull/134598 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits