[llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp

Anton Korobeynikov asl at math.spbu.ru
Wed Apr 25 07:28:00 PDT 2007



Changes in directory llvm/lib/CodeGen:

AsmPrinter.cpp updated: 1.156 -> 1.157
---
Log message:

Implement aliases. This fixes PR1017: http://llvm.org/PR1017  and it's dependent bugs. CFE part 
will follow.


---
Diffs of the changes:  (+25 -1)

 AsmPrinter.cpp |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/AsmPrinter.cpp
diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.156 llvm/lib/CodeGen/AsmPrinter.cpp:1.157
--- llvm/lib/CodeGen/AsmPrinter.cpp:1.156	Mon Apr 23 18:33:31 2007
+++ llvm/lib/CodeGen/AsmPrinter.cpp	Wed Apr 25 09:27:10 2007
@@ -111,7 +111,7 @@
 
 bool AsmPrinter::doFinalization(Module &M) {
   if (TAI->getWeakRefDirective()) {
-    if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
+    if (!ExtWeakSymbols.empty())
       SwitchToDataSection("");
 
     for (std::set<const GlobalValue*>::iterator i = ExtWeakSymbols.begin(),
@@ -122,6 +122,30 @@
     }
   }
 
+  if (TAI->getSetDirective()) {
+    if (M.alias_size())
+      SwitchToTextSection(TAI->getTextSection());
+
+    O << "\n";
+    for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+         I!=E; ++I) {
+      const GlobalValue *Aliasee = I->getAliasee();
+      assert(Aliasee && "Aliasee cannot be null!");
+      std::string Target   = Mang->getValueName(Aliasee);
+      std::string Name     = Mang->getValueName(I);
+
+      // Aliases with external weak linkage was emitted already
+      if (I->hasExternalLinkage())
+        O << "\t.globl\t" << Name << "\n";
+      else if (I->hasWeakLinkage())
+        O << TAI->getWeakRefDirective() << Name << "\n";
+      else if (!I->hasInternalLinkage())
+        assert(0 && "Invalid alias linkage");
+      
+      O << TAI->getSetDirective() << Name << ", " << Target << "\n";
+    }
+  }
+
   delete Mang; Mang = 0;
   return false;
 }






More information about the llvm-commits mailing list