[llvm] r204679 - DwarfDebug: Simplify debug_loc merging

Adrian Prantl aprantl at apple.com
Mon Mar 24 16:03:29 PDT 2014


Although it means updating my patch-in-review, I really like the direction this is going. The old design with the isMerged flag bothered me quite a bit :-)

thanks,
adrian

On Mar 24, 2014, at 3:27 PM, David Blaikie <dblaikie at gmail.com> wrote:

> Author: dblaikie
> Date: Mon Mar 24 17:27:06 2014
> New Revision: 204679
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=204679&view=rev
> Log:
> DwarfDebug: Simplify debug_loc merging
> 
> No functional change intended.
> 
> Merging up-front rather than delaying this task until later. This just
> seems simpler and more efficient (avoiding growing the debug loc list
> only to have to skip over those post-merged entries, etc).
> 
> Modified:
>    llvm/trunk/lib/CodeGen/AsmPrinter/DIEHash.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIEHash.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIEHash.cpp?rev=204679&r1=204678&r2=204679&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIEHash.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIEHash.cpp Mon Mar 24 17:27:06 2014
> @@ -296,8 +296,6 @@ void DIEHash::hashLocList(const DIELocLi
>     // which is the next empty entry.
>     if (Entry.isEmpty())
>       return;
> -    else if (Entry.isMerged())
> -      continue;
>     else
>       AP->getDwarfDebug()->emitDebugLocEntry(Streamer, Entry);
>   }
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=204679&r1=204678&r2=204679&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Mar 24 17:27:06 2014
> @@ -1297,8 +1297,9 @@ DwarfDebug::collectVariableInfo(SmallPtr
>       // The value is valid until the next DBG_VALUE or clobber.
>       LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
>       DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
> -      DotDebugLocEntries.push_back(
> -          getDebugLocEntry(Asm, FLabel, SLabel, Begin, TheCU));
> +      DebugLocEntry Loc = getDebugLocEntry(Asm, FLabel, SLabel, Begin, TheCU);
> +      if (DotDebugLocEntries.empty() || !DotDebugLocEntries.back().Merge(Loc))
> +        DotDebugLocEntries.push_back(std::move(Loc));
>     }
>     DotDebugLocEntries.push_back(DebugLocEntry());
>   }
> @@ -2378,15 +2379,6 @@ void DwarfDebug::emitDebugLoc() {
>   if (DotDebugLocEntries.empty())
>     return;
> 
> -  for (SmallVectorImpl<DebugLocEntry>::iterator
> -           I = DotDebugLocEntries.begin(),
> -           E = DotDebugLocEntries.end();
> -       I != E; ++I) {
> -    DebugLocEntry &Entry = *I;
> -    if (I + 1 != DotDebugLocEntries.end())
> -      Entry.Merge(I + 1);
> -  }
> -
>   // Start the dwarf loc section.
>   Asm->OutStreamer.SwitchSection(
>       Asm->getObjFileLowering().getDwarfLocSection());
> @@ -2398,8 +2390,6 @@ void DwarfDebug::emitDebugLoc() {
>            E = DotDebugLocEntries.end();
>        I != E; ++I, ++index) {
>     const DebugLocEntry &Entry = *I;
> -    if (Entry.isMerged())
> -      continue;
> 
>     if (Entry.isEmpty()) {
>       Asm->OutStreamer.EmitIntValue(0, Size);
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=204679&r1=204678&r2=204679&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Mon Mar 24 17:27:06 2014
> @@ -84,34 +84,31 @@ class DebugLocEntry {
>   // The compile unit to which this location entry is referenced by.
>   const DwarfCompileUnit *Unit;
> 
> -  // Whether this location has been merged.
> -  bool Merged;
> -
> public:
> -  DebugLocEntry() : Begin(0), End(0), Variable(0), Unit(0), Merged(false) {
> +  DebugLocEntry() : Begin(0), End(0), Variable(0), Unit(0) {
>     Constants.Int = 0;
>   }
>   DebugLocEntry(const MCSymbol *B, const MCSymbol *E, MachineLocation &L,
>                 const MDNode *V, const DwarfCompileUnit *U)
> -      : Begin(B), End(E), Loc(L), Variable(V), Unit(U), Merged(false) {
> +      : Begin(B), End(E), Loc(L), Variable(V), Unit(U) {
>     Constants.Int = 0;
>     EntryKind = E_Location;
>   }
>   DebugLocEntry(const MCSymbol *B, const MCSymbol *E, int64_t i,
>                 const DwarfCompileUnit *U)
> -      : Begin(B), End(E), Variable(0), Unit(U), Merged(false) {
> +      : Begin(B), End(E), Variable(0), Unit(U) {
>     Constants.Int = i;
>     EntryKind = E_Integer;
>   }
>   DebugLocEntry(const MCSymbol *B, const MCSymbol *E, const ConstantFP *FPtr,
>                 const DwarfCompileUnit *U)
> -      : Begin(B), End(E), Variable(0), Unit(U), Merged(false) {
> +      : Begin(B), End(E), Variable(0), Unit(U) {
>     Constants.CFP = FPtr;
>     EntryKind = E_ConstantFP;
>   }
>   DebugLocEntry(const MCSymbol *B, const MCSymbol *E, const ConstantInt *IPtr,
>                 const DwarfCompileUnit *U)
> -      : Begin(B), End(E), Variable(0), Unit(U), Merged(false) {
> +      : Begin(B), End(E), Variable(0), Unit(U) {
>     Constants.CIP = IPtr;
>     EntryKind = E_ConstantInt;
>   }
> @@ -119,12 +116,11 @@ public:
>   /// \brief Empty entries are also used as a trigger to emit temp label. Such
>   /// labels are referenced is used to find debug_loc offset for a given DIE.
>   bool isEmpty() const { return Begin == 0 && End == 0; }
> -  bool isMerged() const { return Merged; }
> -  void Merge(DebugLocEntry *Next) {
> -    if (!(Begin && Loc == Next->Loc && End == Next->Begin))
> -      return;
> -    Next->Begin = Begin;
> -    Merged = true;
> +  bool Merge(const DebugLocEntry &Next) {
> +    if (!(Begin && Loc == Next.Loc && End == Next.Begin))
> +      return false;
> +    End = Next.End;
> +    return true;
>   }
>   bool isLocation() const { return EntryKind == E_Location; }
>   bool isInt() const { return EntryKind == E_Integer; }
> 
> 
> _______________________________________________
> 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