get the PPC stub temporary label from the mangler instead of
authorChris Lattner <sabre@nondot.org>
Wed, 15 Jul 2009 02:56:53 +0000 (02:56 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 15 Jul 2009 02:56:53 +0000 (02:56 +0000)
using horrible string hacking.  This gives us a different label,
but it's just an assembler temporary, so the name doesn't matter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75733 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
test/CodeGen/PowerPC/available-externally.ll

index 09c58a29c2f0caf8b5d48c096eca1bd4e4d31f97..7489e49ca580c87b3b2d29829176a3bac5c0f45f 100644 (file)
@@ -989,41 +989,17 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) {
          I != E; ++I) {
       EmitAlignment(4);
       const FnStubInfo &Info = I->second;
-      const char *p = I->getKeyData();
-      
-      bool hasQuote = p[0]=='\"';
       O << Info.Stub << ":\n";
       O << "\t.indirect_symbol " << I->getKeyData() << '\n';
       O << "\tmflr r0\n";
-      O << "\tbcl 20,31,";
-      if (hasQuote)
-        O << "\"L0$" << &p[1];
-      else
-        O << "L0$" << p;
-      O << '\n';
-      if (hasQuote)
-        O << "\"L0$" << &p[1];
-      else
-        O << "L0$" << p;
-      O << ":\n";
+      O << "\tbcl 20,31," << Info.AnonSymbol << '\n';
+      O << Info.AnonSymbol << ":\n";
       O << "\tmflr r11\n";
-      O << "\taddis r11,r11,ha16(" << Info.LazyPtr << "-";
-      if (hasQuote)
-        O << "\"L0$" << &p[1];
-      else
-        O << "L0$" << p;
+      O << "\taddis r11,r11,ha16(" << Info.LazyPtr << "-" << Info.AnonSymbol;
       O << ")\n";
       O << "\tmtlr r0\n";
-      if (isPPC64)
-        O << "\tldu r12,lo16(";
-      else
-        O << "\tlwzu r12,lo16(";
-      O << Info.LazyPtr << "-";
-      if (hasQuote)
-        O << "\"L0$" << &p[1];
-      else
-        O << "L0$" << p;
-      O << ")(r11)\n";
+      O << (isPPC64 ? "\tldu" : "\tlwzu") << " r12,lo16(";
+      O << Info.LazyPtr << "-" << Info.AnonSymbol << ")(r11)\n";
       O << "\tmtctr r12\n";
       O << "\tbctr\n";
       SwitchToDataSection(".lazy_symbol_pointer");
index 111a15ffd88f0149254c31e79f59572243e6acb9..e78d6a070d8a0fc3f8afea9aff2726946a2777c2 100644 (file)
@@ -34,13 +34,13 @@ entry:
 ; PIC: L_exact_log2$stub:
 ; PIC: .indirect_symbol _exact_log2
 ; PIC: mflr r0
-; PIC: bcl 20,31,L0$_exact_log2
+; PIC: bcl 20,31,L_exact_log2$stub$tmp
 
-; PIC: L0$_exact_log2:
+; PIC: L_exact_log2$stub$tmp:
 ; PIC: mflr r11
-; PIC: addis r11,r11,ha16(L_exact_log2$lazy_ptr-L0$_exact_log2)
+; PIC: addis r11,r11,ha16(L_exact_log2$lazy_ptr-L_exact_log2$stub$tmp)
 ; PIC: mtlr r0
-; PIC: lwzu r12,lo16(L_exact_log2$lazy_ptr-L0$_exact_log2)(r11)
+; PIC: lwzu r12,lo16(L_exact_log2$lazy_ptr-L_exact_log2$stub$tmp)(r11)
 ; PIC: mtctr r12
 ; PIC: bctr