[PATCH] D89749: SourceManager: Don't allocate an SLocEntry until it's loaded
Duncan P. N. Exon Smith via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 27 10:31:46 PDT 2020
dexonsmith added a comment.
In D89749#2356846 <https://reviews.llvm.org/D89749#2356846>, @v.g.vassilev wrote:
> Is the performance overhead for loaded module a % of the overall size of the source files?
`SourceManager::PrintStats` almost has the information you need. One of the lines is:
llvm::errs() << LoadedSLocEntryTable.size()
<< " loaded SLocEntries allocated, "
This is how many `SLocEntries` have been allocated for imported ASTs (modules / PCH). But unless the corresponding bit in `SLocEntryLoaded` is set, it hasn't actually been "loaded", a spot has just been reserved. The first call to `getSLocEntry` for that location will trigger a load from the serialized AST.
Here's how you can estimate the memory usage change:
uint64_t OldMem = 0, NewMem = 0;
// Add each allocated SLocEntry. NextPowerOf2 is an estimate of the SmallVector
// load factor.
OldMem += llvm::capacity_in_bytes(LoadedSLocEntryTable);
NewMem += NextPowerOf2(SLocEntryTableLoaded.count()) * sizeof(SLocEntry);
// Add the side table overhead. We know precisely what the load factor of
// is in this case, since we have one that's the same size.
OldMem += llvm::capacity_in_bytes(SLocEntryTableLoaded);
NewMem += LoadedSLocEntryTable.capacity() * sizeof(unsigned);
If you do that calculation at the end of the compilation, you can see the memory savings.
> Sorry for the naive question but what is a unloaded module?
It's an unloaded `SLocEntry`. After the module has been imported, the `SLocEntry`s are allocated, but lazily read from disk on first access. If it hasn't been read from disk yet, I'm calling it "unloaded".
================
Comment at: clang/include/clang/Basic/SourceManager.h:703
- /// Same indexing as LoadedSLocEntryTable.
- llvm::BitVector SLocEntryLoaded;
----------------
v.g.vassilev wrote:
> We can probably remove the bitvector header include.
Nice catch, I'll fix that.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D89749/new/
https://reviews.llvm.org/D89749
More information about the cfe-commits
mailing list