[PATCH] D59301: [DebugInfo] Remove redundant DebugLocEntry::MergeValues() function, NFC

David Stenberg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 13 09:07:08 PDT 2019


dstenb created this revision.
dstenb added reviewers: aprantl, dblaikie, loladiro.
dstenb added a project: debug-info.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

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 <https://reviews.llvm.org/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.


Repository:
  rL LLVM

https://reviews.llvm.org/D59301

Files:
  lib/CodeGen/AsmPrinter/DebugLocEntry.h
  lib/CodeGen/AsmPrinter/DwarfDebug.cpp


Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1081,42 +1081,6 @@
   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<DIExpression>(Values[0].Expression);
-    auto *FirstNextExpr = cast<DIExpression>(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<DIExpression>(Values[i].Expression)->fragmentCmp(
-            cast<DIExpression>(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
@@ -1192,27 +1156,17 @@
     }
 
     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.
Index: lib/CodeGen/AsmPrinter/DebugLocEntry.h
===================================================================
--- lib/CodeGen/AsmPrinter/DebugLocEntry.h
+++ lib/CodeGen/AsmPrinter/DebugLocEntry.h
@@ -105,12 +105,6 @@
     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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59301.190426.patch
Type: text/x-patch
Size: 3657 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190313/a335cab5/attachment.bin>


More information about the llvm-commits mailing list