[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