[clang] 0344aea - [OpenCL] Add ndrange builtin functions to TableGen
Sven van Haastregt via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 24 01:33:15 PST 2021
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
More information about the cfe-commits
mailing list