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

Devang Patel dpatel at apple.com
Mon Jan 4 08:48:21 PST 2010


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.
-
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
>




More information about the llvm-commits mailing list