aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2006-12-18 03:37:18 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2006-12-18 03:37:18 +0000
commit15404d060ba8b604c03b9223a0f2e2abcd0fdded (patch)
treef32c7d28ca440bf6dd82c7df0ab6a653914246e1
parent0be3ed886c9c22f48f16694268e01cc9ab8d6f0f (diff)
move ExtWeakSymbols to AsmPrinter
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32648 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/AsmPrinter.h5
-rw-r--r--lib/CodeGen/AsmPrinter.cpp12
-rw-r--r--lib/Target/ARM/ARMAsmPrinter.cpp11
-rw-r--r--lib/Target/PowerPC/PPCAsmPrinter.cpp18
-rwxr-xr-xlib/Target/X86/X86ATTAsmPrinter.cpp2
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp11
-rwxr-xr-xlib/Target/X86/X86AsmPrinter.h3
7 files changed, 23 insertions, 39 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index 59d5b153ea..2f54d6de74 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -18,6 +18,7 @@
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/Support/DataTypes.h"
+#include <set>
namespace llvm {
class Constant;
@@ -39,6 +40,10 @@ namespace llvm {
///
unsigned FunctionNumber;
+ protected:
+ // Necessary for external weak linkage support
+ std::set<const GlobalValue*> ExtWeakSymbols;
+
public:
/// Output stream on which we're printing assembly code.
///
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index 8757d303ec..833ed28f08 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -106,6 +106,18 @@ bool AsmPrinter::doInitialization(Module &M) {
}
bool AsmPrinter::doFinalization(Module &M) {
+ if (TAI->getWeakRefDirective()) {
+ if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
+ SwitchToDataSection("");
+
+ for (std::set<const GlobalValue*>::iterator i = ExtWeakSymbols.begin(),
+ e = ExtWeakSymbols.end(); i != e; ++i) {
+ const GlobalValue *GV = *i;
+ std::string Name = Mang->getValueName(GV);
+ O << TAI->getWeakRefDirective() << Name << "\n";
+ }
+ }
+
delete Mang; Mang = 0;
return false;
}
diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp
index c30c593084..291073e04c 100644
--- a/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -62,8 +62,6 @@ namespace {
: AsmPrinter(O, TM, T) {
}
- std::set<std::string> ExtWeakSymbols;
-
/// We name each basic block in a Function with a unique number, so
/// that we can consistently refer to them later. This is cleared
/// at the beginning of each call to runOnMachineFunction().
@@ -246,7 +244,7 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
std::string Name = Mang->getValueName(GV);
O << Name;
if (GV->hasExternalWeakLinkage()) {
- ExtWeakSymbols.insert(Name);
+ ExtWeakSymbols.insert(GV);
}
}
break;
@@ -337,13 +335,6 @@ bool ARMAsmPrinter::doFinalization(Module &M) {
}
}
- if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
- SwitchToDataSection("");
- for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
- e = ExtWeakSymbols.end(); i != e; ++i) {
- O << TAI->getWeakRefDirective() << *i << "\n";
- }
-
AsmPrinter::doFinalization(M);
return false; // success
}
diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 0659f03365..1ffd65265f 100644
--- a/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -50,9 +50,6 @@ namespace {
struct VISIBILITY_HIDDEN PPCAsmPrinter : public AsmPrinter {
std::set<std::string> FnStubs, GVStubs;
const PPCSubtarget &Subtarget;
-
- // Necessary for external weak linkage support
- std::set<std::string> ExtWeakSymbols;
PPCAsmPrinter(std::ostream &O, TargetMachine &TM, const TargetAsmInfo *T)
: AsmPrinter(O, TM, T), Subtarget(TM.getSubtarget<PPCSubtarget>()) {
@@ -162,7 +159,7 @@ namespace {
FnStubs.insert(Name);
O << "L" << Name << "$stub";
if (GV->hasExternalWeakLinkage())
- ExtWeakSymbols.insert(Name);
+ ExtWeakSymbols.insert(GV);
return;
}
}
@@ -337,7 +334,7 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {
O << Name;
if (GV->hasExternalWeakLinkage())
- ExtWeakSymbols.insert(Name);
+ ExtWeakSymbols.insert(GV);
return;
}
@@ -658,22 +655,13 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
// reference!
if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
if (GV->hasExternalWeakLinkage())
- ExtWeakSymbols.insert(Mang->getValueName(GV));
+ ExtWeakSymbols.insert(GV);
EmitGlobalConstant(C);
O << '\n';
}
}
- if (TAI->getWeakRefDirective()) {
- if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
- SwitchToDataSection("");
- for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
- e = ExtWeakSymbols.end(); i != e; ++i) {
- O << TAI->getWeakRefDirective() << *i << "\n";
- }
- }
-
bool isPPC64 = TD->getPointerSizeInBits() == 64;
// Output stubs for dynamically-linked functions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp
index 62f24db4e8..f9645b80d2 100755
--- a/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -257,7 +257,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
}
if (GV->hasExternalWeakLinkage())
- ExtWeakSymbols.insert(Name);
+ ExtWeakSymbols.insert(GV);
int Offset = MO.getOffset();
if (Offset > 0)
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp
index 021e55c5c5..578e1aa978 100644
--- a/lib/Target/X86/X86AsmPrinter.cpp
+++ b/lib/Target/X86/X86AsmPrinter.cpp
@@ -250,7 +250,7 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
// reference!
if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
if (GV->hasExternalWeakLinkage())
- ExtWeakSymbols.insert(Mang->getValueName(GV));
+ ExtWeakSymbols.insert(GV);
EmitGlobalConstant(C);
O << '\n';
@@ -278,15 +278,6 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
O << "\t.ascii \" -export:" << *i << "\"\n";
}
- if (TAI->getWeakRefDirective()) {
- if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
- SwitchToDataSection("");
- for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
- e = ExtWeakSymbols.end(); i != e; ++i) {
- O << TAI->getWeakRefDirective() << *i << "\n";
- }
- }
-
if (Subtarget->isTargetDarwin()) {
SwitchToDataSection("");
diff --git a/lib/Target/X86/X86AsmPrinter.h b/lib/Target/X86/X86AsmPrinter.h
index b9b643b701..af182fab25 100755
--- a/lib/Target/X86/X86AsmPrinter.h
+++ b/lib/Target/X86/X86AsmPrinter.h
@@ -86,9 +86,6 @@ struct VISIBILITY_HIDDEN X86SharedAsmPrinter : public AsmPrinter {
// Necessary for dllexport support
std::set<std::string> DLLExportedFns, DLLExportedGVs;
- // Necessary for external weak linkage support
- std::set<std::string> ExtWeakSymbols;
-
inline static bool isScale(const MachineOperand &MO) {
return MO.isImmediate() &&
(MO.getImmedValue() == 1 || MO.getImmedValue() == 2 ||