[PATCH] D124189: [CUDA][HIP] Externalize kernels with internal linkage
    Yaxun Liu via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Thu Apr 21 14:02:54 PDT 2022
    
    
  
yaxunl added inline comments.
================
Comment at: clang/lib/AST/ASTContext.cpp:12300
+         (D->hasAttr<CUDAGlobalAttr>() &&
+          GetGVALinkageForFunction(cast<FunctionDecl>(D),
+                                   /*IgnoreCUDAGlobalAttr=*/true) ==
----------------
tra wrote:
> yaxunl wrote:
> > tra wrote:
> > > Perhaps we don't need to change the public AST API and plumb `IgnoreCUDAGlobalAttr` through.
> > > We cold create CUDA-aware static version of `GetGVALinkageForCudaKernel` instead, which would call `adjustGVALinkageForExternalDefinitionKind(..., adjustGVALinkageForAttributes(IgnoreCUDAGlobalAttr=true))`.
> > We could have a static function but it would be GetGVALinkageForCUDAKernelWithoutGlobalAttr since we need to know the linkage of the kernel assuming it has no `__global__` attribute.
> > 
> > If you think it is OK I can make the change.
> No point making public what's of no use to anybody other than this particular instance.
> 
> To think of it, we don't even need a function and could just do 
> ```
>   if (D->hasAttr<CUDAGlobalAttr>() ) {
>     bool OriginalKernelLinkage = adjustGVALinkageForExternalDefinitionKind(..., adjustGVALinkageForAttributes(IgnoreCUDAGlobalAttr=true));
>     return OriginalKernelLinkage == GVA_Internal;
>   }
>   return (IsStaticVar &&....)
> ```
> 
> 
One disadvantage of this approach is that it duplicates the code in GetGVALinkageForFunction. In the future, if GetGVALinkageForFunction changes, the same change needs to be applied to the duplicated code, which is error-prone.
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124189/new/
https://reviews.llvm.org/D124189
    
    
More information about the cfe-commits
mailing list