> Fix PR1339: http://llvm.org/PR1339 and CodeGen/X86/dollar-name.ll
Nice, thanks Dan! -Chris > > --- > Diffs of the changes: (+32 -3) > > X86ATTAsmPrinter.cpp | 35 ++++++++++++++++++++++++++++++++--- > 1 files changed, 32 insertions(+), 3 deletions(-) > > > Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp > diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 llvm/lib/ > Target/X86/X86ATTAsmPrinter.cpp:1.103 > --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.102 Sun Apr 22 > 17:50:52 2007 > +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Thu Apr 26 16:07:05 2007 > @@ -272,16 +272,24 @@ > case MachineOperand::MO_GlobalAddress: { > bool isCallOp = Modifier && !strcmp(Modifier, "call"); > bool isMemOp = Modifier && !strcmp(Modifier, "mem"); > + bool needCloseParen = false; > > GlobalValue *GV = MO.getGlobal(); > GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV); > bool isThreadLocal = GVar && GVar->isThreadLocal(); > > - if (!isMemOp && !isCallOp) O << '$'; > - > std::string Name = Mang->getValueName(GV); > X86SharedAsmPrinter::decorateName(Name, GV); > > + if (!isMemOp && !isCallOp) > + O << '$'; > + else 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 << '('; > + needCloseParen = true; > + } > + > if (printStub(TM, Subtarget)) { > // Link-once, External, or Weakly-linked global variables need > // non-lazily-resolved stubs > @@ -352,6 +360,12 @@ > GV->hasLinkOnceLinkage()) && > TM.getRelocationModel() != Reloc::Static) > O << "@GOTPCREL"; > + > + if (needCloseParen) { > + needCloseParen = false; > + O << ')'; > + } > + > // Use rip when possible to reduce code size, except when > // index or base register are also part of the address. e.g. > // foo(%rip)(%rcx,%rax,4) is not legal > @@ -359,10 +373,14 @@ > } > } > > + if (needCloseParen) > + O << ')'; > + > return; > } > case MachineOperand::MO_ExternalSymbol: { > bool isCallOp = Modifier && !strcmp(Modifier, "call"); > + bool needCloseParen = false; > std::string Name(TAI->getGlobalPrefix()); > Name += MO.getSymbolName(); > if (isCallOp && printStub(TM, Subtarget)) { > @@ -370,7 +388,15 @@ > O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; > return; > } > - if (!isCallOp) O << '$'; > + if (!isCallOp) > + O << '$'; > + else 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 << '('; > + needCloseParen = true; > + } > + > O << Name; > > if (printGOT(TM, Subtarget)) { > @@ -391,6 +417,9 @@ > O << "@PLT"; > } > > + if (needCloseParen) > + O << ')'; > + > if (!isCallOp && Subtarget->isPICStyleRIPRel()) > O << "(%rip)"; > > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits