[PATCH] D109632: [clang] de-duplicate methods from AST files

Richard Howell via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 28 11:15:15 PDT 2021


rmaz added a comment.

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

> That patch looks correct, I was experimenting with exactly the same local change. Have you tried D110123 <https://reviews.llvm.org/D110123> on your original build? In my testing with synthetic test case it looks as good as set deduplication.

I am getting some pretty unexpected results from this approach. For the files I could get to complete below are the compilation times for each approach for the 10 slowest (in the baseline) files:

| **file**   | **baseline** | **set deduplication** | **no external methods in pcm** |
| Total      | 95.57        | 75.30                 | 306.46                         |
| IGSFCVC.m  | 4.57         | 1.53                  | 13.71                          |
| IGVFVC.mm  | 4.19         | 1.61                  | 27.93                          |
| IGMFAHC.mm | 4.00         | 1.93                  | 9.94                           |
| IGMFLCVC.m | 3.89         | 1.55                  | 12.30                          |
| PLRFPPC.mm | 3.19         | 3.26                  | 3.99                           |
| IGBFPVC.m  | 3.18         | 1.11                  | 28.92                          |
| IGBVC.m    | 2.37         | 0.98                  | 17.42                          |
| PLRRM.mm   | 1.99         | 1.99                  | 2.31                           |
| IGBSPSC.m  | 1.88         | 0.85                  | 14.38                          |
|

All of the most interesting files were left out of these results as I could not get compilation to complete for the no external methods approach.

> I still think it is worth to pursue writing only owned methods in `METHOD_POOL`. Deduplication with a DenseSet works but I still expect it to be more expensive than avoiding duplicates by construction. As for the next step I was thinking about changing `ASTMethodPoolTrait` to skip transitive methods during serialization and it should help with eliminating all the duplicates. With that change we can test and see how it works.

I will take a go at this approach to eliminate all external methods and compare to see if this exhibits similar behaviour.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D109632



More information about the cfe-commits mailing list