[llvm-commits] [llvm] r94284 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h include/llvm/MC/MCStreamer.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/MC/MCAsmStreamer.cpp
Chris Lattner
sabre at nondot.org
Fri Jan 22 21:19:24 PST 2010
Author: lattner
Date: Fri Jan 22 23:19:23 2010
New Revision: 94284
URL: http://llvm.org/viewvc/llvm-project?rev=94284&view=rev
Log:
mcize jump table and constant pool entry labels, .local on elf,
and some .weak directives.
Modified:
llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
llvm/trunk/include/llvm/MC/MCStreamer.h
llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/trunk/lib/MC/MCAsmStreamer.cpp
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=94284&r1=94283&r2=94284&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Fri Jan 22 23:19:23 2010
@@ -321,6 +321,12 @@
/// block label.
MCSymbol *GetMBBSymbol(unsigned MBBID) const;
+ /// GetCPISymbol - Return the symbol for the specified constant pool entry.
+ MCSymbol *GetCPISymbol(unsigned CPID) const;
+
+ /// GetJTISymbol - Return the symbol for the specified jump table entry.
+ MCSymbol *GetJTISymbol(unsigned JTID, bool isLinkerPrivate = false) const;
+
/// GetBlockAddressSymbol - Return the MCSymbol used to satisfy BlockAddress
/// uses of the specified basic block.
MCSymbol *GetBlockAddressSymbol(const BlockAddress *BA,
Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=94284&r1=94283&r2=94284&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCStreamer.h Fri Jan 22 23:19:23 2010
@@ -47,6 +47,7 @@
IndirectSymbol, /// .indirect_symbol (Apple)
Internal, /// .internal (ELF)
LazyReference, /// .lazy_reference (Apple)
+ Local, /// .local (ELF)
NoDeadStrip, /// .no_dead_strip (Apple)
PrivateExtern, /// .private_extern (Apple)
Protected, /// .protected (ELF)
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=94284&r1=94283&r2=94284&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Jan 22 23:19:23 2010
@@ -115,9 +115,9 @@
EmitStartOfAsmFile(M);
if (MAI->hasSingleParameterDotFile()) {
- /* Very minimal debug info. It is ignored if we emit actual
- debug info. If we don't, this at least helps the user find where
- a function came from. */
+ // Very minimal debug info. It is ignored if we emit actual
+ // debug info. If we don't, this at least helps the user find where
+ // a function came from.
O << "\t.file\t\"" << M.getModuleIdentifier() << "\"\n";
}
@@ -197,13 +197,12 @@
if (const char *LComm = MAI->getLCOMMDirective()) {
// .lcomm _foo, 42
- O << LComm << *GVSym << ',' << Size;
- O << '\n';
+ O << LComm << *GVSym << ',' << Size << '\n';
return;
}
// .local _foo
- O << "\t.local\t" << *GVSym << '\n';
+ OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Local);
// .comm _foo, 42, 4
OutStreamer.EmitCommonSymbol(GVSym, Size, 1 << AlignLog);
return;
@@ -302,12 +301,14 @@
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
I != E; ++I) {
if (!I->hasExternalWeakLinkage()) continue;
- O << MAI->getWeakRefDirective() << *GetGlobalValueSymbol(I) << '\n';
+ OutStreamer.EmitSymbolAttribute(GetGlobalValueSymbol(I),
+ MCStreamer::WeakReference);
}
for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (!I->hasExternalWeakLinkage()) continue;
- O << MAI->getWeakRefDirective() << *GetGlobalValueSymbol(I) << '\n';
+ OutStreamer.EmitSymbolAttribute(GetGlobalValueSymbol(I),
+ MCStreamer::WeakReference);
}
}
@@ -321,9 +322,9 @@
MCSymbol *Target = GetGlobalValueSymbol(GV);
if (I->hasExternalLinkage() || !MAI->getWeakRefDirective())
- O << "\t.globl\t" << *Name << '\n';
+ OutStreamer.EmitSymbolAttribute(Name, MCStreamer::Global);
else if (I->hasWeakLinkage())
- O << MAI->getWeakRefDirective() << *Name << '\n';
+ OutStreamer.EmitSymbolAttribute(Name, MCStreamer::WeakReference);
else
assert(I->hasLocalLinkage() && "Invalid alias linkage");
@@ -343,6 +344,8 @@
// to be executable. Some targets have a directive to declare this.
Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline");
if (!InitTrampolineIntrinsic || InitTrampolineIntrinsic->use_empty())
+ // FIXME: This is actually a section switch on linux/x86 and systemz, use
+ // switch section.
if (MAI->getNonexecutableStackDirective())
O << MAI->getNonexecutableStackDirective() << '\n';
@@ -449,14 +452,15 @@
const Type *Ty = CPE.getType();
Offset = NewOffset + TM.getTargetData()->getTypeAllocSize(Ty);
- O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_'
- << CPI << ':';
+ // Emit the label with a comment on it.
if (VerboseAsm) {
- O.PadToColumn(MAI->getCommentColumn());
- O << MAI->getCommentString() << " constant ";
- WriteTypeSymbolic(O, CPE.getType(), MF->getFunction()->getParent());
+ OutStreamer.GetCommentOS() << "constant pool ";
+ WriteTypeSymbolic(OutStreamer.GetCommentOS(), CPE.getType(),
+ MF->getFunction()->getParent());
+ OutStreamer.GetCommentOS() << '\n';
}
- O << '\n';
+ OutStreamer.EmitLabel(GetCPISymbol(CPI));
+
if (CPE.isMachineConstantPoolEntry())
EmitMachineConstantPoolValue(CPE.Val.MachineCPVal);
else
@@ -518,14 +522,11 @@
// before each jump table. The first label is never referenced, but tells
// the assembler and linker the extents of the jump table object. The
// second label is actually referenced by the code.
- if (JTInDiffSection && MAI->getLinkerPrivateGlobalPrefix()[0]) {
- O << MAI->getLinkerPrivateGlobalPrefix()
- << "JTI" << getFunctionNumber() << '_' << i << ":\n";
- }
-
- O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
- << '_' << i << ":\n";
-
+ if (JTInDiffSection && MAI->getLinkerPrivateGlobalPrefix()[0])
+ OutStreamer.EmitLabel(GetJTISymbol(i, true));
+
+ OutStreamer.EmitLabel(GetJTISymbol(i));
+
for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) {
printPICJumpTableEntry(MJTI, JTBBs[ii], i);
O << '\n';
@@ -564,8 +565,7 @@
// If the arch uses custom Jump Table directives, don't calc relative to
// JT
if (!HadJTEntryDirective)
- O << '-' << MAI->getPrivateGlobalPrefix() << "JTI"
- << getFunctionNumber() << '_' << uid;
+ O << '-' << *GetJTISymbol(uid);
}
}
@@ -1445,7 +1445,24 @@
SmallString<60> Name;
raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "BB"
<< getFunctionNumber() << '_' << MBBID;
-
+ return OutContext.GetOrCreateSymbol(Name.str());
+}
+
+/// GetCPISymbol - Return the symbol for the specified constant pool entry.
+MCSymbol *AsmPrinter::GetCPISymbol(unsigned CPID) const {
+ SmallString<60> Name;
+ raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "CPI"
+ << getFunctionNumber() << '_' << CPID;
+ return OutContext.GetOrCreateSymbol(Name.str());
+}
+
+/// GetJTISymbol - Return the symbol for the specified jump table entry.
+MCSymbol *AsmPrinter::GetJTISymbol(unsigned JTID, bool isLinkerPrivate) const {
+ const char *Prefix = isLinkerPrivate ? MAI->getLinkerPrivateGlobalPrefix() :
+ MAI->getPrivateGlobalPrefix();
+ SmallString<60> Name;
+ raw_svector_ostream(Name) << Prefix << "JTI" << getFunctionNumber() << '_'
+ << JTID;
return OutContext.GetOrCreateSymbol(Name.str());
}
@@ -1597,8 +1614,7 @@
O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ','
<< *GetMBBSymbol(MBB->getNumber())
- << '-' << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
- << '_' << uid << '\n';
+ << '-' << *GetJTISymbol(uid) << '\n';
}
void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, unsigned uid2,
Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=94284&r1=94283&r2=94284&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Fri Jan 22 23:19:23 2010
@@ -224,13 +224,14 @@
case IndirectSymbol: OS << ".indirect_symbol "; break;
case Internal: OS << ".internal "; break;
case LazyReference: OS << ".lazy_reference "; break;
+ case Local: OS << ".local "; break;
case NoDeadStrip: OS << ".no_dead_strip "; break;
case PrivateExtern: OS << ".private_extern "; break;
case Protected: OS << ".protected "; break;
case Reference: OS << ".reference "; break;
case Weak: OS << ".weak "; break;
case WeakDefinition: OS << ".weak_definition "; break;
- case WeakReference: OS << ".weak_reference "; break;
+ case WeakReference: OS << MAI.getWeakRefDirective(); break;// .weak_reference
}
OS << *Symbol;
More information about the llvm-commits
mailing list