[PATCH] D124189: [CUDA][HIP] Externalize kernels with internal linkage

Artem Belevich via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 21 13:56:05 PDT 2022

tra added inline comments.

Comment at: clang/lib/AST/ASTContext.cpp:12300
+         (D->hasAttr<CUDAGlobalAttr>() &&
+          GetGVALinkageForFunction(cast<FunctionDecl>(D),
+                                   /*IgnoreCUDAGlobalAttr=*/true) ==
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 &&....)



More information about the cfe-commits mailing list