Fields

hardware None
os None

Parameters

Fields

NameValue

Parameters

NameValue
git_commit commit 253e43590842bffcc6950cc517a7f89cafe5ec69
Author: Nikolas Klauser <nikolasklauser@berlin.de>
Date: Tue Oct 21 10:20:06 2025 +0200

Reapply "[libc++] Optimize __hash_table::erase(iterator, iterator)" (#162850)

This reapplication fixes the use after free caused by not properly
updating the bucket list in one case.

Original commit message:
Instead of just calling the single element `erase` on every element of
the range, we can combine some of the operations in a custom
implementation. Specifically, we don't need to search for the previous
node or re-link the list every iteration. Removing this unnecessary work
results in some nice performance improvements:
```
-----------------------------------------------------------------------------------------------------------------------
Benchmark old new
-----------------------------------------------------------------------------------------------------------------------
std::unordered_set<int>::erase(iterator, iterator) (erase half the container)/0 457 ns 459 ns
std::unordered_set<int>::erase(iterator, iterator) (erase half the container)/32 995 ns 626 ns
std::unordered_set<int>::erase(iterator, iterator) (erase half the container)/1024 18196 ns 7995 ns
std::unordered_set<int>::erase(iterator, iterator) (erase half the container)/8192 124722 ns 70125 ns
std::unordered_set<std::string>::erase(iterator, iterator) (erase half the container)/0 456 ns 461 ns
std::unordered_set<std::string>::erase(iterator, iterator) (erase half the container)/32 1183 ns 769 ns
std::unordered_set<std::string>::erase(iterator, iterator) (erase half the container)/1024 27827 ns 18614 ns
std::unordered_set<std::string>::erase(iterator, iterator) (erase half the container)/8192 266681 ns 226107 ns
std::unordered_map<int, int>::erase(iterator, iterator) (erase half the container)/0 455 ns 462 ns
std::unordered_map<int, int>::erase(iterator, iterator) (erase half the container)/32 996 ns 659 ns
std::unordered_map<int, int>::erase(iterator, iterator) (erase half the container)/1024 15963 ns 8108 ns
std::unordered_map<int, int>::erase(iterator, iterator) (erase half the container)/8192 136493 ns 71848 ns
std::unordered_multiset<int>::erase(iterator, iterator) (erase half the container)/0 454 ns 455 ns
std::unordered_multiset<int>::erase(iterator, iterator) (erase half the container)/32 985 ns 703 ns
std::unordered_multiset<int>::erase(iterator, iterator) (erase half the container)/1024 16277 ns 9085 ns
std::unordered_multiset<int>::erase(iterator, iterator) (erase half the container)/8192 125736 ns 82710 ns
std::unordered_multimap<int, int>::erase(iterator, iterator) (erase half the container)/0 457 ns 454 ns
std::unordered_multimap<int, int>::erase(iterator, iterator) (erase half the container)/32 1091 ns 646 ns
std::unordered_multimap<int, int>::erase(iterator, iterator) (erase half the container)/1024 17784 ns 7664 ns
std::unordered_multimap<int, int>::erase(iterator, iterator) (erase half the container)/8192 127098 ns 72806 ns
```


This reverts commit acc3a6234a91369b818fdd6482ded0ac32d8ffa6.
Filter

ldionne-old-macbook-results test results

Run Order Start Time Duration
Current 556660 2025-12-16T16:40:01 0:00:00
Previous 556536 2025-12-16T16:40:01 0:00:00
Baseline 485288 2025-12-16T16:40:01 0:00:00


Tests Summary

Status Group # # (B)
Performance Regressions 1 0
Performance Improvements 2 0
Added Tests 0 16
Unchanged Tests 77 64
Total Tests 80

Performance Regressions - execution_time Δ Previous Current σ Δ (B) σ (B)
710_omnetpp_r 2.72% 8.409 8.638 - 0.00% -

Performance Improvements - execution_time Δ Previous Current σ Δ (B) σ (B)
727_cppcheck_r -2.09% 25.222 24.695 - 0.00% -
735_gem5_r -1.11% 13.549 13.398 - 0.00% -

Added Tests - execution_time
706_stockfish_r
707_ntest_r
709_cactus_r
710_omnetpp_r
721_gcc_r
723_llvm_r
727_cppcheck_r
729_abc_r
731_astcenc_r
735_gem5_r
736_ocio_r
737_gmsh_r
748_flightdm_r
750_sealcrypto_r
753_ns3_r
766_femflow_r


Report Time: 0.26s
Name Current %
706_stockfish_r 21.596 -
707_ntest_r 16.554 -
709_cactus_r 19.747 -
710_omnetpp_r 8.638 2.72%
721_gcc_r 12.959 -
723_llvm_r 11.534 -
727_cppcheck_r 24.695 -2.09%
729_abc_r 18.677 -
731_astcenc_r 10.089 -
735_gem5_r 13.398 -1.11%
736_ocio_r 16.256 -
737_gmsh_r 12.877 -
748_flightdm_r 8.942 -
750_sealcrypto_r 18.510 -
753_ns3_r 10.226 -
766_femflow_r 12.865 -
Geometric Mean 14.153 -