[llvm-commits] [llvm] r54540 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter.cpp lib/Target/ARM/ARMAsmPrinter.cpp lib/Target/Alpha/AlphaAsmPrinter.cpp lib/Target/IA64/IA64AsmPrinter.cpp lib/Target/Mips/MipsAsmPrinter.cpp lib/Target/PowerPC/PPCAsmPrinter.cpp lib/Target/Sparc/SparcAsmPrinter.cpp lib/Target/X86/X86ATTAsmPrinter.cpp
Anton Korobeynikov
asl at math.spbu.ru
Fri Aug 8 11:25:07 PDT 2008
Author: asl
Date: Fri Aug 8 13:25:07 2008
New Revision: 54540
URL: http://llvm.org/viewvc/llvm-project?rev=54540&view=rev
Log:
Handle visibility printing with all generality. Remove bunch of duplicate code.
Modified:
llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
llvm/trunk/lib/CodeGen/AsmPrinter.cpp
llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp
llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp
llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp
llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp
llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Fri Aug 8 13:25:07 2008
@@ -355,6 +355,10 @@
const char *Prefix = 0);
void printSuffixedName(const std::string &Name, const char* Suffix);
+ /// printVisibility - This prints visibility information about symbol, if
+ /// this is suported by the target.
+ void printVisibility(const std::string& Name, unsigned Visibility) const;
+
private:
void EmitLLVMUsedList(Constant *List);
void EmitXXStructorList(Constant *List);
Modified: llvm/trunk/lib/CodeGen/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -1469,3 +1469,14 @@
void AsmPrinter::printSuffixedName(const std::string &Name, const char* Suffix) {
printSuffixedName(Name.c_str(), Suffix);
}
+
+void AsmPrinter::printVisibility(const std::string& Name,
+ unsigned Visibility) const {
+ if (Visibility == GlobalValue::HiddenVisibility) {
+ if (const char *Directive = TAI->getHiddenDirective())
+ O << Directive << Name << '\n';
+ } else if (Visibility == GlobalValue::ProtectedVisibility) {
+ if (const char *Directive = TAI->getProtectedDirective())
+ O << Directive << Name << '\n';
+ }
+}
Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -226,14 +226,7 @@
break;
}
- const char *VisibilityDirective = NULL;
- if (F->hasHiddenVisibility())
- VisibilityDirective = TAI->getHiddenDirective();
- else if (F->hasProtectedVisibility())
- VisibilityDirective = TAI->getProtectedDirective();
-
- if (VisibilityDirective)
- O << VisibilityDirective << CurrentFnName << "\n";
+ printVisibility(CurrentFnName, F->getVisibility());
if (AFI->isThumbFunction()) {
EmitAlignment(1, F, AFI->getAlign());
@@ -870,14 +863,7 @@
unsigned Size = TD->getABITypeSize(Type);
unsigned Align = TD->getPreferredAlignmentLog(GVar);
- const char *VisibilityDirective = NULL;
- if (GVar->hasHiddenVisibility())
- VisibilityDirective = TAI->getHiddenDirective();
- else if (GVar->hasProtectedVisibility())
- VisibilityDirective = TAI->getProtectedDirective();
-
- if (VisibilityDirective)
- O << VisibilityDirective << name << "\n";
+ printVisibility(name, GVar->getVisibility());
if (Subtarget->isTargetELF())
O << "\t.type " << name << ",%object\n";
Modified: llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/Alpha/AlphaAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -164,6 +164,8 @@
break;
}
+ printVisibility(CurrentFnName, F->getVisibility());
+
O << "\t.ent " << CurrentFnName << "\n";
O << CurrentFnName << ":\n";
@@ -221,8 +223,7 @@
SwitchToDataSection(SectionName.c_str());
// 1: Check visibility
- if (GVar->hasHiddenVisibility())
- O << TAI->getHiddenDirective() << name << "\n";
+ printVisibility(name, GVar->getVisibility());
// 2: Kind
switch (GVar->getLinkage()) {
Modified: llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/IA64/IA64AsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -142,6 +142,9 @@
// Print out labels for the function.
EmitAlignment(5);
O << "\t.global\t" << CurrentFnName << '\n';
+
+ printVisibility(CurrentFnName, F->getVisibility());
+
O << "\t.type\t" << CurrentFnName << ", @function\n";
O << CurrentFnName << ":\n";
@@ -274,7 +277,7 @@
unsigned Size = TD->getABITypeSize(C->getType());
unsigned Align = TD->getPreferredAlignmentLog(GVar);
- // FIXME: ELF supports visibility
+ printVisibility(name, GVar->getVisibility());
SwitchToDataSection(SectionName.c_str());
Modified: llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -237,6 +237,8 @@
O << "\t.globl\t" << CurrentFnName << '\n';
O << "\t.ent\t" << CurrentFnName << '\n';
+ printVisibility(CurrentFnName, F->getVisibility());
+
if ((TAI->hasDotTypeDotSizeDirective()) && Subtarget->isLinux())
O << "\t.type\t" << CurrentFnName << ", @function\n";
@@ -497,7 +499,7 @@
} else
Align = TD->getPreferredTypeAlignmentShift(CTy);
- // FIXME: ELF supports visibility
+ printVisibility(name, GVar->getVisibility());
SwitchToDataSection(SectionName.c_str());
@@ -508,7 +510,7 @@
if (GVar->hasInternalLinkage())
O << "\t.local\t" << name << '\n';
-
+
O << TAI->getCOMMDirective() << name << ',' << Size;
if (TAI->getCOMMDirectiveTakesAlignment())
O << ',' << (1 << Align);
Modified: llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -593,9 +593,7 @@
break;
}
- if (F->hasHiddenVisibility())
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << CurrentFnName << '\n';
+ printVisibility(CurrentFnName, F->getVisibility());
EmitAlignment(2, F);
O << CurrentFnName << ":\n";
@@ -671,9 +669,7 @@
std::string name = Mang->getValueName(GVar);
std::string SectionName = TAI->SectionForGlobal(GVar);
- if (GVar->hasHiddenVisibility())
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << name << '\n';
+ printVisibility(name, GVar->getVisibility());
Constant *C = GVar->getInitializer();
const Type *Type = C->getType();
@@ -792,9 +788,7 @@
break;
}
- if (F->hasHiddenVisibility())
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << CurrentFnName << '\n';
+ printVisibility(CurrentFnName, F->getVisibility());
EmitAlignment(OptimizeForSize ? 2 : 4, F);
O << CurrentFnName << ":\n";
@@ -909,9 +903,7 @@
std::string name = Mang->getValueName(GVar);
std::string SectionName = TAI->SectionForGlobal(GVar);
- if (GVar->hasHiddenVisibility())
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << name << '\n';
+ printVisibility(name, GVar->getVisibility());
Constant *C = GVar->getInitializer();
const Type *Type = C->getType();
Modified: llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -107,6 +107,9 @@
SwitchToTextSection(getSectionForFunction(*F).c_str(), F);
EmitAlignment(4, F);
O << "\t.globl\t" << CurrentFnName << '\n';
+
+ printVisibility(CurrentFnName, F->getVisibility());
+
O << "\t.type\t" << CurrentFnName << ", #function\n";
O << CurrentFnName << ":\n";
@@ -250,7 +253,8 @@
unsigned Size = TD->getABITypeSize(C->getType());
unsigned Align = TD->getPreferredAlignment(GVar);
- // FIXME: ELF supports visibility
+ printVisibility(name, GVar->getVisibility());
+
SwitchToDataSection(SectionName.c_str());
if (C->isNullValue() && !GVar->hasSection()) {
Modified: llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp?rev=54540&r1=54539&r2=54540&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp Fri Aug 8 13:25:07 2008
@@ -183,13 +183,8 @@
}
break;
}
- if (F->hasHiddenVisibility()) {
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << CurrentFnName << '\n';
- } else if (F->hasProtectedVisibility()) {
- if (const char *Directive = TAI->getProtectedDirective())
- O << Directive << CurrentFnName << '\n';
- }
+
+ printVisibility(CurrentFnName, F->getVisibility());
if (Subtarget->isTargetELF())
O << "\t.type\t" << CurrentFnName << ", at function\n";
@@ -773,13 +768,7 @@
unsigned Size = TD->getABITypeSize(Type);
unsigned Align = TD->getPreferredAlignmentLog(GVar);
- if (GVar->hasHiddenVisibility()) {
- if (const char *Directive = TAI->getHiddenDirective())
- O << Directive << name << '\n';
- } else if (GVar->hasProtectedVisibility()) {
- if (const char *Directive = TAI->getProtectedDirective())
- O << Directive << name << '\n';
- }
+ printVisibility(name, GVar->getVisibility());
if (Subtarget->isTargetELF())
O << "\t.type\t" << name << ", at object\n";
More information about the llvm-commits
mailing list