[llvm] r204162 - Debug info: Remove OdrMemberMap from DwarfDebug, it's not necessary.

David Blaikie dblaikie at gmail.com
Sun May 25 22:40:48 PDT 2014


On Fri, Mar 21, 2014 at 10:34 AM, Manman Ren <manman.ren at gmail.com> wrote:
>
>
>
> On Tue, Mar 18, 2014 at 10:41 AM, Adrian Prantl <aprantl at apple.com> wrote:
>>
>> Author: adrian
>> Date: Tue Mar 18 12:41:15 2014
>> New Revision: 204162
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=204162&view=rev
>> Log:
>> Debug info: Remove OdrMemberMap from DwarfDebug, it's not necessary.
>> Follow-up to r203982.
>>
>> Modified:
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=204162&r1=204161&r2=204162&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Mar 18 12:41:15
>> 2014
>> @@ -369,7 +369,6 @@ bool DwarfDebug::isSubprogramContext(con
>>  // scope then create and insert DIEs for these variables.
>>  DIE *DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit *SPCU,
>>                                            DISubprogram SP) {
>> -  SP = SPCU->getOdrUniqueSubprogram(resolve(SP.getContext()), SP);
>>    DIE *SPDie = SPCU->getDIE(SP);
>>
>>    assert(SPDie && "Unable to find subprogram DIE!");
>> @@ -604,7 +603,8 @@ DIE *DwarfDebug::constructScopeDIE(Dwarf
>>    if (!Scope || !Scope->getScopeNode())
>>      return NULL;
>>
>> -  DIScope DS(Scope->getScopeNode());
>> +  // Unique scope where applicable.
>> +  DIScope DS(resolve(DIScope(Scope->getScopeNode()).getRef()));
>
>
> Just to recapture what Adrian and I discussed earlier. We try not to unique
> types in the backend. All references to
> DITypes with an identifier should be converted to DIRef if possible (with
> the exception of the retained type list).
>
>
> Adrian tried reverting r203982, the testing case for r203982 will still
> work, it is working because of his earlier commit on converting DIVariable's
> type to use DIRef.
>
>>
>>
>>    SmallVector<DIE *, 8> Children;
>>    DIE *ObjectPointer = NULL;
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=204162&r1=204161&r2=204162&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Tue Mar 18 12:41:15
>> 2014
>> @@ -346,9 +346,6 @@ class DwarfDebug : public AsmPrinterHand
>>    /// of in DwarfCompileUnit.
>>    DenseMap<const MDNode *, DIE *> MDTypeNodeToDieMap;
>>
>> -  // Used to unique C++ member function declarations.
>> -  StringMap<const MDNode *> OdrMemberMap;
>> -
>>    // List of all labels used in aranges generation.
>>    std::vector<SymbolCU> ArangeLabels;
>>
>> @@ -700,11 +697,6 @@ public:
>>      return MDTypeNodeToDieMap.lookup(TypeMD);
>>    }
>>
>> -  /// \brief Look up or create an entry in the OdrMemberMap.
>> -  const MDNode *&getOrCreateOdrMember(StringRef Key) {
>> -    return OdrMemberMap.GetOrCreateValue(Key).getValue();
>> -  }
>> -
>>    /// \brief Emit all Dwarf sections that should come prior to the
>>    /// content.
>>    void beginModule();
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=204162&r1=204161&r2=204162&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Tue Mar 18 12:41:15
>> 2014
>> @@ -1427,24 +1427,6 @@ DIE *DwarfUnit::getOrCreateNameSpace(DIN
>>    return NDie;
>>  }
>>
>> -/// Unique C++ member function declarations based on their
>> -/// context and mangled name.
>> -DISubprogram
>> -DwarfUnit::getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const
>> {
>> -  if (!hasODR() ||
>> -      !Context.isCompositeType() ||
>> -      SP.getLinkageName().empty() ||
>> -      SP.isDefinition())
>> -    return SP;
>> -  // Create a key with the UID of the parent class and this SP's name.
>> -  Twine Key = SP.getContext().getName() + SP.getLinkageName();
>> -  const MDNode *&Entry = DD->getOrCreateOdrMember(Key.str());
>> -  if (!Entry)
>> -    Entry = &*SP;
>> -
>> -  return DISubprogram(Entry);
>> -}
>> -
>>  /// getOrCreateSubprogramDIE - Create new DIE using SP.
>>  DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
>>    // Construct the context before querying for the existence of the DIE
>> in case
>> @@ -1452,8 +1434,10 @@ DIE *DwarfUnit::getOrCreateSubprogramDIE
>>    // declarations).
>>    DIScope Context = resolve(SP.getContext());
>>    DIE *ContextDIE = getOrCreateContextDIE(Context);
>> +
>>    // Unique declarations based on the ODR, where applicable.
>> -  SP = getOdrUniqueSubprogram(Context, SP);
>> +  SP = DISubprogram(DD->resolve(SP.getRef()));
>
>
> This line of code does nothing, since we don't have identifiers for
> DISubprogram.

Removed in r209611 after I saw it & got confused about why we were
doing that. (or, more to the point, when I replicated similar code in
other places under the assumption that it was useful/necessary, I
couldn't get it to do anything useful)

- David

>
> Thanks,
> Manman
>
>>
>> +  assert(SP.Verify());
>>
>>    DIE *SPDie = getDIE(SP);
>>    if (SPDie)
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h?rev=204162&r1=204161&r2=204162&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h Tue Mar 18 12:41:15 2014
>> @@ -487,28 +487,6 @@ public:
>>
>>    virtual DwarfCompileUnit &getCU() = 0;
>>
>> -  /// \brief Return whether this compilation unit has the
>> -  /// one-definition-rule (ODR).  In C++ this allows the compiler to
>> -  /// perform type unique during LTO.
>> -  bool hasODR() const {
>> -    switch (getLanguage()) {
>> -    case dwarf::DW_LANG_C_plus_plus:
>> -    case dwarf::DW_LANG_C_plus_plus_03:
>> -    case dwarf::DW_LANG_C_plus_plus_11:
>> -      // For all we care, the C++ part of the language has the ODR and
>> -      // ObjC methods are not represented in a way that they could be
>> -      // confused with C++ member functions.
>> -    case dwarf::DW_LANG_ObjC_plus_plus:
>> -      return true;
>> -    default:
>> -      return false;
>> -    }
>> -  }
>> -
>> -  /// \brief Unique C++ member function declarations based on their
>> -  /// context+mangled name.
>> -  DISubprogram getOdrUniqueSubprogram(DIScope Context, DISubprogram SP)
>> const;
>> -
>>  protected:
>>    /// getOrCreateStaticMemberDIE - Create new static data member DIE.
>>    DIE *getOrCreateStaticMemberDIE(DIDerivedType DT);
>>
>>
>> _______________________________________________
>> 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