jansvoboda11 wrote:

> > in my experience, it's not actually referenced in most modules
> 
> Can you clarify what you looked at here? I assume you checked non-scanner 
> modules as well?

I took a typical Xcode project and chose one TU that happens to transitively 
depend on 37 modules. I built it with implicit modules and scanned its 
dependencies while counting all `SourceManager` requests specifically asking 
for the predefines `SLocEntry`:

| workload       | cache | before | after | change [%] |
|----------------|-------|--------|-------|------------|
| implicit build | clean |   2077 |  1197 |      -42.4 |
| implicit build |  full |     84 |    19 |      -77.3 |
| scan           | clean |   1015 |   568 |      -44.0 |
| scan           |  full |     39 |    18 |      -53.8 |

So saying *most* was incorrect. The data suggests that importers don't care 
about the predefines of ~43% of their transitive dependencies. Note that this 
number is higher when the cache is full, where the percentage only represents 
requests issued from the main TU. So it makes sense that deserializing 
predefines `SLocEntry` on-demand is a performance win, especially since it 
shouldn't have any overhead compared to the preloading approach.

https://github.com/llvm/llvm-project/pull/66962
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to