summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorYaxun (Sam) Liu <yaxun.liu@amd.com>2022-04-21 11:44:11 -0400
committerYaxun (Sam) Liu <yaxun.liu@amd.com>2022-04-22 17:05:36 -0400
commit04fb81674ed7981397ffe70fe6a07b7168f6fe2f (patch)
tree4bd34ca46fdd951115e18c094732f478bc7e4856 /clang/lib/CodeGen/CodeGenModule.cpp
parentbaebe12ad0d6f514cd33e418d6504075d3e79c0a (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.cpp10
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();
}