diff options
| author | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2022-04-21 11:44:11 -0400 |
|---|---|---|
| committer | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2022-04-22 17:05:36 -0400 |
| commit | 04fb81674ed7981397ffe70fe6a07b7168f6fe2f (patch) | |
| tree | 4bd34ca46fdd951115e18c094732f478bc7e4856 /clang/lib/CodeGen/CodeGenModule.cpp | |
| parent | baebe12ad0d6f514cd33e418d6504075d3e79c0a (diff) | |
[CUDA][HIP] Externalize kernels with internal linkage
This patch is a continuation of https://reviews.llvm.org/D123353.
Not only kernels in anonymous namespace, but also template
kernels with template arguments in anonymous namespace
need to be externalized.
To be more generic, this patch checks the linkage of a kernel
assuming the kernel does not have __global__ attribute. If
the linkage is internal then clang will externalize it.
This patch also fixes the postfix for externalized symbol
since nvptx does not allow '.' in symbol name.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D124189
Fixes: https://github.com/llvm/llvm-project/issues/54560
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index e1afe81e5a80..784f2d0e578f 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -6809,6 +6809,12 @@ bool CodeGenModule::stopAutoInit() { void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const { - OS << (isa<VarDecl>(D) ? "__static__" : ".anon.") - << getContext().getCUIDHash(); + StringRef Tag; + // ptxas does not allow '.' in symbol names. On the other hand, HIP prefers + // postfix beginning with '.' since the symbol name can be demangled. + if (LangOpts.HIP) + Tag = (isa<VarDecl>(D) ? ".static." : ".intern."); + else + Tag = (isa<VarDecl>(D) ? "__static__" : "__intern__"); + OS << Tag << getContext().getCUIDHash(); } |
