Author: Sven van Haastregt Date: 2021-02-24T09:27:36Z New Revision: 0344aea6ea379d945d1de1f5c258414dc61ccacd
URL: https://github.com/llvm/llvm-project/commit/0344aea6ea379d945d1de1f5c258414dc61ccacd DIFF: https://github.com/llvm/llvm-project/commit/0344aea6ea379d945d1de1f5c258414dc61ccacd.diff LOG: [OpenCL] Add ndrange builtin functions to TableGen Also ensure all kernel enqueue functions have CL 2.0 as minimum version. Differential Revision: https://reviews.llvm.org/D97060 Added: Modified: clang/lib/Sema/OpenCLBuiltins.td clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl Removed: ################################################################################ diff --git a/clang/lib/Sema/OpenCLBuiltins.td b/clang/lib/Sema/OpenCLBuiltins.td index 77d0203629eb..f2a9b98196e8 100644 --- a/clang/lib/Sema/OpenCLBuiltins.td +++ b/clang/lib/Sema/OpenCLBuiltins.td @@ -311,6 +311,7 @@ def Queue : Type<"queue_t", QualType<"Context.OCLQueueTy">>; def ReserveId : Type<"reserve_id_t", QualType<"Context.OCLReserveIDTy">>; def MemFenceFlags : TypedefType<"cl_mem_fence_flags">; def ClkProfilingInfo : TypedefType<"clk_profiling_info">; +def NDRange : TypedefType<"ndrange_t">; // OpenCL v2.0 s6.13.11: Atomic integer and floating-point types. def AtomicInt : Type<"atomic_int", QualType<"Context.getAtomicType(Context.IntTy)">>; @@ -1353,21 +1354,38 @@ def : Builtin<"is_valid_reserve_id", [Bool, ReserveId]>; // Defined in Builtins.def // --- Table 33 --- -def : Builtin<"enqueue_marker", - [Int, Queue, UInt, PointerType<ConstType<ClkEvent>, GenericAS>, PointerType<ClkEvent, GenericAS>]>; - -// --- Table 34 --- -def : Builtin<"retain_event", [Void, ClkEvent]>; -def : Builtin<"release_event", [Void, ClkEvent]>; -def : Builtin<"create_user_event", [ClkEvent]>; -def : Builtin<"is_valid_event", [Bool, ClkEvent]>; -def : Builtin<"set_user_event_status", [Void, ClkEvent, Int]>; -def : Builtin<"capture_event_profiling_info", - [Void, ClkEvent, ClkProfilingInfo, PointerType<Void, GlobalAS>]>; - -// --- Table 35 --- -def : Builtin<"get_default_queue", [Queue]>; -// TODO: ndrange functions +let MinVersion = CL20 in { + def : Builtin<"enqueue_marker", + [Int, Queue, UInt, PointerType<ConstType<ClkEvent>, GenericAS>, PointerType<ClkEvent, GenericAS>]>; + + // --- Table 34 --- + def : Builtin<"retain_event", [Void, ClkEvent]>; + def : Builtin<"release_event", [Void, ClkEvent]>; + def : Builtin<"create_user_event", [ClkEvent]>; + def : Builtin<"is_valid_event", [Bool, ClkEvent]>; + def : Builtin<"set_user_event_status", [Void, ClkEvent, Int]>; + def : Builtin<"capture_event_profiling_info", + [Void, ClkEvent, ClkProfilingInfo, PointerType<Void, GlobalAS>]>; + + // --- Table 35 --- + def : Builtin<"get_default_queue", [Queue]>; + + def : Builtin<"ndrange_1D", [NDRange, Size]>; + def : Builtin<"ndrange_1D", [NDRange, Size, Size]>; + def : Builtin<"ndrange_1D", [NDRange, Size, Size, Size]>; + def : Builtin<"ndrange_2D", [NDRange, PointerType<ConstType<Size>, PrivateAS>]>; + def : Builtin<"ndrange_2D", [NDRange, PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>]>; + def : Builtin<"ndrange_2D", [NDRange, PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>]>; + def : Builtin<"ndrange_3D", [NDRange, PointerType<ConstType<Size>, PrivateAS>]>; + def : Builtin<"ndrange_3D", [NDRange, PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>]>; + def : Builtin<"ndrange_3D", [NDRange, PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>, + PointerType<ConstType<Size>, PrivateAS>]>; +} //-------------------------------------------------------------------- diff --git a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl index b7a1d6fbbcf1..9a5ed77b1635 100644 --- a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl +++ b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl @@ -51,6 +51,8 @@ typedef int clk_profiling_info; typedef uint cl_mem_fence_flags; #define CLK_GLOBAL_MEM_FENCE 0x02 +typedef struct {int a;} ndrange_t; + // Enable extensions that are enabled in opencl-c-base.h. #if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) #define cl_khr_subgroup_extended_types 1 @@ -88,6 +90,9 @@ void test_typedef_args(clk_event_t evt, volatile atomic_flag *flg, global unsign atomic_flag_clear(flg); bool result = atomic_flag_test_and_set(flg); + + size_t ws[2] = {2, 8}; + ndrange_t r = ndrange_2D(ws); } #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits