rmaz added a comment.

In D109632#3000469 <https://reviews.llvm.org/D109632#3000469>, @vsapsai wrote:

> I'm a little bit confused here. Where is the speed-up coming from? Is it 
> because ObjCMethodList for `init` not being serialized? I'm asking because 
> right now I don't see how `seen` helps with that.
>
> My current understanding is that `Sema::addMethodToGlobalList` is too 
> expensive and `seen` reduces the number of calls to it. So maybe it makes 
> sense to invest into making it faster? For example, 
> `Sema::MatchTwoMethodDeclarations` can return early if both method decl 
> pointers are equal. But I haven't done any measurements, that's just an 
> example.

The speedup is coming from reducing the number of times 
`Sema::addMethodToGlobalList` is called when looking up methods loaded from 
modules. From what I can see each serialized module will contain an 
ObjCMethodList with all the methods from all visible modules at the point of 
serialization. This means that if you have a lot of modules that redeclare 
`-(id)init`, which is a common pattern in our code, then each serialized module 
will contain a lot of shared method decls, which we do not de-duplicate. To 
illustrate this, here are the top 5 instance method counts sorted by amount of 
duplicates (using pointer comparison) from a pass of the 
`ReadMethodPoolVisitor` for a single file:

| **selector** | **# methods** | **# unique** | **# duplicated** |
| init         | 9825          | 1652         | 8173             |
| init         | 2155          | 930          | 1225             |
| copy         | 1398          | 633          | 765              |
| init         | 1027          | 270          | 757              |
| init         | 948           | 410          | 538              |
|

Without having a set to deduplicate I'm not sure how we could make 
`Sema::addMethodToGlobalList` fast enough, wouldn't it require a list traversal 
for each insert, making it O(n^2)?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109632/new/

https://reviews.llvm.org/D109632

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to