make pcrel and non-pcrel global printing more similar.
authorChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 21:57:21 +0000 (21:57 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 21:57:21 +0000 (21:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75298 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp

index a43776353c3a14e15edcb59e45515b6915d53671..419ea6e25a2d4f6bbc65834111286306f0d54ff7 100644 (file)
@@ -107,6 +107,10 @@ void X86ATTAsmPrinter::decorateName(std::string &Name,
   const Function *F = dyn_cast<Function>(GV);
   if (!F) return;
 
+  // Save function name for later type emission.
+  if (Subtarget->isTargetCygMing() && F->isDeclaration())
+    CygMingStubs.insert(Name);
+  
   // We don't want to decorate non-stdcall or non-fastcall functions right now
   unsigned CC = F->getCallingConv();
   if (CC != CallingConv::X86_StdCall && CC != CallingConv::X86_FastCall)
@@ -319,18 +323,15 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo) {
       O << Name;
     }
     
+    if (needCloseParen)
+      O << ')';
+
     // Assemble call via PLT for externally visible symbols.
     if (MO.getTargetFlags() == X86II::MO_PLT)
       O << "@PLT";
     
-    if (Subtarget->isTargetCygMing() && GV->isDeclaration())
-      // Save function name for later type emission
-      CygMingStubs.insert(Name);
-    
     printOffset(MO.getOffset());
     
-    if (needCloseParen)
-      O << ')';
     return;
   }
       
@@ -413,14 +414,15 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
   }
   case MachineOperand::MO_GlobalAddress: {
     bool isMemOp = Modifier && !strcmp(Modifier, "mem");
+    if (!isMemOp)
+      O << '$';
+    
     const GlobalValue *GV = MO.getGlobal();
     std::string Name = Mang->getValueName(GV);
     decorateName(Name, GV);
 
     bool needCloseParen = false;
-    if (!isMemOp)
-      O << '$';
-    else if (Name[0] == '$') {
+    if (Name[0] == '$') {
       // The name begins with a dollar-sign. In order to avoid having it look
       // like an integer immediate to the assembler, enclose it in parens.
       O << '(';
@@ -438,6 +440,9 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
                MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE){
       HiddenGVStubs.insert(Name);
       printSuffixedName(Name, "$non_lazy_ptr");
+    } else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
+      FnStubs.insert(Name);
+      printSuffixedName(Name, "$stub");
     } else {
       O << Name;
     }
@@ -445,6 +450,10 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
     if (needCloseParen)
       O << ')';
     
+    // Assemble call via PLT for externally visible symbols.
+    if (MO.getTargetFlags() == X86II::MO_PLT)
+      O << "@PLT";
+    
     printOffset(MO.getOffset());
     break;
   }
@@ -596,8 +605,7 @@ void X86ATTAsmPrinter::printPICLabel(const MachineInstr *MI, unsigned Op) {
 
 void X86ATTAsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
                                               const MachineBasicBlock *MBB,
-                                              unsigned uid) const
-{
+                                              unsigned uid) const {
   const char *JTEntryDirective = MJTI->getEntrySize() == 4 ?
     TAI->getData32bitsDirective() : TAI->getData64bitsDirective();