Changes in directory llvm/lib/Target/X86:
X86ATTAsmPrinter.cpp updated: 1.102 -> 1.103 --- Log message: Fix PR1339: http://llvm.org/PR1339 and CodeGen/X86/dollar-name.ll --- 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