tianshilei1992 created this revision.
Herald added subscribers: guansong, yaxunl.
tianshilei1992 requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.

Current OpenMP wrapper header `__clang_openmp_device_functions.h`
doesn't include the header for CUDA builtin vars, so variable like `threadIdx`
cannot be used in OpenMP code, even within `declare target`.

This patch includes the header. One thing left is, is it fine that we still use
the name `__clang_openmp_device_functions.h`? Those builtin vars seems like not
part of "device functions".


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D94884

Files:
  clang/lib/Headers/__clang_cuda_builtin_vars.h
  clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h


Index: clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
===================================================================
--- clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
+++ clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
@@ -30,6 +30,9 @@
 /// Provide definitions for these functions.
 #include <__clang_cuda_device_functions.h>
 
+/// Provide definition for CUDA builtin variables
+#include <__clang_cuda_builtin_vars.h>
+
 #undef __OPENMP_NVPTX__
 #undef __CUDA__
 
Index: clang/lib/Headers/__clang_cuda_builtin_vars.h
===================================================================
--- clang/lib/Headers/__clang_cuda_builtin_vars.h
+++ clang/lib/Headers/__clang_cuda_builtin_vars.h
@@ -101,8 +101,12 @@
   __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_gridDim_t);
 };
 
+#ifdef __OPENMP_NVPTX__
+#define __CUDA_BUILTIN_VAR extern const __attribute__((weak))
+#else
 #define __CUDA_BUILTIN_VAR                                                     
\
   extern const __attribute__((device)) __attribute__((weak))
+#endif
 __CUDA_BUILTIN_VAR __cuda_builtin_threadIdx_t threadIdx;
 __CUDA_BUILTIN_VAR __cuda_builtin_blockIdx_t blockIdx;
 __CUDA_BUILTIN_VAR __cuda_builtin_blockDim_t blockDim;


Index: clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
===================================================================
--- clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
+++ clang/lib/Headers/openmp_wrappers/__clang_openmp_device_functions.h
@@ -30,6 +30,9 @@
 /// Provide definitions for these functions.
 #include <__clang_cuda_device_functions.h>
 
+/// Provide definition for CUDA builtin variables
+#include <__clang_cuda_builtin_vars.h>
+
 #undef __OPENMP_NVPTX__
 #undef __CUDA__
 
Index: clang/lib/Headers/__clang_cuda_builtin_vars.h
===================================================================
--- clang/lib/Headers/__clang_cuda_builtin_vars.h
+++ clang/lib/Headers/__clang_cuda_builtin_vars.h
@@ -101,8 +101,12 @@
   __CUDA_DISALLOW_BUILTINVAR_ACCESS(__cuda_builtin_gridDim_t);
 };
 
+#ifdef __OPENMP_NVPTX__
+#define __CUDA_BUILTIN_VAR extern const __attribute__((weak))
+#else
 #define __CUDA_BUILTIN_VAR                                                     \
   extern const __attribute__((device)) __attribute__((weak))
+#endif
 __CUDA_BUILTIN_VAR __cuda_builtin_threadIdx_t threadIdx;
 __CUDA_BUILTIN_VAR __cuda_builtin_blockIdx_t blockIdx;
 __CUDA_BUILTIN_VAR __cuda_builtin_blockDim_t blockDim;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to