diff options
author | Justin Holewinski <jholewinski@nvidia.com> | 2014-06-27 18:35:10 +0000 |
---|---|---|
committer | Justin Holewinski <jholewinski@nvidia.com> | 2014-06-27 18:35:10 +0000 |
commit | a54609ed935ffb5bc83fad3b9839275f96b11d3f (patch) | |
tree | ddc5e95ad1d799a0bf270ba4603fc0826fd381aa | |
parent | d51ee46dc5fad325d483620a4ef78b25692e2e28 (diff) | |
download | llvm-a54609ed935ffb5bc83fad3b9839275f96b11d3f.tar.gz llvm-a54609ed935ffb5bc83fad3b9839275f96b11d3f.tar.bz2 llvm-a54609ed935ffb5bc83fad3b9839275f96b11d3f.tar.xz |
[NVPTX] Emit .weak when linkage is not external, internal, or private
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211926 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 7 | ||||
-rw-r--r-- | test/CodeGen/NVPTX/weak-linkage.ll | 12 |
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/lib/Target/NVPTX/NVPTXAsmPrinter.cpp index c2ba12df85..34de7bbd8a 100644 --- a/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ b/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -1305,6 +1305,10 @@ bool NVPTXAsmPrinter::doFinalization(Module &M) { // external global variable with init -> .visible // external without init -> .extern // appending -> not allowed, assert. +// for any linkage other than +// internal, private, linker_private, +// linker_private_weak, linker_private_weak_def_auto, +// we emit -> .weak. void NVPTXAsmPrinter::emitLinkageDirective(const GlobalValue *V, raw_ostream &O) { @@ -1330,6 +1334,9 @@ void NVPTXAsmPrinter::emitLinkageDirective(const GlobalValue *V, msg.append(V->getName().str()); msg.append("has unsupported appending linkage type"); llvm_unreachable(msg.c_str()); + } else if (!V->hasInternalLinkage() && + !V->hasPrivateLinkage()) { + O << ".weak "; } } } diff --git a/test/CodeGen/NVPTX/weak-linkage.ll b/test/CodeGen/NVPTX/weak-linkage.ll new file mode 100644 index 0000000000..7a13357836 --- /dev/null +++ b/test/CodeGen/NVPTX/weak-linkage.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s + + +; CHECK: .weak .func foo +define weak void @foo() { + ret void +} + +; CHECK: .visible .func bar +define void @bar() { + ret void +} |