[llvm] r204679 - DwarfDebug: Simplify debug_loc merging
Eric Christopher
echristo at gmail.com
Mon Mar 24 16:14:06 PDT 2014
On Mon, Mar 24, 2014 at 4:08 PM, David Blaikie <dblaikie at gmail.com> wrote:
> On Mon, Mar 24, 2014 at 4:03 PM, Adrian Prantl <aprantl at apple.com> wrote:
>> Although it means updating my patch-in-review,
>
> Right - sorry about that!
>
>> I really like the direction this is going. The old design with the isMerged flag bothered me quite a bit :-)
>
> Yeah - it was pretty gross.
Agreed. It's been on my mental todo list forever.
This should also solve the problem (I think) that you could see IIRC
in sret.cpp where you'd have a zero length location list.
>
> r204680 is as far as I'm going for now - though we could go further,
> rather than using raw vectors for each list, we could create a
> structure with a label (so we don't create the same label name in two
> places "magically" (spooking action at a distance/hardcoded
> constants/etc)), maybe even use a linked list of vectors then we could
> just point to the vectors (rather than using an index) from the DIEs,
> etc. That way we wouldn't have to look it up again in the DIE hashing
> code, we'd just follow the pointer.
Fair. That might be a good incremental on top.
-eric
>
> - David
>
>>
>> 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