[clang] [serialization] no transitive decl change (PR #92083)

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 13 20:27:04 PDT 2024


ChuanqiXu9 wrote:

Thanks for the profiling data. It narrows the scope a lot. But it makes me confusing too. Since the scope is pretty narrow, we can do an analysis here: https://github.com/llvm/llvm-project/blob/a7a1195f01037e5019f671c96ef4bca9af9bb9a7/clang/lib/Serialization/MultiOnDiskHashTable.h#L145-L173

In `clang::serialization::MultiOnDiskHashTable::condense()`, only https://github.com/llvm/llvm-project/blob/a7a1195f01037e5019f671c96ef4bca9af9bb9a7/clang/lib/Serialization/MultiOnDiskHashTable.h#L160 and https://github.com/llvm/llvm-project/blob/a7a1195f01037e5019f671c96ef4bca9af9bb9a7/clang/lib/Serialization/MultiOnDiskHashTable.h#L163-L164 should be affected by this patch. Where the change in https://github.com/llvm/llvm-project/blob/a7a1195f01037e5019f671c96ef4bca9af9bb9a7/clang/lib/Serialization/MultiOnDiskHashTable.h#L160 should almost be constant since it reads the length.

And for https://github.com/llvm/llvm-project/blob/a7a1195f01037e5019f671c96ef4bca9af9bb9a7/clang/lib/Serialization/MultiOnDiskHashTable.h#L163-L164, its implementation is: https://github.com/llvm/llvm-project/blob/43bd7ae65af40ff3378d5a0395a058ba834ad8dd/clang/lib/Serialization/ASTReader.cpp#L1215-L1225

For `ASTReader::getGlobalDeclID()`, the implementation is https://github.com/llvm/llvm-project/blob/43bd7ae65af40ff3378d5a0395a058ba834ad8dd/clang/lib/Serialization/ASTReader.cpp#L7623-L7644, what is almost bit operation comparing to the previous state.

So it just looks like the reason is that we extend the DeclID from uint32_t to uint64_t and there are too many on-disk hash tables (not a blame). @alexfh could you try to profile on the statements level?

---

BTW, I feel we may read too many times in `MultiOnDiskHashTable `, maybe we can improve this.



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


More information about the cfe-commits mailing list