[PATCH] D110123: [Proof of concept] Serialize fewer transitive methods in `METHOD_POOL`.
Volodymyr Sapsai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 20 19:05:58 PDT 2021
vsapsai created this revision.
Herald added a subscriber: ributzka.
vsapsai requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
We are already making an effort to skip selectors that have methods only
from other modules. But in edge cases we keep all the methods which
leads to massive duplication. Try to cut down on the duplication in
ASTWriter and see if it helps with the synthetic test case.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D110123
Files:
clang/lib/Serialization/ASTWriter.cpp
Index: clang/lib/Serialization/ASTWriter.cpp
===================================================================
--- clang/lib/Serialization/ASTWriter.cpp
+++ clang/lib/Serialization/ASTWriter.cpp
@@ -3130,15 +3130,21 @@
if (Chain && ID < FirstSelectorID) {
// Selector already exists. Did it change?
bool changed = false;
- for (ObjCMethodList *M = &Data.Instance;
- !changed && M && M->getMethod(); M = M->getNext()) {
- if (!M->getMethod()->isFromASTFile())
+ for (ObjCMethodList *M = &Data.Instance; M && M->getMethod();
+ M = M->getNext()) {
+ if (!M->getMethod()->isFromASTFile()) {
changed = true;
+ Data.Instance = *M;
+ break;
+ }
}
- for (ObjCMethodList *M = &Data.Factory; !changed && M && M->getMethod();
+ for (ObjCMethodList *M = &Data.Factory; M && M->getMethod();
M = M->getNext()) {
- if (!M->getMethod()->isFromASTFile())
+ if (!M->getMethod()->isFromASTFile()) {
changed = true;
+ Data.Factory = *M;
+ break;
+ }
}
if (!changed)
continue;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110123.373767.patch
Type: text/x-patch
Size: 1211 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210921/c242f21a/attachment.bin>
More information about the cfe-commits
mailing list