<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/libcxx/include/map, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/'/>
<entry>
<title>[libc++] Optimize __tree copy/move constructor/assignment with allocator (#163558)</title>
<updated>2025-11-12T14:53:37+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-11-12T14:53:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=aca28f10da54526a7955f62f090273b588888b6d'/>
<id>aca28f10da54526a7955f62f090273b588888b6d</id>
<content type='text'>
This patch applies the same optimization as implemented in #151304 to
the overloads taking an allocator as the second argument.

Apple M4:
```
Benchmark                                                               old             new    Difference    % Difference
-----------------------------------------------------------  --------------  --------------  ------------  --------------
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/0                      14.59           12.78         -1.81         -12.41%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/1024                16407.05         6265.11     -10141.94         -61.81%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/32                    395.99          199.76       -196.23         -49.56%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/8192               141478.67        53767.84     -87710.83         -62.00%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/0                             12.83           12.71         -0.12          -0.94%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/1024                        9979.71         7849.11      -2130.59         -21.35%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/32                           283.82          266.05        -17.77          -6.26%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/8192                       81418.63        63190.41     -18228.21         -22.39%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/0              14.58           12.68         -1.90         -13.00%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/1024        19513.56         7806.04     -11707.52         -60.00%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/32            477.80          247.28       -230.52         -48.25%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/8192       504558.78        69592.21    -434966.56         -86.21%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/0                     12.64           12.60         -0.04          -0.33%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/1024               43198.53        37220.54      -5977.99         -13.84%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/32                   928.39          867.03        -61.36          -6.61%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/8192              461313.81       389200.82     -72112.99         -15.63%
```</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch applies the same optimization as implemented in #151304 to
the overloads taking an allocator as the second argument.

Apple M4:
```
Benchmark                                                               old             new    Difference    % Difference
-----------------------------------------------------------  --------------  --------------  ------------  --------------
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/0                      14.59           12.78         -1.81         -12.41%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/1024                16407.05         6265.11     -10141.94         -61.81%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/32                    395.99          199.76       -196.23         -49.56%
std::map&lt;int,_int&gt;::ctor(&amp;&amp;,_different_allocs)/8192               141478.67        53767.84     -87710.83         -62.00%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/0                             12.83           12.71         -0.12          -0.94%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/1024                        9979.71         7849.11      -2130.59         -21.35%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/32                           283.82          266.05        -17.77          -6.26%
std::map&lt;int,_int&gt;::ctor(const&amp;,_alloc)/8192                       81418.63        63190.41     -18228.21         -22.39%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/0              14.58           12.68         -1.90         -13.00%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/1024        19513.56         7806.04     -11707.52         -60.00%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/32            477.80          247.28       -230.52         -48.25%
std::map&lt;std::string,_int&gt;::ctor(&amp;&amp;,_different_allocs)/8192       504558.78        69592.21    -434966.56         -86.21%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/0                     12.64           12.60         -0.04          -0.33%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/1024               43198.53        37220.54      -5977.99         -13.84%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/32                   928.39          867.03        -61.36          -6.61%
std::map&lt;std::string,_int&gt;::ctor(const&amp;,_alloc)/8192              461313.81       389200.82     -72112.99         -15.63%
```</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++] Remove a few unused includes (#165687)</title>
<updated>2025-11-02T09:27:56+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-11-02T09:27:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=f46ac9234f1c98b6b1f63672ff6ff363874c7f51'/>
<id>f46ac9234f1c98b6b1f63672ff6ff363874c7f51</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++] Optimize {set,map}::{lower,upper}_bound (#161366)</title>
<updated>2025-10-09T06:45:03+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-10-09T06:45:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=45f224d3f0c374c3e381c3f9fe19b087ee9b6eb8'/>
<id>45f224d3f0c374c3e381c3f9fe19b087ee9b6eb8</id>
<content type='text'>
Apple M4:
```
Benchmark                                                                                        Baseline    Candidate    Difference    % Difference
---------------------------------------------------------------------------------------------  ----------  -----------  ------------  --------------
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/0                                                    0.01         0.01         -0.00          -25.78
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/1024                                                 7.94         4.28         -3.66          -46.09
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/32                                                   2.73         1.69         -1.03          -37.89
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/8192                                                11.63         5.52         -6.11          -52.55
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/0                                                0.28         0.28         -0.00           -1.35
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/1024                                            17.21         7.63         -9.58          -55.67
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/32                                               4.71         3.26         -1.45          -30.71
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/8192                                            26.82        10.58        -16.24          -60.55
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/0                                                    0.01         0.01          0.00           20.62
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/1024                                                 7.93         3.61         -4.32          -54.49
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/32                                                   2.83         1.98         -0.85          -30.01
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/8192                                                11.69         5.72         -5.97          -51.06
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/0                                                0.28         0.28         -0.00           -1.36
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/1024                                            17.21         8.00         -9.21          -53.53
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/32                                               4.70         2.93         -1.78          -37.76
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/8192                                            26.54        11.18        -15.36          -57.89
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/0                                            0.04         0.04         -0.00           -3.26
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/1024                                        27.46        26.25         -1.22           -4.43
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/32                                          19.17        15.71         -3.46          -18.07
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/8192                                        35.33        35.03         -0.30           -0.84
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/0                                        0.27         0.27         -0.00           -1.45
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/1024                                    24.88        24.17         -0.70           -2.83
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/32                                      11.67        11.63         -0.04           -0.32
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/8192                                    31.81        32.33          0.52            1.64
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/0                                            0.04         0.04         -0.00           -2.22
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/1024                                        29.91        26.51         -3.40          -11.38
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/32                                          19.69        17.74         -1.95           -9.92
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/8192                                        32.55        35.24          2.69            8.25
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/0                                        0.27         0.27         -0.00           -1.74
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/1024                                    23.87        26.77          2.91           12.18
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/32                                      11.44        11.81          0.37            3.24
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/8192                                    33.02        32.59         -0.43           -1.29
std::set&lt;int&gt;::lower_bound(key)_(existent)/0                                                         0.01         0.01          0.00            0.48
std::set&lt;int&gt;::lower_bound(key)_(existent)/1024                                                      7.83         4.21         -3.62          -46.23
std::set&lt;int&gt;::lower_bound(key)_(existent)/32                                                        2.74         1.68         -1.06          -38.81
std::set&lt;int&gt;::lower_bound(key)_(existent)/8192                                                     22.75        11.12        -11.63          -51.12
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/0                                                     0.28         0.27         -0.01           -3.52
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/1024                                                 17.15         8.40         -8.75          -51.03
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/32                                                    4.63         2.50         -2.13          -46.03
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/8192                                                 28.88        11.05        -17.82          -61.72
std::set&lt;int&gt;::upper_bound(key)_(existent)/0                                                         0.01         0.01         -0.00           -7.79
std::set&lt;int&gt;::upper_bound(key)_(existent)/1024                                                      7.80         3.63         -4.16          -53.42
std::set&lt;int&gt;::upper_bound(key)_(existent)/32                                                        2.81         1.90         -0.91          -32.44
std::set&lt;int&gt;::upper_bound(key)_(existent)/8192                                                     21.93        11.35        -10.58          -48.26
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/0                                                     0.28         0.27         -0.01           -3.81
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/1024                                                 16.76         7.38         -9.38          -55.98
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/32                                                    4.58         3.10         -1.48          -32.31
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/8192                                                 26.95        10.70        -16.25          -60.29
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/0                                                 0.04         0.04          0.00            0.02
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/1024                                             28.08        27.04         -1.04           -3.71
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/32                                               17.53        16.94         -0.58           -3.34
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/8192                                             32.79        33.28          0.49            1.49
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/0                                             0.28         0.28         -0.00           -0.06
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/1024                                         25.23        24.38         -0.85           -3.38
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/32                                           11.45        11.68          0.24            2.07
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/8192                                         32.30        36.80          4.50           13.95
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/0                                                 0.04         0.04         -0.00           -0.14
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/1024                                             26.71        26.37         -0.34           -1.27
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/32                                               20.07        19.06         -1.02           -5.06
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/8192                                             36.69        35.50         -1.19           -3.25
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/0                                             0.28         0.28         -0.00           -0.16
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/1024                                         24.48        24.90          0.42            1.73
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/32                                           11.68        11.77          0.09            0.77
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/8192                                         33.16        34.12          0.96            2.89
```</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Apple M4:
```
Benchmark                                                                                        Baseline    Candidate    Difference    % Difference
---------------------------------------------------------------------------------------------  ----------  -----------  ------------  --------------
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/0                                                    0.01         0.01         -0.00          -25.78
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/1024                                                 7.94         4.28         -3.66          -46.09
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/32                                                   2.73         1.69         -1.03          -37.89
std::map&lt;int,_int&gt;::lower_bound(key)_(existent)/8192                                                11.63         5.52         -6.11          -52.55
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/0                                                0.28         0.28         -0.00           -1.35
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/1024                                            17.21         7.63         -9.58          -55.67
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/32                                               4.71         3.26         -1.45          -30.71
std::map&lt;int,_int&gt;::lower_bound(key)_(non-existent)/8192                                            26.82        10.58        -16.24          -60.55
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/0                                                    0.01         0.01          0.00           20.62
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/1024                                                 7.93         3.61         -4.32          -54.49
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/32                                                   2.83         1.98         -0.85          -30.01
std::map&lt;int,_int&gt;::upper_bound(key)_(existent)/8192                                                11.69         5.72         -5.97          -51.06
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/0                                                0.28         0.28         -0.00           -1.36
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/1024                                            17.21         8.00         -9.21          -53.53
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/32                                               4.70         2.93         -1.78          -37.76
std::map&lt;int,_int&gt;::upper_bound(key)_(non-existent)/8192                                            26.54        11.18        -15.36          -57.89
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/0                                            0.04         0.04         -0.00           -3.26
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/1024                                        27.46        26.25         -1.22           -4.43
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/32                                          19.17        15.71         -3.46          -18.07
std::map&lt;std::string,_int&gt;::lower_bound(key)_(existent)/8192                                        35.33        35.03         -0.30           -0.84
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/0                                        0.27         0.27         -0.00           -1.45
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/1024                                    24.88        24.17         -0.70           -2.83
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/32                                      11.67        11.63         -0.04           -0.32
std::map&lt;std::string,_int&gt;::lower_bound(key)_(non-existent)/8192                                    31.81        32.33          0.52            1.64
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/0                                            0.04         0.04         -0.00           -2.22
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/1024                                        29.91        26.51         -3.40          -11.38
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/32                                          19.69        17.74         -1.95           -9.92
std::map&lt;std::string,_int&gt;::upper_bound(key)_(existent)/8192                                        32.55        35.24          2.69            8.25
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/0                                        0.27         0.27         -0.00           -1.74
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/1024                                    23.87        26.77          2.91           12.18
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/32                                      11.44        11.81          0.37            3.24
std::map&lt;std::string,_int&gt;::upper_bound(key)_(non-existent)/8192                                    33.02        32.59         -0.43           -1.29
std::set&lt;int&gt;::lower_bound(key)_(existent)/0                                                         0.01         0.01          0.00            0.48
std::set&lt;int&gt;::lower_bound(key)_(existent)/1024                                                      7.83         4.21         -3.62          -46.23
std::set&lt;int&gt;::lower_bound(key)_(existent)/32                                                        2.74         1.68         -1.06          -38.81
std::set&lt;int&gt;::lower_bound(key)_(existent)/8192                                                     22.75        11.12        -11.63          -51.12
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/0                                                     0.28         0.27         -0.01           -3.52
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/1024                                                 17.15         8.40         -8.75          -51.03
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/32                                                    4.63         2.50         -2.13          -46.03
std::set&lt;int&gt;::lower_bound(key)_(non-existent)/8192                                                 28.88        11.05        -17.82          -61.72
std::set&lt;int&gt;::upper_bound(key)_(existent)/0                                                         0.01         0.01         -0.00           -7.79
std::set&lt;int&gt;::upper_bound(key)_(existent)/1024                                                      7.80         3.63         -4.16          -53.42
std::set&lt;int&gt;::upper_bound(key)_(existent)/32                                                        2.81         1.90         -0.91          -32.44
std::set&lt;int&gt;::upper_bound(key)_(existent)/8192                                                     21.93        11.35        -10.58          -48.26
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/0                                                     0.28         0.27         -0.01           -3.81
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/1024                                                 16.76         7.38         -9.38          -55.98
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/32                                                    4.58         3.10         -1.48          -32.31
std::set&lt;int&gt;::upper_bound(key)_(non-existent)/8192                                                 26.95        10.70        -16.25          -60.29
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/0                                                 0.04         0.04          0.00            0.02
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/1024                                             28.08        27.04         -1.04           -3.71
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/32                                               17.53        16.94         -0.58           -3.34
std::set&lt;std::string&gt;::lower_bound(key)_(existent)/8192                                             32.79        33.28          0.49            1.49
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/0                                             0.28         0.28         -0.00           -0.06
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/1024                                         25.23        24.38         -0.85           -3.38
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/32                                           11.45        11.68          0.24            2.07
std::set&lt;std::string&gt;::lower_bound(key)_(non-existent)/8192                                         32.30        36.80          4.50           13.95
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/0                                                 0.04         0.04         -0.00           -0.14
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/1024                                             26.71        26.37         -0.34           -1.27
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/32                                               20.07        19.06         -1.02           -5.06
std::set&lt;std::string&gt;::upper_bound(key)_(existent)/8192                                             36.69        35.50         -1.19           -3.25
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/0                                             0.28         0.28         -0.00           -0.16
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/1024                                         24.48        24.90          0.42            1.73
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/32                                           11.68        11.77          0.09            0.77
std::set&lt;std::string&gt;::upper_bound(key)_(non-existent)/8192                                         33.16        34.12          0.96            2.89
```</pre>
</div>
</content>
</entry>
<entry>
<title>Reapply "[libc++] Avoid constructing additional objects when using map::at" (#160738) (#161485)</title>
<updated>2025-10-02T09:15:33+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-10-02T09:15:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=55803b8af1e4ddde1c0c43a9cd283133205c295d'/>
<id>55803b8af1e4ddde1c0c43a9cd283133205c295d</id>
<content type='text'>
This reverts commit b86aaacf28b358b187071bc87075f1faa2d65c4e.

The issue in LLVM has been fixed now.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit b86aaacf28b358b187071bc87075f1faa2d65c4e.

The issue in LLVM has been fixed now.</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "[libc++] Avoid constructing additional objects when using map::at" (#160738)</title>
<updated>2025-09-25T22:10:37+00:00</updated>
<author>
<name>Andrew Lazarev</name>
<email>alazarev@google.com</email>
</author>
<published>2025-09-25T22:10:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=b86aaacf28b358b187071bc87075f1faa2d65c4e'/>
<id>b86aaacf28b358b187071bc87075f1faa2d65c4e</id>
<content type='text'>
Reverts llvm/llvm-project#157866

It breaks a lot of sanitizer buildbots</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Reverts llvm/llvm-project#157866

It breaks a lot of sanitizer buildbots</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++] Avoid constructing additional objects when using map::at (#157866)</title>
<updated>2025-09-25T09:35:41+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-09-25T09:35:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=833d5f0cd8bec8de84cdbefc49c4ef4566a5b356'/>
<id>833d5f0cd8bec8de84cdbefc49c4ef4566a5b356</id>
<content type='text'>
This patch adds additional overloads to `map::at` in case its known that
the argument is transparently comparable to the key type. This avoids
actually constructing the key type in some cases, potentially removing
allocations.

```
--------------------------------------------------------
Benchmark                            old             new
--------------------------------------------------------
BM_map_find_string_literal       12.8 ns         2.68 ns
```</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch adds additional overloads to `map::at` in case its known that
the argument is transparently comparable to the key type. This avoids
actually constructing the key type in some cases, potentially removing
allocations.

```
--------------------------------------------------------
Benchmark                            old             new
--------------------------------------------------------
BM_map_find_string_literal       12.8 ns         2.68 ns
```</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++][NFC] Refactor __is_allocator to be a variable template (#159584)</title>
<updated>2025-09-24T08:41:29+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-09-24T08:41:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8cb03a05ff18834cc452277718fecd2e87b623f0'/>
<id>8cb03a05ff18834cc452277718fecd2e87b623f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++][NFC] Reformat some deduction guides (#160085)</title>
<updated>2025-09-22T13:23:20+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-09-22T13:23:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=e40bbbae6cfa5113fdb1ea71cc6c75fd1d2a7884'/>
<id>e40bbbae6cfa5113fdb1ea71cc6c75fd1d2a7884</id>
<content type='text'>
They're not formatted correctly anymore, since clang-format was updated.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
They're not formatted correctly anymore, since clang-format was updated.</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++] Introduce _LIBCPP_COMPRESSED_ELEMENT (#134253)</title>
<updated>2025-09-18T12:31:18+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-09-18T12:31:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=868aa5f19cd71e3ff6dfce021f1bd68b4c8248e8'/>
<id>868aa5f19cd71e3ff6dfce021f1bd68b4c8248e8</id>
<content type='text'>
We have multiple classes with an empty base optimization that contains
just a single type. This patch introduces `_LIBCPP_COMPRESSED_ELEMENT`
to refactor these classes to avoid having them essentially twice,
reducing the amount of code significantly.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We have multiple classes with an empty base optimization that contains
just a single type. This patch introduces `_LIBCPP_COMPRESSED_ELEMENT`
to refactor these classes to avoid having them essentially twice,
reducing the amount of code significantly.</pre>
</div>
</content>
</entry>
<entry>
<title>[libc++] Optimize most of the __tree search algorithms (#155245)</title>
<updated>2025-09-08T07:56:14+00:00</updated>
<author>
<name>Nikolas Klauser</name>
<email>nikolasklauser@berlin.de</email>
</author>
<published>2025-09-08T07:56:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1d131ffff830c2fb6d953c6ae0b9b94003277a33'/>
<id>1d131ffff830c2fb6d953c6ae0b9b94003277a33</id>
<content type='text'>
This patch introduces a new comparator, namely `__lazy_synth_three_way`,
which tries to provide an efficient three way comparator for known types
and falls back to using the provided comparator if it doesn't know how
to do that. Currently, an efficient three way comparison is only
provided when using one of the `less` comparions object from the
standard library and `std::string`. This will be extended in future
patches.

```
------------------------------------------------------------------------------------------------------------------------------
Benchmark                                                                                                  old             new
------------------------------------------------------------------------------------------------------------------------------
std::map&lt;std::string, int&gt;::ctor(const&amp;)/0                                                             12.6 ns         12.6 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/32                                                             858 ns          837 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/1024                                                         46700 ns        46739 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/8192                                                        458100 ns       449806 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/0                             12.8 ns         12.7 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/32                            1286 ns         1266 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/1024                         93812 ns        84686 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/8192                       1480346 ns      1385924 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/0                               12.9 ns         12.8 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/32                              1044 ns         1055 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/1024                           63071 ns        62861 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/8192                          595046 ns       590223 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/0                               13.6 ns         13.6 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/32                               880 ns          911 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/1024                           48627 ns        47808 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/8192                          458552 ns       454497 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/0                   13.8 ns         13.6 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/32                   864 ns          851 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/1024               49483 ns        49555 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/8192              456977 ns       457894 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/0                             1.31 ns         1.31 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/32                             425 ns          415 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/1024                         14248 ns        14225 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/8192                        136684 ns       133696 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/0                                          21.5 ns         16.2 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/32                                         22.7 ns         25.1 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/1024                                       54.5 ns         29.1 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/8192                                       78.4 ns         30.4 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/0                                                40.9 ns         39.0 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/32                                               58.3 ns         47.2 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/1024                                              120 ns         71.3 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/8192                                              157 ns          129 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/0                                          40.3 ns         40.7 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/32                                         48.0 ns         30.0 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/1024                                        107 ns         63.2 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/8192                                        132 ns          107 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/0                                           27.0 ns         40.9 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/32                                          68.3 ns         58.4 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/1024                                         125 ns         82.0 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/8192                                         155 ns          150 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/0                                 404 ns          405 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/32                               2004 ns         1805 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/1024                           102820 ns        76102 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/8192                          1144590 ns       949266 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/0                                408 ns          404 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/32                              1592 ns         1377 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/1024                           74847 ns        53921 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/8192                          828505 ns       698716 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/0              407 ns          407 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/32            1584 ns         1557 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/1024         47157 ns        47443 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/8192        623887 ns       628385 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/0               405 ns          403 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/32             1478 ns         1510 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/1024          47852 ns        47835 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/8192         605311 ns       606951 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/0                                                     129 ns         94.0 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/32                                                    110 ns          106 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/1024                                                  121 ns          128 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/8192                                                  165 ns         66.9 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/0                                               0.269 ns        0.257 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/32                                               21.9 ns         11.3 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/1024                                             53.5 ns         25.4 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/8192                                             67.3 ns         31.9 ns
std::map&lt;std::string, int&gt;::erase(iterator)/0                                                          46.3 ns         46.7 ns
std::map&lt;std::string, int&gt;::erase(iterator)/32                                                         44.4 ns         41.8 ns
std::map&lt;std::string, int&gt;::erase(iterator)/1024                                                       43.7 ns         46.4 ns
std::map&lt;std::string, int&gt;::erase(iterator)/8192                                                       45.2 ns         44.1 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/0                      407 ns          407 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/32                     876 ns          906 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/1024                 20880 ns        20444 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/8192                252881 ns       241583 ns
std::map&lt;std::string, int&gt;::clear()/0                                                                   407 ns          408 ns
std::map&lt;std::string, int&gt;::clear()/32                                                                 1252 ns         1323 ns
std::map&lt;std::string, int&gt;::clear()/1024                                                              38488 ns        38017 ns
std::map&lt;std::string, int&gt;::clear()/8192                                                             416492 ns       428534 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/0                                                    0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/32                                                    33.9 ns         15.3 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/1024                                                  43.0 ns         25.5 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/8192                                                  44.6 ns         29.3 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/0                                                0.259 ns        0.257 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/32                                                22.6 ns         11.4 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/1024                                              48.6 ns         25.1 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/8192                                              64.1 ns         31.1 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/0                                                   0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/32                                                   32.2 ns         17.3 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/1024                                                 42.4 ns         25.3 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/8192                                                 44.4 ns         31.6 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/0                                               0.260 ns        0.259 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/32                                               22.9 ns         11.3 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/1024                                             49.8 ns         25.5 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/8192                                             66.3 ns         31.9 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/0                                                0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/32                                                31.4 ns         18.0 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/1024                                              44.3 ns         26.5 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/8192                                              47.4 ns         30.2 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/0                                            0.452 ns        0.441 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/32                                            23.1 ns         11.5 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/1024                                          46.2 ns         26.3 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/8192                                          63.4 ns         31.4 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/32                                             17.2 ns         19.0 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/1024                                           27.1 ns         26.2 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/8192                                           34.0 ns         36.0 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/0                                         0.259 ns        0.257 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/32                                         11.6 ns         11.5 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/1024                                       24.8 ns         25.6 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/8192                                       31.7 ns         31.6 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/32                                             18.8 ns         19.7 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/1024                                           25.3 ns         27.7 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/8192                                           30.2 ns         29.9 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/0                                         0.260 ns        0.259 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/32                                         11.3 ns         12.0 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/1024                                       25.6 ns         25.9 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/8192                                       33.1 ns         34.2 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/32                                             33.5 ns         15.8 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/1024                                           43.0 ns         25.1 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/8192                                           54.1 ns         30.7 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/0                                         0.265 ns        0.259 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/32                                         22.1 ns         12.1 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/1024                                       44.8 ns         24.4 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/8192                                       62.2 ns         40.1 ns
```

Fixes #66577</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch introduces a new comparator, namely `__lazy_synth_three_way`,
which tries to provide an efficient three way comparator for known types
and falls back to using the provided comparator if it doesn't know how
to do that. Currently, an efficient three way comparison is only
provided when using one of the `less` comparions object from the
standard library and `std::string`. This will be extended in future
patches.

```
------------------------------------------------------------------------------------------------------------------------------
Benchmark                                                                                                  old             new
------------------------------------------------------------------------------------------------------------------------------
std::map&lt;std::string, int&gt;::ctor(const&amp;)/0                                                             12.6 ns         12.6 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/32                                                             858 ns          837 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/1024                                                         46700 ns        46739 ns
std::map&lt;std::string, int&gt;::ctor(const&amp;)/8192                                                        458100 ns       449806 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/0                             12.8 ns         12.7 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/32                            1286 ns         1266 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/1024                         93812 ns        84686 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (unsorted sequence)/8192                       1480346 ns      1385924 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/0                               12.9 ns         12.8 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/32                              1044 ns         1055 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/1024                           63071 ns        62861 ns
std::map&lt;std::string, int&gt;::ctor(iterator, iterator) (sorted sequence)/8192                          595046 ns       590223 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/0                               13.6 ns         13.6 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/32                               880 ns          911 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/1024                           48627 ns        47808 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into cleared Container)/8192                          458552 ns       454497 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/0                   13.8 ns         13.6 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/32                   864 ns          851 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/1024               49483 ns        49555 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into partially populated Container)/8192              456977 ns       457894 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/0                             1.31 ns         1.31 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/32                             425 ns          415 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/1024                         14248 ns        14225 ns
std::map&lt;std::string, int&gt;::operator=(const&amp;) (into populated Container)/8192                        136684 ns       133696 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/0                                          21.5 ns         16.2 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/32                                         22.7 ns         25.1 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/1024                                       54.5 ns         29.1 ns
std::map&lt;std::string, int&gt;::insert(value) (already present)/8192                                       78.4 ns         30.4 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/0                                                40.9 ns         39.0 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/32                                               58.3 ns         47.2 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/1024                                              120 ns         71.3 ns
std::map&lt;std::string, int&gt;::insert(value) (new value)/8192                                              157 ns          129 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/0                                          40.3 ns         40.7 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/32                                         48.0 ns         30.0 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/1024                                        107 ns         63.2 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (good hint)/8192                                        132 ns          107 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/0                                           27.0 ns         40.9 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/32                                          68.3 ns         58.4 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/1024                                         125 ns         82.0 ns
std::map&lt;std::string, int&gt;::insert(hint, value) (bad hint)/8192                                         155 ns          150 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/0                                 404 ns          405 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/32                               2004 ns         1805 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/1024                           102820 ns        76102 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (all new keys)/8192                          1144590 ns       949266 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/0                                408 ns          404 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/32                              1592 ns         1377 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/1024                           74847 ns        53921 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (half new keys)/8192                          828505 ns       698716 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/0              407 ns          407 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/32            1584 ns         1557 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/1024         47157 ns        47443 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from same type)/8192        623887 ns       628385 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/0               405 ns          403 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/32             1478 ns         1510 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/1024          47852 ns        47835 ns
std::map&lt;std::string, int&gt;::insert(iterator, iterator) (product_iterator from zip_view)/8192         605311 ns       606951 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/0                                                     129 ns         94.0 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/32                                                    110 ns          106 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/1024                                                  121 ns          128 ns
std::map&lt;std::string, int&gt;::erase(key) (existent)/8192                                                  165 ns         66.9 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/0                                               0.269 ns        0.257 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/32                                               21.9 ns         11.3 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/1024                                             53.5 ns         25.4 ns
std::map&lt;std::string, int&gt;::erase(key) (non-existent)/8192                                             67.3 ns         31.9 ns
std::map&lt;std::string, int&gt;::erase(iterator)/0                                                          46.3 ns         46.7 ns
std::map&lt;std::string, int&gt;::erase(iterator)/32                                                         44.4 ns         41.8 ns
std::map&lt;std::string, int&gt;::erase(iterator)/1024                                                       43.7 ns         46.4 ns
std::map&lt;std::string, int&gt;::erase(iterator)/8192                                                       45.2 ns         44.1 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/0                      407 ns          407 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/32                     876 ns          906 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/1024                 20880 ns        20444 ns
std::map&lt;std::string, int&gt;::erase(iterator, iterator) (erase half the container)/8192                252881 ns       241583 ns
std::map&lt;std::string, int&gt;::clear()/0                                                                   407 ns          408 ns
std::map&lt;std::string, int&gt;::clear()/32                                                                 1252 ns         1323 ns
std::map&lt;std::string, int&gt;::clear()/1024                                                              38488 ns        38017 ns
std::map&lt;std::string, int&gt;::clear()/8192                                                             416492 ns       428534 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/0                                                    0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/32                                                    33.9 ns         15.3 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/1024                                                  43.0 ns         25.5 ns
std::map&lt;std::string, int&gt;::find(key) (existent)/8192                                                  44.6 ns         29.3 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/0                                                0.259 ns        0.257 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/32                                                22.6 ns         11.4 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/1024                                              48.6 ns         25.1 ns
std::map&lt;std::string, int&gt;::find(key) (non-existent)/8192                                              64.1 ns         31.1 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/0                                                   0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/32                                                   32.2 ns         17.3 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/1024                                                 42.4 ns         25.3 ns
std::map&lt;std::string, int&gt;::count(key) (existent)/8192                                                 44.4 ns         31.6 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/0                                               0.260 ns        0.259 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/32                                               22.9 ns         11.3 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/1024                                             49.8 ns         25.5 ns
std::map&lt;std::string, int&gt;::count(key) (non-existent)/8192                                             66.3 ns         31.9 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/0                                                0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/32                                                31.4 ns         18.0 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/1024                                              44.3 ns         26.5 ns
std::map&lt;std::string, int&gt;::contains(key) (existent)/8192                                              47.4 ns         30.2 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/0                                            0.452 ns        0.441 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/32                                            23.1 ns         11.5 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/1024                                          46.2 ns         26.3 ns
std::map&lt;std::string, int&gt;::contains(key) (non-existent)/8192                                          63.4 ns         31.4 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/32                                             17.2 ns         19.0 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/1024                                           27.1 ns         26.2 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (existent)/8192                                           34.0 ns         36.0 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/0                                         0.259 ns        0.257 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/32                                         11.6 ns         11.5 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/1024                                       24.8 ns         25.6 ns
std::map&lt;std::string, int&gt;::lower_bound(key) (non-existent)/8192                                       31.7 ns         31.6 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/32                                             18.8 ns         19.7 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/1024                                           25.3 ns         27.7 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (existent)/8192                                           30.2 ns         29.9 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/0                                         0.260 ns        0.259 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/32                                         11.3 ns         12.0 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/1024                                       25.6 ns         25.9 ns
std::map&lt;std::string, int&gt;::upper_bound(key) (non-existent)/8192                                       33.1 ns         34.2 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/0                                             0.008 ns        0.008 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/32                                             33.5 ns         15.8 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/1024                                           43.0 ns         25.1 ns
std::map&lt;std::string, int&gt;::equal_range(key) (existent)/8192                                           54.1 ns         30.7 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/0                                         0.265 ns        0.259 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/32                                         22.1 ns         12.1 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/1024                                       44.8 ns         24.4 ns
std::map&lt;std::string, int&gt;::equal_range(key) (non-existent)/8192                                       62.2 ns         40.1 ns
```

Fixes #66577</pre>
</div>
</content>
</entry>
</feed>
