<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62202>62202</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Compiling attached file which uses boost::container::flat_set is very slow with clang & create large .text section
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DominiquePelle-TomTom
</td>
</tr>
</table>
<pre>
Compiling the attached file "brands.cpp" file (or its preprocessed
file "brands-preproc.cpp") which uses boost::container::flat_set is
very slow with clang (any version) when using boost-1.81.0.
It was much faster with boost-1.80.0 somehow and is much faster
with any version of gcc.
Furthermore, the size of the .text section is much bigger
when using boost-1.81.0 than with boost-1.80.0 and when
using clang (any version). The .text section is also much smaller
with any version of gcc.
The source file "brands.cpp" is a simplification of an actual file in my
project. Note that the code is in anonymous namespace (removing the
anonymous namespace makes the compilation time much faster,
presumably because there are more optimizations in the
anonymous namespace).
Attached file: brands.cpp.gz
[brands.cpp.gz](https://github.com/llvm/llvm-project/files/11259089/brands.cpp.gz)
Attached preprocessed source file (with boost-1.81):
[brands-preproc.cpp.gz](https://github.com/llvm/llvm-project/files/11259234/brands-preproc.cpp.gz)
Benchmarks with clang-16 + boost-1.81.0 (on Linux Ubuntu-22.04):
```
$ time clang++-16 -isystem boost-1.81 -O2 -std=c++14 -o brands.o -c brands.cpp
real 2m3.055s
user 2m2.411s
sys 0m0.632s
$ size brands.o
text data bss dec hex filename
2635353 20032 48 2655433 2884c9 brands.o
```
Compare with gcc-12.1:
```
$ time gcc-12 -isystem boost-1.81 -O2 -std=c++14 -o brands.o -c brands.cpp
real 0m2.582s
user 0m2.476s
sys 0m0.105s
$ size brands.o
text data bss dec hex filename
182851 15088 48 197987 30563 brands.o
```
In other words:
* compilation is 47.6 times slower with clang-16 than with gcc-12.1
* .text section is 14.1 times bigger with clang-16 than with gcc-12.1
It's even worse with older clang compilers. The table below shows
the compilation time of attached "brands.cpp" file and size of the .text
section with various compilers using boost-1.80 and boost-1.81:
```
compiler boost compilation time size .text section
-------- ----- ---------------- ------------------
clang-16 1.81 125.582 sec 2,635,353 bytes
clang-16 1.80 2.164 sec 101,280 bytes
clang-15 1.81 137.508 sec 2,861,332 bytes
clang-15 1.80 2.527 sec 107,944 bytes
clang-14 1.81 153.504 sec 3,033,487 bytes
clang-14 1.80 2.294 sec 111,599 bytes
clang-5.0 1.81 276.031 sec 2,720,187 bytes
clang-5.0 1.80 2.328 sec 126,811 bytes
gcc-12.1 1.81 2.821 sec 139,833 bytes
gcc-12.1 1.80 2.505 sec 140,217 bytes
gcc-11.3 1.81 2.128 sec 182,038 bytes
gcc-11.3 1.80 2.121 sec 182,158 bytes
gcc-7.5 1.81 1.943 sec 121,497 bytes
gcc-7.5 1.80 1.707 sec 122,050 bytes
```
Full versions of compiler used in above table (--version option):
- `Ubuntu clang version 16.0.2 (++20230414073413+b5aa566a7e53-1~exp1~20230414073428.73)`
- `Ubuntu clang version 15.0.7`
- `Ubuntu clang version 14.0.0-1ubuntu1`
- `clang version 5.0.2 (tags/RELEASE_502/final)`
- `gcc-12 (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0`
- `gcc-11 (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0`
- `gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0`
I also reported this issue for boost since there is a large
compilation time & .text section regression from boost-1.80
to boost-1.81. See:
https://marc.info/?l=boost-users&m=168173836211082&w=2
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0WEuP47gR_jX0pSCCLIp6HHzoxzSwwCIJspPzgpLZtrKS6JBU9_Qc5rcHFCW3JLs3PUFiDFpjmvXVVw9WFaWca4691nsi74l83KnBn4zdP5qu6Zt_Dfpvum118tV0X023q8zhbf9gunPTNv0R_EmD8l7VJ32A56bVQBArq_qDo_X5TBDn1cJYaLyDs9Vna2rtnD4Q9kjY3VosmTZM4gRLeD019QkGpx1UxjhPxB0Rd7XpvWp6bePX51b535320LgI-6LtG7jWvMJr409Qt6o_Bh6qf4MXbV1j-giuexhcMGYETzgtOGU0gvzi4VU56Ib6BM_KeW0j2mUrowyc6fTJvILqD9CsNkeQUWKhFswzHOt6UhH_Pg3Wn7TtjNUEH0a_uua7DlvD_6nX3zw4XfsgPyupmuPxouS2HeBPqr_BOXANIlE4yn3gIgpfbzFQrTORhutU2_6MsQHPmcHW-oOcCfDgmu7cNs9NrfyEo3pQtR9UG8WaHrq3iHi25p-69hT-YrwONvvRbbU56ADW9KB60791ZnDQq067s6rHrLS6My9TJkeoWxs79Yd2E2JI_cjIN51eRRsfZjbaDZ2q2jeodK0GFyhpq0FZDSHEYM6-6ZrvI85I78_Uhxgs3Xe3PHBE3MG78-jx-7RT3q9X5SPB4uT92YXzgk8En46NPw0VrU1H8KltX-ZHMnmT4FPQ4Ag-cY6yZEVJ8GkNi-VNZstTvgl1sU5GHiDE3Yb1sgr8j9ijSC_st_BrK-51X586Zf9wi9KR8AwI3q8PVyhrPfza9MM3-Ec19H5IEClLVzZlbPoXv2IaE2dEJXhP8D5gJ417c153CwWQ_BUhcf5AxGMdd_IUEjPH20BSL2K_NMFq1QIAYCcok9LNx1zbuIo05XxadW8OWMdoJtAtMQLTsQbN6uIyAIylAAAOyqvwhMq58XnQ9fg86W9juEMKRynMhBRSBOWMCRx3QVoAZlKmQgBgUaR1udG19d34N3SfcJDG2BzrOuFI-X90d9z4_3Az65DKAjc-Dqtpni18HFcZ5Ux-ys__hZeBF1hIDgBcsqK4eJmXeVnkACCYzMRnnPxLDybULHg19uDevYt3qxLYOEhzmo0udmO3nTvk5dC8N6BLrC5QV02Fp5RPYLG5fRZs6tYEcwf6RfeBt5tyxLQHbafuFslr62JX86pqNVQ6jAnuZF6nwNys9KEBzfXt9pQTmupV154SYLJxJPSibBMq_IXMtnHH_ryokRf_34rYDBNSJIhcUweIvFb-jsLJ9AGA1XPxuVpIkknxHBaA8SDNH44ynIigaFpBgg-ZkAQfQhGo3rx2tyAYvH-Q8ixdQABwxgk-YMGWACsYecVE5FSyYsOkyAKQEHiDibzFRGK-YZITfCjT9EMm6RUTKahkS4MEwQcmwt-0yG8wSW8xwXLjEx5MkWX5ERNJ2YYJ5hllgm98kiMj-MBvMZkh1kwEFmsmmAXXcn7NZD6rW58EmAL5GkaUAUassmQNsIkNk2uANBiCPP-AB6fiFg--NafAMT7FFY8LwCZbt4aMAFwWt3nkVMI1D07LVGzcGgKclvmWxzsAWwHkbJOrOBoi16fmVs1_Gtp2HttdqGGXwjKEMS4M0ZV5mYsmwSJJLkP-2cfLwqZSJUAyFiejqQDPEjyjjGJAiS0XGQqW8pTlIuWC4H0llZJZpnItRcJ_6G9n_mO5CQuai6BxNuJPdEnKaP6ZjSlllCV8GH_ka4n1VjnT9-oYZsy_f_n1y91vX36XDMfJs1ftFblpBiFYTNpDTlOW4KTvxzw8Tj_ckOZLaU7Fgu1CevzhWjpfCOdUUpZkUXa8Zo8r2zEgXvOsPhvr9QH8KdymnBs0PBs7tRvX9PV8wxlvbq2yR73sTYtWRDDbtH2rj1a70anP1iwms4mJN8uhG37T-pJk6xtBp2xNm_7ZhK_iqSXiMQqGmcwRzDoiHnlW8FwUIkPOWTii2SsRjxjxdoe9OJSiVDu9DxsLlqIsdqd9WqlSHQ7PJSrFq1Lkdc2lOqhKcs2rPN01-yk3C5ZLJguKRZpXqmCZKrHWmSIp051qWhruKNTY42504z5DZLhrVaVbN76BQez1a_QxQSTycWf3472mGo6OpKxtnHfvKL7xrV68kVm_jfnZVyfwwVuTDGqrldcxtOsA7gbb7n_6bjYaGA7O6IB_BwAA__97_VvJ">