[llvm-commits] [llvm] r75610 - in /llvm/trunk: include/llvm/Support/Mangler.h lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp lib/VMCore/Mangler.cpp test/CodeGen/X86/loop-hoist.ll

Daniel Dunbar daniel at zuster.org
Tue Jul 14 09:56:54 PDT 2009


On Tue, Jul 14, 2009 at 2:08 AM, Bill Wendling<isanbard at gmail.com> wrote:
> Chris,
>
> This patch killed the build bots last night. There were too many
> dependent patches after it to back this out.

Mass reverted here:
http://llvm.org/viewvc/llvm-project?view=rev&revision=75636
http://llvm.org/viewvc/llvm-project?view=rev&revision=75637
http://llvm.org/viewvc/llvm-project?view=rev&revision=75638
http://llvm.org/viewvc/llvm-project?view=rev&revision=75639

 - Daniel

> Please look into the failure.
>
>        http://smooshlab.apple.com:8010/builders/llvm-gcc-i386-darwin9/builds/1098
>
> Thanks!
>
> -bw
>
> On Jul 13, 2009, at 11:04 PM, Chris Lattner wrote:
>
>> Author: lattner
>> Date: Tue Jul 14 01:04:35 2009
>> New Revision: 75610
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=75610&view=rev
>> Log:
>> Change the X86 asmprinter to use the mangler to apply suffixes like
>> "$non_lazy_ptr"
>> to symbols instead of doing it with "printSuffixedName".  This gets
>> us to the point
>> where there is a real separation between computing a symbol name and
>> printing it,
>> something I need for MC printer stuff.
>>
>> This patch also fixes a corner case bug where unnamed private
>> globals wouldn't get
>> the private label prefix.
>>
>> Next up, rename all uses of getValueName -> getMangledName for
>> better greppability,
>> and then tackle the ppc/arm backends to eliminate "printSuffixedName".
>>
>>
>> Modified:
>>    llvm/trunk/include/llvm/Support/Mangler.h
>>    llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
>>    llvm/trunk/lib/VMCore/Mangler.cpp
>>    llvm/trunk/test/CodeGen/X86/loop-hoist.ll
>>
>> Modified: llvm/trunk/include/llvm/Support/Mangler.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Mangler.h?rev=75610&r1=75609&r2=75610&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Support/Mangler.h (original)
>> +++ llvm/trunk/include/llvm/Support/Mangler.h Tue Jul 14 01:04:35 2009
>> @@ -82,10 +82,17 @@
>>     return (AcceptableChars[X/32] & (1 << (X&31))) != 0;
>>   }
>>
>> -  /// getValueName - Returns the mangled name of V, an LLVM Value,
>> -  /// in the current module.
>> +  /// getMangledName - Returns the mangled name of V, an LLVM Value,
>> +  /// in the current module.  If 'Suffix' is specified, the name
>> ends with the
>> +  /// specified suffix.  If 'ForcePrivate' is specified, the label
>> is specified
>> +  /// to have a private label prefix.
>>   ///
>> -  std::string getValueName(const GlobalValue *V, const char *Suffix
>> = "");
>> +  std::string getMangledName(const GlobalValue *V, const char
>> *Suffix = "",
>> +                             bool ForcePrivate = false);
>> +
>> +  std::string getValueName(const GlobalValue *V, const char *Suffix
>> = "") {
>> +    return getMangledName(V, Suffix);
>> +  }
>>
>>   /// makeNameProper - We don't want identifier names with ., space,
>> or
>>   /// - in them, so we mangle these characters into the strings "d_",
>>
>> Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75610&r1=75609&r2=75610&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
>> (original)
>> +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Tue
>> Jul 14 01:04:35 2009
>> @@ -233,7 +233,7 @@
>>   EmitConstantPool(MF.getConstantPool());
>>
>>   if (F->hasDLLExportLinkage())
>> -    DLLExportedFns.insert(Mang->getValueName(F));
>> +    DLLExportedFns.insert(Mang->getMangledName(F));
>>
>>   // Print the 'header' of function
>>   emitFunctionHeader(MF);
>> @@ -304,62 +304,58 @@
>>     break;
>>   case MachineOperand::MO_GlobalAddress: {
>>     const GlobalValue *GV = MO.getGlobal();
>> -    std::string Name = Mang->getValueName(GV);
>> -    decorateName(Name, GV);
>>
>> -    bool needCloseParen = false;
>> -    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;
>> -    }
>> +    const char *Suffix = "";
>> +
>> +    if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB)
>> +      Suffix = "$stub";
>> +    else if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
>> +             MO.getTargetFlags() ==
>> X86II::MO_DARWIN_NONLAZY_PIC_BASE ||
>> +             MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY
>> ||
>> +             MO.getTargetFlags() ==
>> X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE)
>> +      Suffix = "$non_lazy_ptr";
>> +
>> +    std::string Name = Mang->getMangledName(GV, Suffix, Suffix[0] !
>> = '\0');
>> +    decorateName(Name, GV);
>>
>>     // Handle dllimport linkage.
>> -    if (MO.getTargetFlags() == X86II::MO_DLLIMPORT) {
>> -      O << "__imp_" << Name;
>> -    } else if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
>> -               MO.getTargetFlags() ==
>> X86II::MO_DARWIN_NONLAZY_PIC_BASE) {
>> +    if (MO.getTargetFlags() == X86II::MO_DLLIMPORT)
>> +      Name = "__imp_" + Name;
>> +
>> +    if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
>> +        MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE)
>>       GVStubs.insert(Name);
>> -      printSuffixedName(Name, "$non_lazy_ptr");
>> -    } else if (MO.getTargetFlags() ==
>> X86II::MO_DARWIN_HIDDEN_NONLAZY ||
>> -               MO.getTargetFlags() ==
>> X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE){
>> +    else if (MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY
>> ||
>> +             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) {
>> +    else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB)
>>       FnStubs.insert(Name);
>> -      printSuffixedName(Name, "$stub");
>> -    } else {
>> -      O << Name;
>> -    }
>>
>> -    if (needCloseParen)
>> -      O << ')';
>> +    // If the name begins with a dollar-sign, enclose it in
>> parens.  We do this
>> +    // to avoid having it look like an integer immediate to the
>> assembler.
>> +    if (Name[0] == '$')
>> +      O << '(' << Name << ')';
>> +    else
>> +      O << Name;
>>
>>     printOffset(MO.getOffset());
>>     break;
>>   }
>>   case MachineOperand::MO_ExternalSymbol: {
>> -    bool needCloseParen = false;
>>     std::string Name(TAI->getGlobalPrefix());
>>     Name += MO.getSymbolName();
>> -
>> -    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 (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
>> +      Name += "$stub";
>>       FnStubs.insert(Name);
>> -      printSuffixedName(Name, "$stub");
>> -    } else {
>> -      O << Name;
>>     }
>>
>> -    if (needCloseParen)
>> -      O << ')';
>> +    // If the name begins with a dollar-sign, enclose it in
>> parens.  We do this
>> +    // to avoid having it look like an integer immediate to the
>> assembler.
>> +    if (Name[0] == '$')
>> +      O << '(' << Name << ')';
>> +    else
>> +      O << Name;
>>     break;
>>   }
>>   }
>> @@ -787,7 +783,7 @@
>>     return;
>>   }
>>
>> -  std::string name = Mang->getValueName(GVar);
>> +  std::string name = Mang->getMangledName(GVar);
>>   Constant *C = GVar->getInitializer();
>>   if (isa<MDNode>(C) || isa<MDString>(C))
>>     return;
>> @@ -903,6 +899,20 @@
>>   EmitGlobalConstant(C);
>> }
>>
>> +/// PrintWithoutDarwinSuffix - Print a name that has a suffix
>> appended to it
>> +/// without the suffix.  This is used for darwin stub emission,
>> where we have to
>> +/// be careful to remove the suffix even if the name is quoted.
>> +static void PrintWithoutDarwinSuffix(const char *Name, unsigned
>> NameLen,
>> +                                     unsigned SuffixLen,
>> raw_ostream &O) {
>> +  assert(NameLen > SuffixLen && "Invalid empty name or bogus
>> suffix");
>> +  if (Name[NameLen-1] != '"') {
>> +    O.write(Name, NameLen-SuffixLen);  // foo$stub -> foo
>> +  } else {
>> +    O.write(Name, NameLen-SuffixLen-1);  // "foo$stub" -> "foo
>> +    O << '"';                            //            -> "
>> +  }
>> +}
>> +
>> bool X86ATTAsmPrinter::doFinalization(Module &M) {
>>   // Print out module-level global variables here.
>>   for (Module::const_global_iterator I = M.global_begin(), E =
>> M.global_end();
>> @@ -910,7 +920,7 @@
>>     printModuleLevelGV(I);
>>
>>     if (I->hasDLLExportLinkage())
>> -      DLLExportedGVs.insert(Mang->getValueName(I));
>> +      DLLExportedGVs.insert(Mang->getMangledName(I));
>>   }
>>
>>   if (Subtarget->isTargetDarwin()) {
>> @@ -921,11 +931,10 @@
>>     if (TAI->doesSupportExceptionHandling() && MMI && !Subtarget-
>> >is64Bit()) {
>>       const std::vector<Function*> &Personalities = MMI-
>> >getPersonalities();
>>       for (unsigned i = 0, e = Personalities.size(); i != e; ++i) {
>> -        if (Personalities[i] == 0)
>> -          continue;
>> -        std::string Name = Mang->getValueName(Personalities[i]);
>> -        decorateName(Name, Personalities[i]);
>> -        GVStubs.insert(Name);
>> +        if (Personalities[i])
>> +          GVStubs.insert(Mang->getMangledName(Personalities[i],
>> +                                              "$non_lazy_ptr",
>> +                                              true /*private
>> label*/));
>>       }
>>     }
>>
>> @@ -936,10 +945,13 @@
>>         SwitchToDataSection("\t.section
>> __IMPORT,__jump_table,symbol_stubs,"
>>                             "self_modifying_code+pure_instructions,
>> 5", 0);
>>         const char *Name = I->getKeyData();
>> -        printSuffixedName(Name, "$stub");
>> -        O << ":\n"
>> -             "\t.indirect_symbol " << Name << "\n"
>> -             "\thlt ; hlt ; hlt ; hlt ; hlt\n";
>> +        O << Name << ":\n";
>> +        O << "\t.indirect_symbol ";
>> +
>> +        // Print the name without the $stub.
>> +        PrintWithoutDarwinSuffix(Name, I->getKeyLength(),
>> strlen("$stub"), O);
>> +        O << '\n';
>> +        O << "\thlt ; hlt ; hlt ; hlt ; hlt\n";
>>       }
>>       O << '\n';
>>     }
>> @@ -951,8 +963,10 @@
>>       for (StringSet<>::iterator I = GVStubs.begin(), E =
>> GVStubs.end();
>>            I != E; ++I) {
>>         const char *Name = I->getKeyData();
>> -        printSuffixedName(Name, "$non_lazy_ptr");
>> -        O << ":\n\t.indirect_symbol " << Name << "\n\t.long\t0\n";
>> +        O << Name << ":\n\t.indirect_symbol ";
>> +        PrintWithoutDarwinSuffix(Name, I->getKeyLength(),
>> +                                 strlen("$non_lazy_ptr"), O);
>> +        O << "\n\t.long\t0\n";
>>       }
>>     }
>>
>> @@ -962,8 +976,10 @@
>>       for (StringSet<>::iterator I = HiddenGVStubs.begin(),
>>            E = HiddenGVStubs.end(); I != E; ++I) {
>>         const char *Name = I->getKeyData();
>> -        printSuffixedName(Name, "$non_lazy_ptr");
>> -        O << ":\n" << TAI->getData32bitsDirective() << Name << '\n';
>> +        O << Name << ":\n" << TAI->getData32bitsDirective();
>> +        PrintWithoutDarwinSuffix(Name, I->getKeyLength(),
>> +                                 strlen("$non_lazy_ptr"), O);
>> +        O << '\n';
>>       }
>>     }
>>
>>
>> Modified: llvm/trunk/lib/VMCore/Mangler.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Mangler.cpp?rev=75610&r1=75609&r2=75610&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/VMCore/Mangler.cpp (original)
>> +++ llvm/trunk/lib/VMCore/Mangler.cpp Tue Jul 14 01:04:35 2009
>> @@ -116,12 +116,19 @@
>>   return Result;
>> }
>>
>> -std::string Mangler::getValueName(const GlobalValue *GV, const char
>> *Suffix) {
>> +/// getMangledName - Returns the mangled name of V, an LLVM Value,
>> +/// in the current module.  If 'Suffix' is specified, the name ends
>> with the
>> +/// specified suffix.  If 'ForcePrivate' is specified, the label is
>> specified
>> +/// to have a private label prefix.
>> +///
>> +std::string Mangler::getMangledName(const GlobalValue *GV, const
>> char *Suffix,
>> +                                    bool ForcePrivate) {
>>   assert((!isa<Function>(GV) || !cast<Function>(GV)->isIntrinsic()) &&
>>          "Intrinsic functions cannot be mangled by Mangler");
>>
>>   if (GV->hasName())
>> -    return makeNameProper(GV->getName() + Suffix, GV-
>> >hasPrivateLinkage());
>> +    return makeNameProper(GV->getName() + Suffix,
>> +                          GV->hasPrivateLinkage() | ForcePrivate);
>>
>>   // Get the ID for the global, assigning a new one if we haven't
>> got one
>>   // already.
>> @@ -129,7 +136,8 @@
>>   if (ID == 0) ID = NextAnonGlobalID++;
>>
>>   // Must mangle the global into a unique ID.
>> -  return "__unnamed_" + utostr(ID) + Suffix;
>> +  return makeNameProper("__unnamed_" + utostr(ID) + Suffix,
>> +                        GV->hasPrivateLinkage() | ForcePrivate);
>> }
>>
>> Mangler::Mangler(Module &M, const char *prefix, const char
>> *privatePrefix)
>>
>> Modified: llvm/trunk/test/CodeGen/X86/loop-hoist.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/loop-hoist.ll?rev=75610&r1=75609&r2=75610&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/test/CodeGen/X86/loop-hoist.ll (original)
>> +++ llvm/trunk/test/CodeGen/X86/loop-hoist.ll Tue Jul 14 01:04:35 2009
>> @@ -1,10 +1,10 @@
>> ; RUN: llvm-as < %s | \
>> ; RUN:   llc -relocation-model=dynamic-no-pic -mtriple=i686-apple-
>> darwin8.7.2 |\
>> -; RUN:   grep L_Arr.non_lazy_ptr
>> +; RUN:   grep LArr.non_lazy_ptr
>> ; RUN: llvm-as < %s | \
>> ; RUN:   llc -disable-post-RA-scheduler=true \
>> ; RUN:       -relocation-model=dynamic-no-pic -mtriple=i686-apple-
>> darwin8.7.2 |\
>> -; RUN:   %prcontext L_Arr.non_lazy_ptr 1 | grep {4(%esp)}
>> +; RUN:   %prcontext LArr.non_lazy_ptr 1 | grep {4(%esp)}
>>
>> @Arr = external global [0 x i32]              ; <[0 x i32]*> [#uses=1]
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list