<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61064>61064</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Modules] Increased build times across translation units
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
koplas
</td>
</tr>
</table>
<pre>
Given the following translation units:
```C++
export module a;
export namespace a {
int a_0() {return 0;}
int a_1() {return 0;}
int a_2() {return 0;}
...
int a_1000000() {return 0;}
}
```
```C++
export module b;
import a;
export namespace b {
int b() {
return 1;
}
}
```
```C++
export module c;
import b;
export namespace c {
int c() {
return b::b();
}
}
```
And running the following:
```Bash
echo "Building a.cppm"
time clang++ -std=c++20 --precompile a.cppm -o a.pcm
time clang++ -std=c++20 a.cppm -c -o a.o
echo "Building b.cppm"
time clang++ -std=c++20 -fprebuilt-module-path=. --precompile b.cppm -o b.pcm
time clang++ -std=c++20 -fprebuilt-module-path=. b.cppm -c -o b.o
echo "Building c.cppm"
time clang++ -std=c++20 -fprebuilt-module-path=. --precompile c.cppm -o c.pcm
time clang++ -std=c++20 -fprebuilt-module-path=. c.cppm -c -o c.o
```
Results in this output:
```
Building a.cppm
real 0m25,961s
user 0m24,515s
sys 0m1,337s
real 1m23,304s
user 1m20,309s
sys 0m2,856s
Building b.cppm
real 0m2,201s
user 0m1,978s
sys 0m0,220s
real 0m5,779s
user 0m5,373s
sys 0m0,400s
Building c.cppm
real 0m2,146s
user 0m1,957s
sys 0m0,187s
real 0m5,714s
user 0m5,317s
sys 0m0,389s
```
As expected the build times of a.cppm is high. However, even the build of c.cppm takes a lot of time.
Note that in the precompiling phase of b.cppm and c.cppm circa 200 ms is spent in `WriteAst`, despite not having many lines of code.
[build-times-test.zip](https://github.com/llvm/llvm-project/files/10853435/build-times-test.zip)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v4zYQ_TX0ZWCBGn364ENsw20P7aGXHguKGlvsUqQgUtlNf31BfTh27E02aCsISjTkPL43fhxROKfOhmjLsh3LDisx-Mb22y-208KtKlu_bH9Sz2TANwQnq7X9qswZfC-M08Ira2AwyjuWPDF-YHx55ny69wx34R6j9K2zvYfW1oMmECzZXefMo0a05DohCQSwYp4ByngQf3KGJcNNiPfkh94ADyDFYZ4FME-Mf3Qivj8xiqI7aD5e7-e9_rMU4uPqPKpRdamRasf4h0Wrroo2c65eub4OhGtmHl8w4V8JuKUu31KvPqIu76nLD6hXwXfJ06zw0zqeTA39YMxo6WuDv9p5SdsJ18y8ZWOBIe4GpeuQKSLZdS1DnMa9agmkFuY8FQfWztcsOcjpFTms111P0radCttgzIa1BRF1sv1RjCVNTpn2O9yqT3M7dT1Vg9J-Pf2Q6074hiWH6JZ2daFdfYb2O_DVtaLqu4rk_6VIXhTJ_0iRvFYkF0UPnfg7uUF7Byp0WuXADr4b_L0Np9e31rsC6knosEF4ixnD_SaP3TQwOOpDNGW4z-JsjroXB9P0mOE-SQr3CCxuMQnDPL0Gi1vkY3RzB4YM92WW34C99eTbdaYs5DeEL9Q2RXm3Slgdkd9T5m3QXhSbO6gQT4rkIVTK-WPC8r0qM9zHaf6Yc1ZcLTQtEpePSzxTjtPHlON7pKRc5D3ubQ7oW0fSUz32tmDRGoKfHdjT0j-Ug0admwh-tl_pmXqGe6Dlez-l2NNiZC--kAMB2voQDVjz5_E36wl8I_xkYILLvgr16xrhKGTMW1yYeoGUqpcCkHNoXSDjOjIjCMv5H73y9OR8EIZ7qMl1yhMY66ERzwG4FeYFtDKTJGnrhc_8zHajhPWoeu3J-ehv1bHswLBsvO_GYwseGR7PyjdDFUnbMjxq_bz8WXe9_YukZ3g8KU2O4THmZZakScbw-BAdN9Pqq3qb1JtkI1a0jfOiyHmZ58Wq2YpUFCLPRMILUdcZx6osUaYZVngi4rRSW-SYcMQyLjHFIhIiFZu0FrIqC1HknKWcWqF0FChGtj-vlHMDbfOY5-lKi4q0G090iIa-wjgYOmZ2WPXbUVY1nB1LuVbOu1cUr7wej4K_jp3MsewAvxjZk3BU3zhIyN46d38OXA293n66tCPBUNtRwD8BAAD__5OQBXo">