================
@@ -5206,7 +5206,8 @@ static void handleCallConvAttr(Sema &S, Decl *D, const 
ParsedAttr &AL) {
 static void handleDeviceKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
   const auto *FD = dyn_cast_or_null<FunctionDecl>(D);
   bool IsFunctionTemplate = FD && FD->getDescribedFunctionTemplate();
-  if (S.getASTContext().getTargetInfo().getTriple().isNVPTX()) {
+  if (S.getASTContext().getTargetInfo().getTriple().isNVPTX() &&
+      !DeviceKernelAttr::isOpenCLSpelling(AL)) {
     handleGlobalAttr(S, D, AL);
   } else {
----------------
sarnex wrote:

`handleDeviceKernelAttr` calls `handleGlobalAttr` because `handleGlobalAttr` is 
the function that implements the CUDA-specific logic for global variables and 
kernels.  The code showing device kernels are expected is 
[here](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDeclAttr.cpp#L5024).

This attribute doesn't have any spellings for HIP or CUDA. There are only 
generic, OpenCL, NVPTX and AMDGPU spellings. Even before the change, there was 
no CUDA/HIP spelling. As the NVPTX spelling was only allowed for NVPTX targets, 
it was implicitly required that `handleGlobalAttr` is only called for NVPTX 
even though it handles CUDA.

I'm not sure I understand the comment about OpenCL semantics. The only OpenCL 
specific thing in that branch is skipping the error check as OpenCL throws a 
more specific one. `handleSimpleAttribute` does not assume any semantics of any 
language, it's called by basically every attribute to attach the attribute to 
the AST object.

The original motivation was to add a way to specify SPIR kernels in source 
code, and the first draft of the PR did that but I received strong feedback 
that we should not keep adding new attributes to specify kernels and combine 
the attributes. Feel free to look at the history of the PR or post your 
feedback to Erich and Aaron who supported this change, but I think it is 
difficult to have perfectly clean separation and no special handling in general 
for a large open source project like LLVM.

https://github.com/llvm/llvm-project/pull/163859
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to