[llvm-commits] [llvm] r84134 - in /llvm/trunk/lib/CodeGen/AsmPrinter: DwarfDebug.cpp DwarfDebug.h

Chris Lattner clattner at apple.com
Fri Jan 15 13:52:57 PST 2010


ping?

On Jan 4, 2010, at 11:00 AM, Chris Lattner wrote:

>
> On Jan 4, 2010, at 8:48 AM, Devang Patel wrote:
>
>>
>> On Jan 3, 2010, at 9:12 PM, Chris Lattner wrote:
>>
>>> On Oct 14, 2009, at 2:08 PM, Devang Patel wrote:
>>>> Author: dpatel
>>>> Date: Wed Oct 14 16:08:09 2009
>>>> New Revision: 84134
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=84134&view=rev
>>>> Log:
>>>> Add support to record DbgScope as inlined scope.
>>>
>>> Devang, why does InlinedAt need to be a WeakVH here?  WeakVH is
>>> much more expensive than it looks.
>>
>> InlinedAt is a MDNode which can be replaced by another MDNode.
>> WeakVH ensures that DbgScope still points to expected MDNode.
>
> AsmPrinter is changing MDNodes?  Per my previous email/bugzilla, there
> is no use of MDNode::replaceAllUsesWith that is actually valid anyway.
>
> -Chris
>
>> -
>> Devang
>>>
>>> -Chris
>>>
>>>>
>>>> Modified:
>>>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>>>>
>>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=84134&r1=84133&r2=84134&view=diff
>>>>
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> ===================================================================
>>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
>>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Oct 14
>>>> 16:08:09 2009
>>>> @@ -145,7 +145,10 @@
>>>> class VISIBILITY_HIDDEN DbgScope {
>>>> DbgScope *Parent;                   // Parent to this scope.
>>>> DIDescriptor Desc;                  // Debug info descriptor for
>>>> scope.
>>>> -                                      // Either subprogram or
>>>> block.
>>>> +                                      // FIXME use WeakVH for  
>>>> Desc.
>>>> +  WeakVH InlinedAt;                   // If this scope represents
>>>> inlined
>>>> +                                      // function body then this
>>>> is the location
>>>> +                                      // where this body is
>>>> inlined.
>>>> unsigned StartLabelID;              // Label ID of the beginning
>>>> of scope.
>>>> unsigned EndLabelID;                // Label ID of the end of  
>>>> scope.
>>>> const MachineInstr *LastInsn;       // Last instruction of this
>>>> scope.
>>>> @@ -157,14 +160,17 @@
>>>> // Private state for dump()
>>>> mutable unsigned IndentLevel;
>>>> public:
>>>> -  DbgScope(DbgScope *P, DIDescriptor D)
>>>> -    : Parent(P), Desc(D), StartLabelID(0), EndLabelID(0),
>>>> LastInsn(0),
>>>> -      FirstInsn(0), IndentLevel(0) {}
>>>> +  DbgScope(DbgScope *P, DIDescriptor D, MDNode *I = 0)
>>>> +    : Parent(P), Desc(D), InlinedAt(I), StartLabelID(0),
>>>> EndLabelID(0),
>>>> +      LastInsn(0), FirstInsn(0), IndentLevel(0) {}
>>>> virtual ~DbgScope();
>>>>
>>>> // Accessors.
>>>> DbgScope *getParent()          const { return Parent; }
>>>> DIDescriptor getDesc()         const { return Desc; }
>>>> +  MDNode *getInlinedAt()   const {
>>>> +    return dyn_cast_or_null<MDNode>(InlinedAt);
>>>> +  }
>>>> unsigned getStartLabelID()     const { return StartLabelID; }
>>>> unsigned getEndLabelID()       const { return EndLabelID; }
>>>> SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
>>>> @@ -1296,29 +1302,39 @@
>>>>
>>>> /// getOrCreateScope - Returns the scope associated with the given
>>>> descriptor.
>>>> ///
>>>> -DbgScope *DwarfDebug::getDbgScope(MDNode *N, const MachineInstr
>>>> *MI) {
>>>> +DbgScope *DwarfDebug::getDbgScope(MDNode *N, const MachineInstr
>>>> *MI,
>>>> +                                  MDNode *InlinedAt) {
>>>> DbgScope *&Slot = DbgScopeMap[N];
>>>> if (Slot) return Slot;
>>>>
>>>> DbgScope *Parent = NULL;
>>>>
>>>> -  DIDescriptor Scope(N);
>>>> -  if (Scope.isCompileUnit()) {
>>>> -    return NULL;
>>>> -  } else if (Scope.isSubprogram()) {
>>>> -    DISubprogram SP(N);
>>>> -    DIDescriptor ParentDesc = SP.getContext();
>>>> -    if (!ParentDesc.isNull() && !ParentDesc.isCompileUnit())
>>>> -      Parent = getDbgScope(ParentDesc.getNode(), MI);
>>>> -  } else if (Scope.isLexicalBlock()) {
>>>> -    DILexicalBlock DB(N);
>>>> -    DIDescriptor ParentDesc = DB.getContext();
>>>> -    if (!ParentDesc.isNull())
>>>> -      Parent = getDbgScope(ParentDesc.getNode(), MI);
>>>> -  } else
>>>> -    assert (0 && "Unexpected scope info");
>>>> +  if (InlinedAt) {
>>>> +    DILocation IL(InlinedAt);
>>>> +    assert (!IL.isNull() && "Invalid InlindAt location!");
>>>> +    DenseMap<MDNode *, DbgScope *>::iterator DSI =
>>>> +      DbgScopeMap.find(IL.getScope().getNode());
>>>> +    assert (DSI != DbgScopeMap.end() && "Unable to find InlineAt
>>>> scope!");
>>>> +    Parent = DSI->second;
>>>> +  } else {
>>>> +    DIDescriptor Scope(N);
>>>> +    if (Scope.isCompileUnit()) {
>>>> +      return NULL;
>>>> +    } else if (Scope.isSubprogram()) {
>>>> +      DISubprogram SP(N);
>>>> +      DIDescriptor ParentDesc = SP.getContext();
>>>> +      if (!ParentDesc.isNull() && !ParentDesc.isCompileUnit())
>>>> +        Parent = getDbgScope(ParentDesc.getNode(), MI, InlinedAt);
>>>> +    } else if (Scope.isLexicalBlock()) {
>>>> +      DILexicalBlock DB(N);
>>>> +      DIDescriptor ParentDesc = DB.getContext();
>>>> +      if (!ParentDesc.isNull())
>>>> +        Parent = getDbgScope(ParentDesc.getNode(), MI, InlinedAt);
>>>> +    } else
>>>> +      assert (0 && "Unexpected scope info");
>>>> +  }
>>>>
>>>> -  Slot = new DbgScope(Parent, DIDescriptor(N));
>>>> +  Slot = new DbgScope(Parent, DIDescriptor(N), InlinedAt);
>>>> Slot->setFirstInsn(MI);
>>>>
>>>> if (Parent)
>>>> @@ -1795,7 +1811,10 @@
>>>>  DIVariable DV (Var);
>>>>  if (DV.isNull()) continue;
>>>>  unsigned VSlot = VI->second;
>>>> -    DbgScope *Scope = getDbgScope(DV.getContext().getNode(),
>>>> NULL);
>>>> +    DenseMap<MDNode *, DbgScope *>::iterator DSI =
>>>> +      DbgScopeMap.find(DV.getContext().getNode());
>>>> +    assert (DSI != DbgScopeMap.end() && "Unable to find variable
>>>> scope!");
>>>> +    DbgScope *Scope = DSI->second;
>>>>  Scope->AddVariable(new DbgVariable(DV, VSlot, false));
>>>> }
>>>> }
>>>> @@ -1849,7 +1868,7 @@
>>>>    // into a scope DIE at the end.
>>>>    DIDescriptor D(DLT.Scope);
>>>>    if (!D.isCompileUnit()) {
>>>> -        DbgScope *Scope = getDbgScope(DLT.Scope, MInsn);
>>>> +        DbgScope *Scope = getDbgScope(DLT.Scope, MInsn,
>>>> DLT.InlinedAtLoc);
>>>>      Scope->setLastInsn(MInsn);
>>>>    }
>>>>  }
>>>>
>>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=84134&r1=84133&r2=84134&view=diff
>>>>
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> =
>>>> = 
>>>> ===================================================================
>>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
>>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Oct 14
>>>> 16:08:09 2009
>>>> @@ -364,7 +364,7 @@
>>>> /// getDbgScope - Returns the scope associated with the given
>>>> descriptor.
>>>> ///
>>>> DbgScope *getOrCreateScope(MDNode *N);
>>>> -  DbgScope *getDbgScope(MDNode *N, const MachineInstr *MI);
>>>> +  DbgScope *getDbgScope(MDNode *N, const MachineInstr *MI, MDNode
>>>> *InlinedAt);
>>>>
>>>> /// ConstructDbgScope - Construct the components of a scope.
>>>> ///
>>>>
>>>>
>>>> _______________________________________________
>>>> 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