[llvm] [CGData] Lazy loading support for stable function map (PR #151660)

Kyungwoo Lee via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 8 10:36:18 PDT 2025


================
@@ -157,47 +234,51 @@ void StableFunctionMapRecord::deserialize(const unsigned char *&Ptr,
   // Read StableFunctionEntries.
   auto NumFuncs =
       endian::readNext<uint32_t, endianness::little, unaligned>(Ptr);
+  auto FixedSizeFieldsOffset =
+      reinterpret_cast<uintptr_t>(Ptr) + NumFuncs * sizeof(stable_hash);
+  constexpr uint32_t FixedSizeFieldsSizePerEntry =
+      // FunctionNameId
+      sizeof(uint32_t) +
+      // ModuleNameId
+      sizeof(uint32_t) +
+      // InstCount
+      sizeof(uint32_t) +
+      // Relative offset to IndexOperandHashes
+      sizeof(uint64_t);
   for (unsigned I = 0; I < NumFuncs; ++I) {
     auto Hash =
         endian::readNext<stable_hash, endianness::little, unaligned>(Ptr);
-    [[maybe_unused]] auto FunctionNameId =
-        endian::readNext<uint32_t, endianness::little, unaligned>(Ptr);
-    [[maybe_unused]] auto ModuleNameId =
-        endian::readNext<uint32_t, endianness::little, unaligned>(Ptr);
-    // Only validate IDs if we've read the names
-    if (ReadStableFunctionMapNames) {
-      assert(FunctionMap->getNameForId(FunctionNameId) &&
-             "FunctionNameId out of range");
-      assert(FunctionMap->getNameForId(ModuleNameId) &&
-             "ModuleNameId out of range");
-    }
+    if (Lazy)
+      FunctionMap->HashToFuncs.try_emplace(Hash)
+          .first->second.Offsets.push_back(FixedSizeFieldsOffset);
----------------
kyulee-com wrote:

```suggestion
          auto [It, Inserted] = FunctionMap->HashToFuncs.try_emplace(Hash);
          EntryStorage &Storage = It->second;
          Storage.Offsets.push_back(FixedSizeFieldsOffset);
```

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


More information about the llvm-commits mailing list