mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-18 01:18:33 +00:00
[NVPTX] Do not emit .weak symbols for NVPTX
Summary: ".weak" symbols cannot be consumed by ptxas (PR21685). This patch makes the weak directive in MCAsmPrinter customizable, and disables emitting ".weak" symbols for NVPTX. Test Plan: weak-linkage.ll Reviewers: jholewinski Reviewed By: jholewinski Subscribers: majnemer, jholewinski, llvm-commits Differential Revision: http://reviews.llvm.org/D6455 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223077 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
03c735b42c
commit
b043278834
@ -215,7 +215,8 @@ protected:
|
||||
|
||||
//===--- Global Variable Emission Directives --------------------------===//
|
||||
|
||||
/// This is the directive used to declare a global entity. Defaults to NULL.
|
||||
/// This is the directive used to declare a global entity. Defaults to
|
||||
/// ".globl".
|
||||
const char *GlobalDirective;
|
||||
|
||||
/// True if the expression
|
||||
@ -264,6 +265,9 @@ protected:
|
||||
/// to false.
|
||||
bool HasNoDeadStrip;
|
||||
|
||||
/// Used to declare a global as being a weak symbol. Defaults to ".weak".
|
||||
const char *WeakDirective;
|
||||
|
||||
/// This directive, if non-null, is used to declare a global as being a weak
|
||||
/// undefined symbol. Defaults to NULL.
|
||||
const char *WeakRefDirective;
|
||||
@ -452,6 +456,7 @@ public:
|
||||
bool hasSingleParameterDotFile() const { return HasSingleParameterDotFile; }
|
||||
bool hasIdentDirective() const { return HasIdentDirective; }
|
||||
bool hasNoDeadStrip() const { return HasNoDeadStrip; }
|
||||
const char *getWeakDirective() const { return WeakDirective; }
|
||||
const char *getWeakRefDirective() const { return WeakRefDirective; }
|
||||
bool hasWeakDefDirective() const { return HasWeakDefDirective; }
|
||||
bool hasWeakDefCanBeHiddenDirective() const {
|
||||
|
@ -71,6 +71,7 @@ MCAsmInfo::MCAsmInfo() {
|
||||
HasSingleParameterDotFile = true;
|
||||
HasIdentDirective = false;
|
||||
HasNoDeadStrip = false;
|
||||
WeakDirective = "\t.weak\t";
|
||||
WeakRefDirective = nullptr;
|
||||
HasWeakDefDirective = false;
|
||||
HasWeakDefCanBeHiddenDirective = false;
|
||||
|
@ -443,7 +443,7 @@ bool MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
||||
break;
|
||||
case MCSA_Protected: OS << "\t.protected\t"; break;
|
||||
case MCSA_Reference: OS << "\t.reference\t"; break;
|
||||
case MCSA_Weak: OS << "\t.weak\t"; break;
|
||||
case MCSA_Weak: OS << MAI->getWeakDirective(); break;
|
||||
case MCSA_WeakDefinition:
|
||||
OS << "\t.weak_definition\t";
|
||||
break;
|
||||
|
@ -50,5 +50,6 @@ NVPTXMCAsmInfo::NVPTXMCAsmInfo(StringRef TT) {
|
||||
AscizDirective = " .b8";
|
||||
|
||||
// @TODO: Can we just disable this?
|
||||
WeakDirective = "\t// .weak\t";
|
||||
GlobalDirective = "\t// .globl\t";
|
||||
}
|
||||
|
@ -1,11 +1,17 @@
|
||||
; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
|
||||
|
||||
|
||||
; CHECK: // .weak foo
|
||||
; CHECK: .weak .func foo
|
||||
define weak void @foo() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: // .weak baz
|
||||
; CHECK: .weak .func baz
|
||||
define weak_odr void @baz() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: .visible .func bar
|
||||
define void @bar() {
|
||||
ret void
|
||||
|
Loading…
Reference in New Issue
Block a user