[PATCH] D64738: Expand comment about how StringsToBuckets was computed, and add more entries

Nico Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 15 06:26:20 PDT 2019


thakis created this revision.
thakis added a reviewer: rnk.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.

The construction was explained in
https://reviews.llvm.org/D44810?id=139526#inline-391999 but reading the code
shouldn't require hunting down old reviews to understand it.

The precomputed list was missing an entry for the empty list case, and
one entry at the very end. (The current last entry is the last one where
3 * BucketCount fits in a signed int, but the reference implementation
uses unsigneds as far as I can tell, so there's room for one more entry.)

No behavior change for inputs seen in practice.


https://reviews.llvm.org/D64738

Files:
  llvm/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp


Index: llvm/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp
===================================================================
--- llvm/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp
+++ llvm/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp
@@ -60,7 +60,19 @@
   // strings.  Matching the reference algorithm exactly is not strictly
   // necessary for correctness, but it helps when comparing LLD's PDBs with
   // Microsoft's PDBs so as to eliminate superfluous differences.
+  // The reference implementation does (in nmt.h, NMT::grow()):
+  //   unsigned StringCount = 0;
+  //   unsigned BucketCount = 1;
+  //   fn insert() {
+  //     ++StringCount;
+  //     if (BucketCount * 3 / 4 < StringCount)
+  //       BucketCount = BucketCount * 3 / 2 + 1;
+  //   }
+  // This list contains all StringCount, BucketCount pairs where BucketCount was
+  // just incremented.  It ends before the first BucketCount entry where
+  // BucketCount * 3 would overflow a 32-bit unsigned int.
   static std::map<uint32_t, uint32_t> StringsToBuckets = {
+      {0, 1},
       {1, 2},
       {2, 4},
       {4, 7},
@@ -110,7 +122,8 @@
       {229865455, 459730910},
       {344798183, 689596366},
       {517197275, 1034394550},
-      {775795913, 1551591826}};
+      {775795913, 1551591826},
+      {1163693870, 2327387740}};
   auto Entry = StringsToBuckets.lower_bound(NumStrings);
   assert(Entry != StringsToBuckets.end());
   return Entry->second;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64738.209842.patch
Type: text/x-patch
Size: 1453 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190715/ad585d12/attachment.bin>


More information about the llvm-commits mailing list