aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-06-24 18:52:01 +0000
committerChris Lattner <sabre@nondot.org>2009-06-24 18:52:01 +0000
commit0a7befa8bd56621f51eaf9196417b866962bf7b1 (patch)
tree5808b5fa5af5308c7c5fd91e4fbf134836ff36e4 /lib/CodeGen
parent52cff8352622c38a1ab95daffca92a45f81ef02a (diff)
downloadexternal_llvm-0a7befa8bd56621f51eaf9196417b866962bf7b1.zip
external_llvm-0a7befa8bd56621f51eaf9196417b866962bf7b1.tar.gz
external_llvm-0a7befa8bd56621f51eaf9196417b866962bf7b1.tar.bz2
eliminate the ExtWeakSymbols set from AsmPrinter. This eliminates
a bunch of code from all the targets, and eliminates nondeterministic ordering of directives being emitted in the output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74096 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index e931904..2b1b48f 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -192,13 +192,26 @@ bool AsmPrinter::doInitialization(Module &M) {
}
bool AsmPrinter::doFinalization(Module &M) {
+ // If the target wants to know about weak references, print them all.
if (TAI->getWeakRefDirective()) {
- if (!ExtWeakSymbols.empty())
- SwitchToDataSection("");
-
- for (std::set<const GlobalValue*>::iterator i = ExtWeakSymbols.begin(),
- e = ExtWeakSymbols.end(); i != e; ++i)
- O << TAI->getWeakRefDirective() << Mang->getValueName(*i) << '\n';
+ // FIXME: This is not lazy, it would be nice to only print weak references
+ // to stuff that is actually used. Note that doing so would require targets
+ // to notice uses in operands (due to constant exprs etc). This should
+ // happen with the MC stuff eventually.
+ SwitchToDataSection("");
+
+ // Print out module-level global variables here.
+ for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+ I != E; ++I) {
+ if (I->hasExternalWeakLinkage())
+ O << TAI->getWeakRefDirective() << Mang->getValueName(I) << '\n';
+ }
+
+ for (Module::const_iterator I = M.begin(), E = M.end();
+ I != E; ++I) {
+ if (I->hasExternalWeakLinkage())
+ O << TAI->getWeakRefDirective() << Mang->getValueName(I) << '\n';
+ }
}
if (TAI->getSetDirective()) {
@@ -207,7 +220,7 @@ bool AsmPrinter::doFinalization(Module &M) {
O << '\n';
for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
- I!=E; ++I) {
+ I != E; ++I) {
std::string Name = Mang->getValueName(I);
std::string Target;
@@ -235,7 +248,7 @@ bool AsmPrinter::doFinalization(Module &M) {
// If we don't have any trampolines, then we don't require stack memory
// to be executable. Some targets have a directive to declare this.
- Function* InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline");
+ Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline");
if (!InitTrampolineIntrinsic || InitTrampolineIntrinsic->use_empty())
if (TAI->getNonexecutableStackDirective())
O << TAI->getNonexecutableStackDirective() << '\n';