handle the _set_ symbol with an MCSymbol.
authorChris Lattner <sabre@nondot.org>
Mon, 25 Jan 2010 21:17:10 +0000 (21:17 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 25 Jan 2010 21:17:10 +0000 (21:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94449 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp

index 48cf86b53c4c355872b5645c4087f9ca8a42ae4c..fabb07731e7b8c84b6cc9952b5bc61bc32e70db3 100644 (file)
@@ -324,6 +324,10 @@ namespace llvm {
     /// GetJTISymbol - Return the symbol for the specified jump table entry.
     MCSymbol *GetJTISymbol(unsigned JTID, bool isLinkerPrivate = false) const;
 
+    /// GetJTSetSymbol - Return the symbol for the specified jump table .set
+    /// FIXME: privatize to AsmPrinter.
+    MCSymbol *GetJTSetSymbol(unsigned UID, unsigned MBBID) const;
+
     /// GetBlockAddressSymbol - Return the MCSymbol used to satisfy BlockAddress
     /// uses of the specified basic block.
     MCSymbol *GetBlockAddressSymbol(const BlockAddress *BA,
index 7a44a01656053fb617fc9b4c2bc59192f5146e79..a0048e17dbff2bfda56a68d9b30a9252b34e2566 100644 (file)
@@ -557,8 +557,7 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
   // If we're emitting non-PIC code, then emit the entries as direct
   // references to the target basic blocks.
   if (MAI->getSetDirective()) {
-    O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
-      << '_' << uid << "_set_" << MBB->getNumber();
+    O << *GetJTSetSymbol(uid, MBB->getNumber());
   } else {
     O << *GetMBBSymbol(MBB->getNumber());
     // If the arch uses custom Jump Table directives, don't calc relative to
@@ -1379,6 +1378,15 @@ MCSymbol *AsmPrinter::GetJTISymbol(unsigned JTID, bool isLinkerPrivate) const {
   return OutContext.GetOrCreateSymbol(Name.str());
 }
 
+/// GetJTSetSymbol - Return the symbol for the specified jump table .set
+/// FIXME: privatize to AsmPrinter.
+MCSymbol *AsmPrinter::GetJTSetSymbol(unsigned UID, unsigned MBBID) const {
+  SmallString<60> Name;
+  raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
+    << getFunctionNumber() << '_' << UID << "_set_" << MBBID;
+  return OutContext.GetOrCreateSymbol(Name.str());
+}
+
 /// GetGlobalValueSymbol - Return the MCSymbol for the specified global
 /// value.
 MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const {
@@ -1526,9 +1534,8 @@ void AsmPrinter::printPICJumpTableSetLabel(unsigned uid,
     return;
   
   O << MAI->getSetDirective() << ' ' << MAI->getPrivateGlobalPrefix()
-    << getFunctionNumber() << '_' << uid << "_set_" << MBB->getNumber() << ','
-    << *GetMBBSymbol(MBB->getNumber())
-    << '-' << *GetJTISymbol(uid) << '\n';
+    << *GetJTSetSymbol(uid, MBB->getNumber()) << ','
+    << *GetMBBSymbol(MBB->getNumber()) << '-' << *GetJTISymbol(uid) << '\n';
 }
 
 void AsmPrinter::printVisibility(MCSymbol *Sym, unsigned Visibility) const {
index 7fc6eba170c5e4a7d5420b8e58481a3f84ae9333..adae407385e6b5b9f0778ad7ca70eb97c0ed9388 100644 (file)
@@ -494,8 +494,7 @@ void X86AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
   O << JTEntryDirective << ' ';
 
   if (Subtarget->isPICStyleRIPRel() || Subtarget->isPICStyleStubPIC()) {
-    O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
-      << '_' << uid << "_set_" << MBB->getNumber();
+    O << *GetJTSetSymbol(uid, MBB->getNumber());
   } else if (Subtarget->isPICStyleGOT())
     O << *GetMBBSymbol(MBB->getNumber()) << "@GOTOFF";
   else  // mdynamic-no-pic