[llvm] [DebugNames] Compare TableEntry names more efficiently (PR #79759)

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 29 14:11:09 PST 2024


================
@@ -543,6 +543,27 @@ class DWARFDebugNames : public DWARFAcceleratorTable {
       return StrData.getCStr(&Off);
     }
 
+    // Compares the name of this entry against Target, returning true if they
+    // are equal. This is helpful is hot code paths that do not need the length
+    // of the name.
+    bool compareNameAgainst(StringRef Target) const {
+      // Note: this is not the name, but the rest of debug_names starting from
+      // name. This handles corrupt data (non-null terminated) without
+      // overruning the buffer.
+      auto Data = StrData.getData().substr(StringOffset);
+      auto DataSize = Data.size();
+      auto TargetSize = Target.size();
+
+      // Invariant: at the start of the loop, we have non-null characters to
+      // read from Data.
+      size_t Idx = 0;
+      for (; Idx < DataSize && Data[Idx]; Idx++) {
----------------
adrian-prantl wrote:

FWIW, it might not hurt to include the (shortened) rationale about str(n)cmp in the code as a comment.

https://github.com/llvm/llvm-project/pull/79759


More information about the llvm-commits mailing list