From 287bbed81405130282ffa4aca452fd48c8d96de7 Mon Sep 17 00:00:00 2001 From: James Brodman Date: Wed, 15 Jan 2020 11:18:15 -0500 Subject: [PATCH 1/3] Change const to constexpr to make GCC happy Signed-off-by: James Brodman --- sycl/plugins/opencl/pi_opencl.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/sycl/plugins/opencl/pi_opencl.cpp b/sycl/plugins/opencl/pi_opencl.cpp index 75707db6aca1f..4e9b15a1b6e96 100755 --- a/sycl/plugins/opencl/pi_opencl.cpp +++ b/sycl/plugins/opencl/pi_opencl.cpp @@ -31,16 +31,16 @@ template To cast(From value) { } // Names of USM functions that are queried from OpenCL -const char clHostMemAllocName[] = "clHostMemAllocINTEL"; -const char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; -const char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; -const char clMemFreeName[] = "clMemFreeINTEL"; -const char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; -const char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; -const char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; -const char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; -const char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; -const char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; +constexpr char clHostMemAllocName[] = "clHostMemAllocINTEL"; +constexpr char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; +constexpr char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; +constexpr char clMemFreeName[] = "clMemFreeINTEL"; +constexpr char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; +constexpr char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; +constexpr char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; +constexpr char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; +constexpr char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; +constexpr char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; // USM helper function to get an extension function pointer template From eff3049a5f0122a332c8ae1967f79ecf29c02d4a Mon Sep 17 00:00:00 2001 From: James Brodman Date: Wed, 15 Jan 2020 16:57:40 -0500 Subject: [PATCH 2/3] Better handle quirky compilers Signed-off-by: James Brodman --- sycl/plugins/opencl/pi_opencl.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sycl/plugins/opencl/pi_opencl.cpp b/sycl/plugins/opencl/pi_opencl.cpp index 4e9b15a1b6e96..e889bd2805914 100755 --- a/sycl/plugins/opencl/pi_opencl.cpp +++ b/sycl/plugins/opencl/pi_opencl.cpp @@ -30,6 +30,8 @@ template To cast(From value) { return (To)(value); } +// Older versions of GCC don't like "const" here +#if defined(__GNUC__) && (__GNUC__ < 7 || (__GNU__C == 7 && __GNUC_MINOR__ < 2)) // Names of USM functions that are queried from OpenCL constexpr char clHostMemAllocName[] = "clHostMemAllocINTEL"; constexpr char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; @@ -41,6 +43,21 @@ constexpr char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; constexpr char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; constexpr char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; constexpr char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; +#else +// Names of USM functions that are queried from OpenCL +const char clHostMemAllocName[] = "clHostMemAllocINTEL"; +const char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; +const char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; +const char clMemFreeName[] = "clMemFreeINTEL"; +const char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; +const char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; +const char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; +const char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; +const char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; +const char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; +#endif + + // USM helper function to get an extension function pointer template From 6a988316c280f10d2f825bfea8ac24077672d2ac Mon Sep 17 00:00:00 2001 From: James Brodman Date: Thu, 16 Jan 2020 10:02:14 -0500 Subject: [PATCH 3/3] Use macro magic to reduce duplication Signed-off-by: James Brodman --- sycl/plugins/opencl/pi_opencl.cpp | 38 +++++++++++++------------------ 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/sycl/plugins/opencl/pi_opencl.cpp b/sycl/plugins/opencl/pi_opencl.cpp index e889bd2805914..5431c8884c81d 100755 --- a/sycl/plugins/opencl/pi_opencl.cpp +++ b/sycl/plugins/opencl/pi_opencl.cpp @@ -32,31 +32,25 @@ template To cast(From value) { // Older versions of GCC don't like "const" here #if defined(__GNUC__) && (__GNUC__ < 7 || (__GNU__C == 7 && __GNUC_MINOR__ < 2)) -// Names of USM functions that are queried from OpenCL -constexpr char clHostMemAllocName[] = "clHostMemAllocINTEL"; -constexpr char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; -constexpr char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; -constexpr char clMemFreeName[] = "clMemFreeINTEL"; -constexpr char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; -constexpr char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; -constexpr char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; -constexpr char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; -constexpr char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; -constexpr char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; +#define CONSTFIX constexpr #else -// Names of USM functions that are queried from OpenCL -const char clHostMemAllocName[] = "clHostMemAllocINTEL"; -const char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; -const char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; -const char clMemFreeName[] = "clMemFreeINTEL"; -const char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; -const char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; -const char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; -const char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; -const char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; -const char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; +#define CONSTFIX const #endif +// Names of USM functions that are queried from OpenCL +CONSTFIX char clHostMemAllocName[] = "clHostMemAllocINTEL"; +CONSTFIX char clDeviceMemAllocName[] = "clDeviceMemAllocINTEL"; +CONSTFIX char clSharedMemAllocName[] = "clSharedMemAllocINTEL"; +CONSTFIX char clMemFreeName[] = "clMemFreeINTEL"; +CONSTFIX char clSetKernelArgMemPointerName[] = "clSetKernelArgMemPointerINTEL"; +CONSTFIX char clEnqueueMemsetName[] = "clEnqueueMemsetINTEL"; +CONSTFIX char clEnqueueMemcpyName[] = "clEnqueueMemcpyINTEL"; +CONSTFIX char clEnqueueMigrateMemName[] = "clEnqueueMigrateMemINTEL"; +CONSTFIX char clEnqueueMemAdviseName[] = "clEnqueueMemAdviseINTEL"; +CONSTFIX char clGetMemAllocInfoName[] = "clGetMemAllocInfoINTEL"; + +#undef CONSTFIX + // USM helper function to get an extension function pointer