[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