From 93b497a61d205088ad14e3ec7e7abc91e33592fe Mon Sep 17 00:00:00 2001 From: David Stenberg Date: Tue, 9 Apr 2019 07:46:09 +0000 Subject: [PATCH] [DebugInfo] Remove redundant DebugLocEntry::MergeValues() function, NFC Summary: The MergeValues() function would try to merge two entries if they shared the same beginning label. Having the same beginning label means that the former entry's range would be empty; however, after D55919 we no longer create entries for empty ranges, so we can no longer land in a situation where that check in MergeValues would succeed. Instead, the "merging" is done by keeping the live values from the preceding empty ranges in OpenRanges, and adding them to the first non-empty range. Reviewers: aprantl, dblaikie, loladiro Reviewed By: aprantl Subscribers: llvm-commits Tags: #debug-info, #llvm Differential Revision: https://reviews.llvm.org/D59301 llvm-svn: 357974 --- llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h | 6 --- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 54 ++------------------- 2 files changed, 4 insertions(+), 56 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h b/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h index 256a41be2373..5011c84d7f7b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h +++ b/llvm/lib/CodeGen/AsmPrinter/DebugLocEntry.h @@ -105,12 +105,6 @@ public: Values.push_back(std::move(Val)); } - /// If this and Next are describing different pieces of the same - /// variable, merge them by appending Next's values to the current - /// list of values. - /// Return true if the merge was successful. - bool MergeValues(const DebugLocEntry &Next); - /// Attempt to merge this DebugLocEntry with Next and return /// true if the merge was successful. Entries can be merged if they /// share the same Loc/Constant and if Next immediately follows this diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0e0a5b248647..2b4ba37df1e4 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1094,42 +1094,6 @@ static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) { llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!"); } -/// If this and Next are describing different fragments of the same -/// variable, merge them by appending Next's values to the current -/// list of values. -/// Return true if the merge was successful. -bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) { - if (Begin == Next.Begin) { - auto *FirstExpr = cast(Values[0].Expression); - auto *FirstNextExpr = cast(Next.Values[0].Expression); - if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment()) - return false; - - // We can only merge entries if none of the fragments overlap any others. - // In doing so, we can take advantage of the fact that both lists are - // sorted. - for (unsigned i = 0, j = 0; i < Values.size(); ++i) { - for (; j < Next.Values.size(); ++j) { - int res = cast(Values[i].Expression)->fragmentCmp( - cast(Next.Values[j].Expression)); - if (res == 0) // The two expressions overlap, we can't merge. - return false; - // Values[i] is entirely before Next.Values[j], - // so go back to the next entry of Values. - else if (res == -1) - break; - // Next.Values[j] is entirely before Values[i], so go on to the - // next entry of Next.Values. - } - } - - addValues(Next.Values); - End = Next.End; - return true; - } - return false; -} - /// Build the location list for all DBG_VALUEs in the function that /// describe the same variable. If the ranges of several independent /// fragments of the same variable overlap partially, split them up and @@ -1205,27 +1169,17 @@ DwarfDebug::buildLocationList(SmallVectorImpl &DebugLoc, } DebugLocEntry Loc(StartLabel, EndLabel, Value); - bool couldMerge = false; - // If this is a fragment, it may belong to the current DebugLocEntry. if (DIExpr->isFragment()) { // Add this value to the list of open ranges. OpenRanges.push_back(Value); - - // Attempt to add the fragment to the last entry. - if (!DebugLoc.empty()) - if (DebugLoc.back().MergeValues(Loc)) - couldMerge = true; } - if (!couldMerge) { - // Need to add a new DebugLocEntry. Add all values from still - // valid non-overlapping fragments. - if (OpenRanges.size()) - Loc.addValues(OpenRanges); + // Add all values from still valid non-overlapping fragments. + if (OpenRanges.size()) + Loc.addValues(OpenRanges); - DebugLoc.push_back(std::move(Loc)); - } + DebugLoc.push_back(std::move(Loc)); // Attempt to coalesce the ranges of two otherwise identical // DebugLocEntries.