[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:19 PDT 2025


================
@@ -114,25 +117,61 @@ size_t StableFunctionMap::size(SizeType Type) const {
   case UniqueHashCount:
     return HashToFuncs.size();
   case TotalFunctionCount: {
+    const_cast<StableFunctionMap *>(this)->deserializeLazyLoadingEntries();
     size_t Count = 0;
     for (auto &Funcs : HashToFuncs)
-      Count += Funcs.second.size();
+      Count += Funcs.second.Entries.size();
     return Count;
   }
   case MergeableFunctionCount: {
+    const_cast<StableFunctionMap *>(this)->deserializeLazyLoadingEntries();
     size_t Count = 0;
     for (auto &[Hash, Funcs] : HashToFuncs)
-      if (Funcs.size() >= 2)
-        Count += Funcs.size();
+      if (Funcs.Entries.size() >= 2)
+        Count += Funcs.Entries.size();
     return Count;
   }
   }
   llvm_unreachable("Unhandled size type");
 }
 
+const StableFunctionMap::StableFunctionEntries &
+StableFunctionMap::at(HashFuncsMapType::key_type FunctionHash) const {
+  auto It = HashToFuncs.find(FunctionHash);
+  if (isLazilyLoaded())
+    const_cast<StableFunctionMap *>(this)->deserializeLazyLoadingEntry(It);
+  return It->second.Entries;
+}
+
+void StableFunctionMap::deserializeLazyLoadingEntry(
+    HashFuncsMapType::iterator It) {
+  assert(isLazilyLoaded() && "Cannot deserialize non-lazily-loaded map");
+  std::call_once(It->second.LazyLoadFlag, [this, It]() {
+    for (auto Offset : It->second.Offsets)
+      StableFunctionMapRecord::deserializeEntry(
+          reinterpret_cast<const unsigned char *>(Offset), It->first, this,
+          ReadStableFunctionMapNames);
+  });
+}
+
+void ::StableFunctionMap::deserializeLazyLoadingEntries() {
----------------
kyulee-com wrote:

```suggestion
void StableFunctionMap::deserializeLazyLoadingEntries() {
```

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


More information about the llvm-commits mailing list