[clang] [Clang][OpenCL] Fix wait_for_event argument address space with -fdeclare-opencl-builtins (PR #134598)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 7 01:23:53 PDT 2025
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
More information about the cfe-commits
mailing list