Skip to content

[libc++] Don't assume alignment of empty ranges - #213752

Open
ldionne wants to merge 1 commit into
llvm:mainfrom
ldionne:review/alignment-assumptions-for-empty-range
Open

[libc++] Don't assume alignment of empty ranges#213752
ldionne wants to merge 1 commit into
llvm:mainfrom
ldionne:review/alignment-assumptions-for-empty-range

Conversation

@ldionne

@ldionne ldionne commented Aug 3, 2026

Copy link
Copy Markdown
Member

Iterators for empty ranges are sometimes implemented using a non-aligned sentinel value. Requiring proper alignment in that case causes a hardening failure. In reality, there is no benefit to requiring proper alignment for an empty range.

Iterators for empty ranges are sometimes implemented using a non-aligned
sentinel value. Requiring proper alignment in that case causes a hardening
failure. In reality, there is no benefit to requiring proper alignment for
an empty range.
@ldionne
ldionne requested a review from a team as a code owner August 3, 2026 20:06
@llvmorg-github-actions llvmorg-github-actions Bot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Aug 3, 2026
@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

Changes

Iterators for empty ranges are sometimes implemented using a non-aligned sentinel value. Requiring proper alignment in that case causes a hardening failure. In reality, there is no benefit to requiring proper alignment for an empty range.


Full diff: https://github.com/llvm/llvm-project/pull/213752.diff

2 Files Affected:

  • (modified) libcxx/include/__memory/valid_range.h (+9-5)
  • (added) libcxx/test/libcxx/algorithms/unaligned_empty_range.pass.cpp (+82)
diff --git a/libcxx/include/__memory/valid_range.h b/libcxx/include/__memory/valid_range.h
index 32c98588fe39a..6edd68d53c49c 100644
--- a/libcxx/include/__memory/valid_range.h
+++ b/libcxx/include/__memory/valid_range.h
@@ -50,7 +50,9 @@ __is_valid_range(const _Tp* __first, const _Tp* __last) {
 // This function allows the compiler to assume that [__first, __last) is a valid range as defined above.
 //
 // In practice, we only add explicit assumptions for bullets (1) and (3). These assumptions allow (currently only
-// clang-based compilers) to auto-vectorize algorithms that contain early returns.
+// clang-based compilers) to auto-vectorize algorithms that contain early returns. Note that we don't enforce
+// alignment assumptions for empty ranges since it is a common occurence to use unaligned sentinel values to
+// implement iterators of empty ranges.
 template <class _Iter, class _Sent>
 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void
 __assume_valid_range([[__maybe_unused__]] _Iter&& __first, [[__maybe_unused__]] _Sent&& __last) {
@@ -60,10 +62,12 @@ __assume_valid_range([[__maybe_unused__]] _Iter&& __first, [[__maybe_unused__]]
     _LIBCPP_ASSERT_INTERNAL(std::__is_valid_range(std::__to_address(__first), std::__to_address(__last)),
                             "Valid range assumption does not hold");
     if (!__libcpp_is_constant_evaluated()) {
-      using __value_type = typename iterator_traits<__remove_cvref_t<_Iter>>::value_type;
-      __builtin_assume_dereferenceable(std::__to_address(__first), (__last - __first) * sizeof(__value_type));
-      (void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__first));
-      (void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__last));
+      if (__first != __last) {
+        using __value_type = typename iterator_traits<__remove_cvref_t<_Iter>>::value_type;
+        __builtin_assume_dereferenceable(std::__to_address(__first), (__last - __first) * sizeof(__value_type));
+        (void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__first));
+        (void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__last));
+      }
     }
   }
 #endif
diff --git a/libcxx/test/libcxx/algorithms/unaligned_empty_range.pass.cpp b/libcxx/test/libcxx/algorithms/unaligned_empty_range.pass.cpp
new file mode 100644
index 0000000000000..8cd9bcd67f870
--- /dev/null
+++ b/libcxx/test/libcxx/algorithms/unaligned_empty_range.pass.cpp
@@ -0,0 +1,82 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Some algorithms make alignment assumptions for optimization purposes. However, it is
+// fairly common for data structures to implement iterators for empty ranges using
+// sentinel values, which may not be properly aligned. This test ensures that we don't
+// make alignment assumptions for empty ranges, which would break that use case.
+
+// UNSUPPORTED: c++03
+
+#include <algorithm>
+#include <cassert>
+#include <cstdint>
+#include <ranges>
+
+#include "test_macros.h"
+
+// Returns a pointer that doesn't point to any object at all and that is not suitably
+// aligned for T. This is the sort of sentinel value that user code sometimes uses to
+// represent an empty range.
+template <class T>
+T* unaligned_sentinel() {
+  return reinterpret_cast<T*>(static_cast<std::uintptr_t>(1));
+}
+
+template <class T>
+void test() {
+  T* first = unaligned_sentinel<T>();
+  T* last  = first;
+  T value{};
+  auto pred = [](T const&) { return true; };
+
+  assert(std::find(first, last, value) == last);
+  assert(std::find_if(first, last, pred) == last);
+  assert(std::find_if_not(first, last, pred) == last);
+  assert(std::any_of(first, last, pred) == false);
+  assert(std::all_of(first, last, pred) == true);
+  assert(std::none_of(first, last, pred) == true);
+  assert(std::remove(first, last, value) == last);
+  assert(std::remove_if(first, last, pred) == last);
+
+#if TEST_STD_VER >= 20
+  // (iterator, sentinel) overloads
+  assert(std::ranges::find(first, last, value) == last);
+  assert(std::ranges::find_if(first, last, pred) == last);
+  assert(std::ranges::find_if_not(first, last, pred) == last);
+  assert(std::ranges::any_of(first, last, pred) == false);
+  assert(std::ranges::all_of(first, last, pred) == true);
+  assert(std::ranges::none_of(first, last, pred) == true);
+  assert(std::ranges::remove(first, last, value).begin() == last);
+  assert(std::ranges::remove_if(first, last, pred).begin() == last);
+
+  // (range) overloads
+  std::ranges::subrange range(first, last);
+  assert(std::ranges::find(range, value) == last);
+  assert(std::ranges::find_if(range, pred) == last);
+  assert(std::ranges::find_if_not(range, pred) == last);
+  assert(std::ranges::any_of(range, pred) == false);
+  assert(std::ranges::all_of(range, pred) == true);
+  assert(std::ranges::none_of(range, pred) == true);
+  assert(std::ranges::remove(range, value).begin() == last);
+  assert(std::ranges::remove_if(range, pred).begin() == last);
+#endif
+}
+
+struct alignas(16) Overaligned {
+  int value = 0;
+  friend bool operator==(Overaligned const& x, Overaligned const& y) { return x.value == y.value; }
+};
+
+int main(int, char**) {
+  test<int>();
+  test<double>(); // not trivially equality comparable
+  test<Overaligned>();
+
+  return 0;
+}

@ldionne

ldionne commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

CC @kevinwkt @vitalybuka

__builtin_assume_dereferenceable(std::__to_address(__first), (__last - __first) * sizeof(__value_type));
(void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__first));
(void)std::__assume_aligned<_LIBCPP_ALIGNOF(__value_type)>(std::__to_address(__last));
if (__first != __last) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect this might throw off compiler optimizations. Another approach for this PR would be to instead still assume valid alignment for all ranges (including empty ranges), but early-exit from std::__find_if before we make that assumption.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with the early-exit approach in std::__find_if think it might be cleaner

@ldionne

ldionne commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

/libcxx-bot benchmark libcxx/test/benchmarks/algorithms/nonmodifying/find.bench.cpp libcxx/test/benchmarks/algorithms/nonmodifying/any_all_none_of.bench.cpp

Running benchmarks in https://github.com/llvm/llvm-project/actions/runs/30848930053

Benchmark results for Linux x86_64:
Benchmark                                                         Baseline    Candidate    Difference    % Difference   Significant?   95% C.I. of %diff
--------------------------------------------------------------  ----------  -----------  ------------  --------------  --------------  -------------------
rng::find(join_view(deque<deque<int>>))_(process_all)/1024           75.57        74.91         -0.66          -0.87%                  [-2.3%, +1.4%]
rng::find(join_view(deque<deque<int>>))_(process_all)/32768        2243.10      2198.16        -44.94          -2.00%                  [-5.0%, +1.4%]
rng::find(join_view(deque<deque<int>>))_(process_all)/50             27.38        27.28         -0.10          -0.36%                  [-5.1%, +3.2%]
rng::find(join_view(deque<deque<int>>))_(process_all)/8              24.60        24.54         -0.07          -0.27%                  [-8.7%, +5.7%]
rng::find(join_view(deque<deque<int>>))_(process_all)/8192          508.16       509.73          1.57           0.31%                  [-7.5%, +5.7%]
rng::find(join_view(list<vector<int>>))_(process_all)/1024          831.73       832.02          0.28           0.03%                  [-0.5%, +0.7%]
rng::find(join_view(list<vector<int>>))_(process_all)/32768       26505.41     26523.22         17.82           0.07%                  [-1.4%, +1.4%]
rng::find(join_view(list<vector<int>>))_(process_all)/50             40.68        40.71          0.04           0.09%                  [-1.0%, +1.2%]
rng::find(join_view(list<vector<int>>))_(process_all)/8               7.88         7.79         -0.09          -1.15%                  [-2.4%, +0.8%]
rng::find(join_view(list<vector<int>>))_(process_all)/8192         6645.88      6615.59        -30.30          -0.46%                  [-0.7%, +0.0%]
rng::find(join_view(vector<list<int>>))_(process_all)/1024         1494.57      1508.23         13.66           0.91%        x         [+0.1%, +1.4%]
rng::find(join_view(vector<list<int>>))_(process_all)/32768       42922.76     42911.51        -11.25          -0.03%                  [-3.2%, +4.0%]
rng::find(join_view(vector<list<int>>))_(process_all)/50             50.57        50.44         -0.13          -0.26%                  [-1.1%, +0.5%]
rng::find(join_view(vector<list<int>>))_(process_all)/8               8.24         8.25          0.01           0.09%                  [-2.8%, +1.9%]
rng::find(join_view(vector<list<int>>))_(process_all)/8192        18748.61     19406.14        657.54           3.51%                  [-13.7%, +25.9%]
rng::find(join_view(vector<vector<char>>))_(process_all)/1024        35.62        35.99          0.37           1.05%                  [-2.1%, +3.2%]
rng::find(join_view(vector<vector<char>>))_(process_all)/32768      707.61       711.00          3.39           0.48%                  [-3.3%, +11.0%]
rng::find(join_view(vector<vector<char>>))_(process_all)/50          17.22        17.21         -0.01          -0.06%                  [-2.1%, +2.4%]
rng::find(join_view(vector<vector<char>>))_(process_all)/8           16.67        16.67          0.00           0.00%                  [-4.8%, +3.2%]
rng::find(join_view(vector<vector<char>>))_(process_all)/8192       182.46       183.39          0.93           0.51%                  [-1.6%, +5.9%]
rng::find(join_view(vector<vector<int>>))_(process_all)/1024         60.27        60.13         -0.14          -0.23%                  [-1.7%, +0.7%]
rng::find(join_view(vector<vector<int>>))_(process_all)/32768      1461.98      1474.05         12.08           0.83%                  [-0.6%, +2.1%]
rng::find(join_view(vector<vector<int>>))_(process_all)/50           21.02        20.92         -0.10          -0.45%                  [-3.2%, +4.3%]
rng::find(join_view(vector<vector<int>>))_(process_all)/8            16.63        16.53         -0.10          -0.59%                  [-6.6%, +3.2%]
rng::find(join_view(vector<vector<int>>))_(process_all)/8192        374.05       373.90         -0.15          -0.04%                  [-1.3%, +1.2%]
rng::find(vector<bool>)_(process_all)/1024                            6.56         6.55         -0.01          -0.08%                  [-2.3%, +1.4%]
rng::find(vector<bool>)_(process_all)/1048576                      5292.17      5205.04        -87.14          -1.65%                  [-4.9%, +3.5%]
rng::find(vector<bool>)_(process_all)/50                              2.50         2.51          0.00           0.13%                  [-1.0%, +1.1%]
rng::find(vector<bool>)_(process_all)/8                               2.50         2.49         -0.00          -0.20%                  [-1.4%, +1.5%]
rng::find(vector<bool>)_(process_all)/8192                           49.42        50.16          0.74           1.50%                  [-8.0%, +9.7%]
rng::find_if(vector<bool>)_(process_all)/1024                      1501.94      1497.50         -4.44          -0.30%                  [-1.3%, +1.5%]
rng::find_if(vector<bool>)_(process_all)/1048576                1526131.81   1525330.39       -801.42          -0.05%                  [-0.2%, +0.3%]
rng::find_if(vector<bool>)_(process_all)/50                          73.49        73.40         -0.09          -0.12%                  [-4.9%, +6.2%]
rng::find_if(vector<bool>)_(process_all)/8                           11.67        11.62         -0.05          -0.42%                  [-5.8%, +3.1%]
rng::find_if(vector<bool>)_(process_all)/8192                     11934.71     11931.36         -3.34          -0.03%                  [-0.5%, +0.7%]
rng::find_if_not(vector<bool>)_(process_all)/1024                  1501.73      1500.09         -1.63          -0.11%                  [-1.2%, +0.8%]
rng::find_if_not(vector<bool>)_(process_all)/1048576            1525515.59   1526399.01        883.42           0.06%                  [-1.9%, +1.3%]
rng::find_if_not(vector<bool>)_(process_all)/50                      75.24        74.40         -0.84          -1.12%                  [-5.3%, +1.9%]
rng::find_if_not(vector<bool>)_(process_all)/8                       11.63        11.61         -0.02          -0.17%                  [-1.2%, +0.6%]
rng::find_if_not(vector<bool>)_(process_all)/8192                 11943.48     11922.36        -21.13          -0.18%                  [-0.5%, +0.1%]
std::all_of(deque<int>)_(process_all)/32                             22.49        22.46         -0.03          -0.13%                  [-0.7%, +0.8%]
std::all_of(deque<int>)_(process_all)/32768                       20628.52     20636.84          8.33           0.04%                  [-1.8%, +1.9%]
std::all_of(deque<int>)_(process_all)/50                             33.67        33.81          0.14           0.42%                  [-0.9%, +2.0%]
std::all_of(deque<int>)_(process_all)/8                               6.55         6.57          0.02           0.25%                  [-0.7%, +1.3%]
std::all_of(deque<int>)_(process_all)/8192                         5191.04      5173.13        -17.92          -0.35%                  [-0.9%, +0.1%]
std::all_of(list<int>)_(process_all)/32                              21.12        21.03         -0.09          -0.41%                  [-4.3%, +5.5%]
std::all_of(list<int>)_(process_all)/32768                        48117.49     47542.73       -574.76          -1.19%                  [-14.9%, +9.9%]
std::all_of(list<int>)_(process_all)/50                              40.90        40.55         -0.35          -0.86%                  [-7.6%, +5.0%]
std::all_of(list<int>)_(process_all)/8                                3.63         3.61         -0.02          -0.55%                  [-2.7%, +1.4%]
std::all_of(list<int>)_(process_all)/8192                         22502.82     20765.02      -1737.79          -7.72%                  [-19.1%, +8.6%]
std::all_of(vector<int>)_(process_all)/32                            11.99        11.55         -0.45          -3.71%                  [-9.9%, +3.2%]
std::all_of(vector<int>)_(process_all)/32768                      10572.75     10327.77       -244.98          -2.32%                  [-7.6%, +6.3%]
std::all_of(vector<int>)_(process_all)/50                            18.49        17.53         -0.96          -5.18%                  [-12.2%, +2.9%]
std::all_of(vector<int>)_(process_all)/8                              3.50         3.44         -0.06          -1.68%                  [-8.0%, +3.0%]
std::all_of(vector<int>)_(process_all)/8192                        2694.09      2593.08       -101.01          -3.75%                  [-9.2%, +6.8%]
std::any_of(deque<int>)_(process_all)/32                             17.96        17.91         -0.05          -0.27%                  [-1.5%, +1.5%]
std::any_of(deque<int>)_(process_all)/32768                       15584.69     15593.00          8.31           0.05%                  [-1.3%, +1.8%]
std::any_of(deque<int>)_(process_all)/50                             26.38        26.56          0.17           0.66%                  [-0.1%, +1.6%]
std::any_of(deque<int>)_(process_all)/8                               5.74         5.65         -0.09          -1.65%                  [-2.7%, +0.0%]
std::any_of(deque<int>)_(process_all)/8192                         3904.53      3909.92          5.39           0.14%                  [-0.5%, +0.8%]
std::any_of(list<int>)_(process_all)/32                              20.99        21.24          0.25           1.19%                  [-2.5%, +6.0%]
std::any_of(list<int>)_(process_all)/32768                        45710.39     45469.50       -240.88          -0.53%                  [-72.5%, +115.3%]
std::any_of(list<int>)_(process_all)/50                              40.49        40.99          0.50           1.24%                  [-3.3%, +7.5%]
std::any_of(list<int>)_(process_all)/8                                3.62         3.61         -0.02          -0.44%                  [-1.2%, +0.3%]
std::any_of(list<int>)_(process_all)/8192                         13187.00     13231.76         44.76           0.34%                  [-2.3%, +4.4%]
std::any_of(vector<int>)_(process_all)/32                            11.35        11.27         -0.08          -0.71%                  [-2.7%, +2.2%]
std::any_of(vector<int>)_(process_all)/32768                      10753.66     10320.55       -433.11          -4.03%                  [-6.6%, +0.6%]
std::any_of(vector<int>)_(process_all)/50                            17.34        16.94         -0.40          -2.31%                  [-7.5%, +5.2%]
std::any_of(vector<int>)_(process_all)/8                              3.44         3.43         -0.01          -0.28%                  [-0.5%, +0.2%]
std::any_of(vector<int>)_(process_all)/8192                        2705.86      2569.47       -136.39          -5.04%                  [-11.3%, +2.8%]
std::find(deque<int>)_(bail_25%)/1024                                12.51        12.63          0.12           0.96%                  [-0.2%, +2.5%]
std::find(deque<int>)_(bail_25%)/32768                              267.30       267.82          0.53           0.20%                  [-21.2%, +15.7%]
std::find(deque<int>)_(bail_25%)/8                                    4.39         4.37         -0.01          -0.34%                  [-1.7%, +0.9%]
std::find(deque<int>)_(bail_25%)/8192                                70.09        70.68          0.59           0.84%        x         [+0.3%, +1.6%]
std::find(deque<int>)_(process_all)/1024                             36.18        36.69          0.51           1.41%                  [-7.2%, +13.1%]
std::find(deque<int>)_(process_all)/32768                          1313.75      1313.08         -0.67          -0.05%                  [-1.3%, +2.2%]
std::find(deque<int>)_(process_all)/50                                6.07         5.98         -0.09          -1.42%                  [-2.9%, +0.9%]
std::find(deque<int>)_(process_all)/8                                 4.69         4.69         -0.00          -0.01%                  [-3.1%, +2.1%]
std::find(deque<int>)_(process_all)/8192                            264.83       265.61          0.77           0.29%                  [-4.6%, +7.3%]
std::find(list<int>)_(bail_25%)/1024                                327.37       327.25         -0.12          -0.04%                  [-0.5%, +0.4%]
std::find(list<int>)_(bail_25%)/32768                             20933.54     22610.27       1676.73           8.01%                  [-56.3%, +50.8%]
std::find(list<int>)_(bail_25%)/8                                     2.01         2.07          0.06           2.88%                  [-16.3%, +12.3%]
std::find(list<int>)_(bail_25%)/8192                               5119.20      5131.30         12.10           0.24%                  [-0.9%, +2.0%]
std::find(list<int>)_(process_all)/1024                            1428.71      1402.20        -26.51          -1.86%                  [-3.4%, +0.6%]
std::find(list<int>)_(process_all)/32768                          50358.54     50607.97        249.42           0.50%                  [-243.2%, +154.8%]
std::find(list<int>)_(process_all)/50                                40.74        40.75          0.01           0.03%                  [-0.3%, +0.4%]
std::find(list<int>)_(process_all)/8                                  3.47         3.47         -0.00          -0.07%                  [-1.3%, +1.8%]
std::find(list<int>)_(process_all)/8192                           16282.89     15631.29       -651.60          -4.00%                  [-20.2%, +19.1%]
std::find(vector<bool>)_(process_all)/1024                            6.71         6.48         -0.23          -3.49%                  [-6.7%, +2.4%]
std::find(vector<bool>)_(process_all)/1048576                      5177.87      5142.30        -35.57          -0.69%                  [-4.2%, +3.1%]
std::find(vector<bool>)_(process_all)/50                              2.18         2.19          0.01           0.46%                  [-0.6%, +1.3%]
std::find(vector<bool>)_(process_all)/8                               2.18         2.19          0.00           0.19%                  [-0.7%, +1.2%]
std::find(vector<bool>)_(process_all)/8192                           49.54        47.90         -1.63          -3.30%                  [-9.0%, +3.2%]
std::find(vector<char>)_(bail_25%)/1024                               5.24         5.24          0.00           0.04%                  [-3.7%, +2.7%]
std::find(vector<char>)_(bail_25%)/32768                             59.12        60.17          1.05           1.77%                  [-2.0%, +6.6%]
std::find(vector<char>)_(bail_25%)/8                                  3.12         3.12          0.00           0.06%                  [-0.3%, +0.4%]
std::find(vector<char>)_(bail_25%)/8192                              16.43        16.73          0.30           1.85%        x         [+0.7%, +4.6%]
std::find(vector<char>)_(process_all)/1024                            9.74         9.69         -0.05          -0.49%                  [-2.2%, +0.8%]
std::find(vector<char>)_(process_all)/32768                         188.17       187.31         -0.86          -0.46%                  [-2.3%, +1.0%]
std::find(vector<char>)_(process_all)/50                              4.07         4.06         -0.01          -0.23%                  [-0.6%, +0.5%]
std::find(vector<char>)_(process_all)/8                               3.78         3.74         -0.04          -0.96%                  [-3.5%, +1.5%]
std::find(vector<char>)_(process_all)/8192                           46.20        45.54         -0.66          -1.42%                  [-8.9%, +3.3%]
std::find(vector<int>)_(bail_25%)/1024                               10.63        11.07          0.44           4.15%                  [-2.3%, +12.5%]
std::find(vector<int>)_(bail_25%)/32768                             260.48       260.88          0.40           0.15%                  [-0.7%, +1.2%]
std::find(vector<int>)_(bail_25%)/8                                   3.74         3.43         -0.31          -8.17%                  [-14.0%, +8.6%]
std::find(vector<int>)_(bail_25%)/8192                               75.04        75.14          0.10           0.13%                  [-0.5%, +0.9%]
std::find(vector<int>)_(process_all)/1024                            33.56        33.38         -0.19          -0.55%                  [-2.6%, +0.3%]
std::find(vector<int>)_(process_all)/32768                         1285.13      1284.95         -0.18          -0.01%                  [-2.0%, +1.2%]
std::find(vector<int>)_(process_all)/50                               4.69         4.74          0.05           1.15%                  [-3.5%, +6.3%]
std::find(vector<int>)_(process_all)/8                                3.74         3.75          0.00           0.12%                  [-0.8%, +0.7%]
std::find(vector<int>)_(process_all)/8192                           251.25       249.71         -1.54          -0.61%                  [-3.9%, +1.7%]
std::find(vector<long_long>)_(bail_25%)/1024                         61.64        61.64          0.00           0.01%                  [-0.8%, +0.6%]
std::find(vector<long_long>)_(bail_25%)/32768                      1993.75      1990.86         -2.89          -0.15%                  [-4.1%, +2.7%]
std::find(vector<long_long>)_(bail_25%)/8                             3.13         3.12         -0.01          -0.33%                  [-4.9%, +2.9%]
std::find(vector<long_long>)_(bail_25%)/8192                        500.89       501.14          0.26           0.05%                  [-0.5%, +0.8%]
std::find(vector<long_long>)_(process_all)/1024                     247.55       247.64          0.09           0.04%                  [-1.2%, +1.1%]
std::find(vector<long_long>)_(process_all)/32768                   7857.88      7870.67         12.79           0.16%                  [-3.6%, +4.8%]
std::find(vector<long_long>)_(process_all)/50                        12.09        12.07         -0.02          -0.15%                  [-0.4%, +0.2%]
std::find(vector<long_long>)_(process_all)/8                          2.81         2.81         -0.00          -0.18%                  [-0.6%, +0.1%]
std::find(vector<long_long>)_(process_all)/8192                    1966.08      1968.64          2.56           0.13%                  [-0.3%, +0.4%]
std::find(vector<short>)_(bail_25%)/1024                             16.06        16.07          0.00           0.03%                  [-0.8%, +0.5%]
std::find(vector<short>)_(bail_25%)/32768                           492.04       492.46          0.42           0.08%                  [-0.1%, +0.3%]
std::find(vector<short>)_(bail_25%)/8                                 1.58         1.58          0.00           0.04%                  [-5.7%, +3.7%]
std::find(vector<short>)_(bail_25%)/8192                            146.75       146.51         -0.24          -0.17%                  [-1.4%, +0.8%]
std::find(vector<short>)_(process_all)/1024                          59.11        59.03         -0.08          -0.14%                  [-0.3%, +0.2%]
std::find(vector<short>)_(process_all)/32768                       1896.21      1896.45          0.24           0.01%                  [-0.8%, +1.2%]
std::find(vector<short>)_(process_all)/50                             4.39         4.37         -0.02          -0.48%                  [-1.0%, +0.1%]
std::find(vector<short>)_(process_all)/8                              1.56         1.56          0.00           0.00%                  [-0.4%, +0.4%]
std::find(vector<short>)_(process_all)/8192                         473.07       473.42          0.35           0.07%                  [-0.1%, +0.2%]
std::find_if(deque<int>)_(bail_25%)/1024                            167.44       169.54          2.10           1.25%                  [-1.5%, +3.1%]
std::find_if(deque<int>)_(bail_25%)/32768                          5189.06      5218.18         29.12           0.56%                  [-1.8%, +2.2%]
std::find_if(deque<int>)_(bail_25%)/8                                 2.50         2.51          0.02           0.65%                  [-1.8%, +3.3%]
std::find_if(deque<int>)_(bail_25%)/8192                           1302.86      1319.31         16.45           1.26%                  [-1.2%, +2.7%]
std::find_if(deque<int>)_(process_all)/1024                         492.16       498.13          5.98           1.21%                  [-1.1%, +2.9%]
std::find_if(deque<int>)_(process_all)/32768                      15687.60     15603.45        -84.15          -0.54%                  [-3.1%, +1.7%]
std::find_if(deque<int>)_(process_all)/50                            26.02        26.61          0.59           2.27%                  [-0.3%, +3.4%]
std::find_if(deque<int>)_(process_all)/8                              5.80         5.84          0.03           0.58%                  [-0.7%, +2.2%]
std::find_if(deque<int>)_(process_all)/8192                        3901.82      3920.60         18.78           0.48%                  [-1.8%, +1.8%]
std::find_if(list<int>)_(bail_25%)/1024                             330.64       328.16         -2.49          -0.75%                  [-2.0%, +1.7%]
std::find_if(list<int>)_(bail_25%)/32768                          20847.39     19371.85      -1475.54          -7.08%                  [-47.5%, +26.5%]
std::find_if(list<int>)_(bail_25%)/8                                  1.67         1.70          0.03           1.74%                  [-3.7%, +5.4%]
std::find_if(list<int>)_(bail_25%)/8192                            5133.41      5129.73         -3.68          -0.07%                  [-0.5%, +0.1%]
std::find_if(list<int>)_(process_all)/1024                         1418.92      1407.21        -11.71          -0.83%                  [-2.9%, +1.3%]
std::find_if(list<int>)_(process_all)/32768                       50209.43     49148.01      -1061.41          -2.11%                  [-236.3%, +148.3%]
std::find_if(list<int>)_(process_all)/50                             40.68        40.69          0.00           0.01%                  [-2.1%, +3.2%]
std::find_if(list<int>)_(process_all)/8                               3.45         3.44         -0.01          -0.17%                  [-1.1%, +0.4%]
std::find_if(list<int>)_(process_all)/8192                        14915.60     16851.44       1935.84          12.98%                  [-2.8%, +36.3%]
std::find_if(vector<bool>)_(process_all)/1024                      1497.72      1502.94          5.22           0.35%                  [-0.3%, +0.7%]
std::find_if(vector<bool>)_(process_all)/1048576                1552779.32   1526965.44     -25813.88          -1.66%                  [-3.1%, +0.4%]
std::find_if(vector<bool>)_(process_all)/50                          73.05        74.85          1.79           2.45%                  [-3.7%, +8.8%]
std::find_if(vector<bool>)_(process_all)/8                           11.61        11.61          0.00           0.04%                  [-0.4%, +0.4%]
std::find_if(vector<bool>)_(process_all)/8192                     11934.58     11945.26         10.68           0.09%                  [-0.7%, +0.7%]
std::find_if(vector<char>)_(bail_25%)/1024                           89.22        92.40          3.18           3.57%                  [-4.0%, +9.2%]
std::find_if(vector<char>)_(bail_25%)/32768                        2606.69      2677.53         70.84           2.72%                  [-0.6%, +5.3%]
std::find_if(vector<char>)_(bail_25%)/8                               1.93         1.95          0.02           1.29%                  [-6.4%, +8.8%]
std::find_if(vector<char>)_(bail_25%)/8192                          656.60       688.26         31.66           4.82%                  [-4.0%, +12.3%]
std::find_if(vector<char>)_(process_all)/1024                       334.24       345.90         11.66           3.49%                  [-4.5%, +9.2%]
std::find_if(vector<char>)_(process_all)/32768                    10832.52     10660.16       -172.36          -1.59%                  [-7.7%, +5.6%]
std::find_if(vector<char>)_(process_all)/50                          17.21        17.40          0.19           1.09%                  [-3.6%, +4.6%]
std::find_if(vector<char>)_(process_all)/8                            3.13         3.13         -0.00          -0.01%                  [-1.3%, +1.1%]
std::find_if(vector<char>)_(process_all)/8192                      2791.98      2752.69        -39.29          -1.41%                  [-10.8%, +10.1%]
std::find_if(vector<int>)_(bail_25%)/1024                            89.68        91.92          2.24           2.50%                  [-5.9%, +6.8%]
std::find_if(vector<int>)_(bail_25%)/32768                         2583.01      2717.96        134.95           5.22%                  [-4.5%, +11.7%]
std::find_if(vector<int>)_(bail_25%)/8                                1.97         2.14          0.16           8.26%                  [-0.8%, +16.3%]
std::find_if(vector<int>)_(bail_25%)/8192                           654.31       672.91         18.60           2.84%                  [-4.2%, +7.4%]
std::find_if(vector<int>)_(process_all)/1024                        330.52       337.89          7.37           2.23%                  [-4.9%, +8.2%]
std::find_if(vector<int>)_(process_all)/32768                     10848.14     10827.14        -21.00          -0.19%                  [-5.9%, +8.6%]
std::find_if(vector<int>)_(process_all)/50                           17.22        17.23          0.01           0.04%                  [-3.8%, +3.7%]
std::find_if(vector<int>)_(process_all)/8                             3.11         3.12          0.01           0.21%                  [-1.0%, +1.0%]
std::find_if(vector<int>)_(process_all)/8192                       2701.95      2707.68          5.72           0.21%                  [-7.9%, +7.5%]
std::find_if_not(deque<int>)_(bail_25%)/1024                        132.29       152.71         20.42          15.44%                  [-18.9%, +43.8%]
std::find_if_not(deque<int>)_(bail_25%)/32768                      3897.80      3910.28         12.48           0.32%                  [-1.1%, +2.1%]
std::find_if_not(deque<int>)_(bail_25%)/8                             2.82         2.82          0.01           0.19%                  [-4.6%, +7.1%]
std::find_if_not(deque<int>)_(bail_25%)/8192                        991.40       987.79         -3.60          -0.36%                  [-2.0%, +2.6%]
std::find_if_not(deque<int>)_(process_all)/1024                     650.89       647.99         -2.89          -0.44%                  [-1.0%, +1.0%]
std::find_if_not(deque<int>)_(process_all)/32768                  20759.22     21019.39        260.17           1.25%                  [-3.1%, +4.8%]
std::find_if_not(deque<int>)_(process_all)/50                        33.37        33.48          0.11           0.32%                  [-0.2%, +0.8%]
std::find_if_not(deque<int>)_(process_all)/8                          6.24         6.25          0.01           0.15%                  [-0.2%, +0.4%]
std::find_if_not(deque<int>)_(process_all)/8192                    5178.07      5441.46        263.40           5.09%                  [-4.5%, +11.5%]
std::find_if_not(list<int>)_(bail_25%)/1024                         326.81       326.88          0.08           0.02%                  [-0.5%, +0.4%]
std::find_if_not(list<int>)_(bail_25%)/32768                      20803.53     19014.74      -1788.79          -8.60%                  [-51.6%, +34.4%]
std::find_if_not(list<int>)_(bail_25%)/8                              2.25         2.34          0.08           3.72%                  [-12.7%, +27.4%]
std::find_if_not(list<int>)_(bail_25%)/8192                        5134.57      5125.83         -8.74          -0.17%        x         [-0.3%, -0.0%]
std::find_if_not(list<int>)_(process_all)/1024                     1428.71      1402.56        -26.15          -1.83%                  [-3.5%, +0.8%]
std::find_if_not(list<int>)_(process_all)/32768                   50494.72     49366.12      -1128.60          -2.24%                  [-239.5%, +150.8%]
std::find_if_not(list<int>)_(process_all)/50                         40.69        40.74          0.04           0.10%        x         [+0.0%, +0.2%]
std::find_if_not(list<int>)_(process_all)/8                           3.49         3.47         -0.03          -0.84%                  [-7.9%, +3.9%]
std::find_if_not(list<int>)_(process_all)/8192                    16129.95     15818.62       -311.33          -1.93%                  [-13.8%, +11.8%]
std::find_if_not(vector<bool>)_(process_all)/1024                  1498.86      1499.63          0.77           0.05%                  [-0.9%, +1.4%]
std::find_if_not(vector<bool>)_(process_all)/1048576            1527494.73   1533994.84       6500.11           0.43%                  [-3.5%, +6.2%]
std::find_if_not(vector<bool>)_(process_all)/50                      74.84        74.42         -0.42          -0.56%                  [-7.2%, +3.8%]
std::find_if_not(vector<bool>)_(process_all)/8                       11.62        11.62         -0.00          -0.02%                  [-1.8%, +2.8%]
std::find_if_not(vector<bool>)_(process_all)/8192                 11931.76     12076.09        144.33           1.21%                  [-0.9%, +3.2%]
std::find_if_not(vector<char>)_(bail_25%)/1024                       88.72        92.36          3.64           4.10%                  [-3.8%, +8.0%]
std::find_if_not(vector<char>)_(bail_25%)/32768                    2570.92      2703.67        132.75           5.16%                  [-3.4%, +8.5%]
std::find_if_not(vector<char>)_(bail_25%)/8                           1.99         2.07          0.08           3.96%                  [-13.9%, +21.2%]
std::find_if_not(vector<char>)_(bail_25%)/8192                      648.86       688.49         39.63           6.11%                  [-5.0%, +12.7%]
std::find_if_not(vector<char>)_(process_all)/1024                   338.06       335.96         -2.10          -0.62%                  [-5.5%, +6.3%]
std::find_if_not(vector<char>)_(process_all)/32768                10917.76     10952.16         34.40           0.32%                  [-5.0%, +3.9%]
std::find_if_not(vector<char>)_(process_all)/50                      17.23        17.23         -0.00          -0.02%                  [-3.4%, +3.5%]
std::find_if_not(vector<char>)_(process_all)/8                        3.14         3.14          0.00           0.09%                  [-1.3%, +1.5%]
std::find_if_not(vector<char>)_(process_all)/8192                  2682.40      2702.53         20.13           0.75%                  [-6.9%, +8.2%]
std::find_if_not(vector<int>)_(bail_25%)/1024                        88.55        92.42          3.87           4.37%                  [-2.2%, +8.9%]
std::find_if_not(vector<int>)_(bail_25%)/32768                     2574.78      2741.43        166.64           6.47%                  [-6.9%, +14.6%]
std::find_if_not(vector<int>)_(bail_25%)/8                            1.85         1.95          0.09           5.12%                  [-6.9%, +20.9%]
std::find_if_not(vector<int>)_(bail_25%)/8192                       653.96       687.20         33.24           5.08%                  [-4.3%, +10.3%]
std::find_if_not(vector<int>)_(process_all)/1024                    334.06       329.60         -4.46          -1.34%                  [-9.7%, +5.6%]
std::find_if_not(vector<int>)_(process_all)/32768                 10740.52     10369.75       -370.77          -3.45%                  [-7.6%, +6.4%]
std::find_if_not(vector<int>)_(process_all)/50                       17.21        17.17         -0.04          -0.22%                  [-15.4%, +10.6%]
std::find_if_not(vector<int>)_(process_all)/8                         3.13         3.15          0.02           0.63%                  [-1.4%, +2.0%]
std::find_if_not(vector<int>)_(process_all)/8192                   2619.57      2641.15         21.58           0.82%                  [-6.3%, +6.9%]
std::none_of(deque<int>)_(process_all)/32                            18.14        18.01         -0.13          -0.69%                  [-4.2%, +3.9%]
std::none_of(deque<int>)_(process_all)/32768                      15613.56     15580.70        -32.86          -0.21%                  [-0.5%, +0.3%]
std::none_of(deque<int>)_(process_all)/50                            26.49        26.39         -0.10          -0.37%                  [-2.3%, +1.4%]
std::none_of(deque<int>)_(process_all)/8                              5.70         5.70          0.00           0.02%                  [-3.8%, +3.1%]
std::none_of(deque<int>)_(process_all)/8192                        3909.70      3911.52          1.82           0.05%                  [-0.4%, +0.8%]
std::none_of(list<int>)_(process_all)/32                             21.00        21.04          0.04           0.20%                  [-3.5%, +5.9%]
std::none_of(list<int>)_(process_all)/32768                       47825.55     49076.99       1251.44           2.62%                  [-1.8%, +5.4%]
std::none_of(list<int>)_(process_all)/50                             40.51        40.56          0.05           0.12%                  [-1.8%, +2.9%]
std::none_of(list<int>)_(process_all)/8                               3.60         3.64          0.03           0.94%                  [-0.9%, +2.1%]
std::none_of(list<int>)_(process_all)/8192                        20786.03     21234.52        448.49           2.16%                  [-7.7%, +13.1%]
std::none_of(vector<int>)_(process_all)/32                           11.45        11.23         -0.23          -1.97%                  [-5.6%, +4.2%]
std::none_of(vector<int>)_(process_all)/32768                     10631.22     10378.82       -252.39          -2.37%                  [-7.0%, +4.4%]
std::none_of(vector<int>)_(process_all)/50                           17.24        17.23         -0.02          -0.10%                  [-5.7%, +5.4%]
std::none_of(vector<int>)_(process_all)/8                             3.44         3.43         -0.00          -0.05%                  [-0.6%, +0.3%]
std::none_of(vector<int>)_(process_all)/8192                       2606.83      2619.54         12.70           0.49%                  [-5.0%, +7.3%]
Geomean                                                             187.49       187.88          0.38           0.20%

Benchmark results for macOS 26.5 arm64:
Benchmark                                                         Baseline    Candidate    Difference    % Difference   Significant?   95% C.I. of %diff
--------------------------------------------------------------  ----------  -----------  ------------  --------------  --------------  -------------------
rng::find(join_view(deque<deque<int>>))_(process_all)/1024          292.90       296.32          3.42           1.17%                  [-0.9%, +3.0%]
rng::find(join_view(deque<deque<int>>))_(process_all)/32768        9960.65      9976.09         15.44           0.16%                  [-0.6%, +1.6%]
rng::find(join_view(deque<deque<int>>))_(process_all)/50             18.16        18.11         -0.05          -0.25%                  [-2.0%, +1.2%]
rng::find(join_view(deque<deque<int>>))_(process_all)/8               8.46         8.54          0.08           0.93%                  [-2.4%, +2.5%]
rng::find(join_view(deque<deque<int>>))_(process_all)/8192         2359.37      2353.79         -5.57          -0.24%                  [-3.1%, +3.4%]
rng::find(join_view(list<vector<int>>))_(process_all)/1024          497.52       497.60          0.08           0.02%                  [-1.9%, +1.3%]
rng::find(join_view(list<vector<int>>))_(process_all)/32768       15596.87     15578.29        -18.58          -0.12%                  [-0.4%, +0.3%]
rng::find(join_view(list<vector<int>>))_(process_all)/50             24.43        27.31          2.88          11.77%                  [-7.7%, +18.8%]
rng::find(join_view(list<vector<int>>))_(process_all)/8               4.70         4.52         -0.17          -3.69%                  [-7.6%, +2.9%]
rng::find(join_view(list<vector<int>>))_(process_all)/8192         3885.20      3889.77          4.58           0.12%                  [-0.1%, +0.5%]
rng::find(join_view(vector<list<int>>))_(process_all)/1024          774.76       770.25         -4.50          -0.58%                  [-2.8%, +0.8%]
rng::find(join_view(vector<list<int>>))_(process_all)/32768       33222.16     33399.11        176.96           0.53%                  [-9.9%, +9.8%]
rng::find(join_view(vector<list<int>>))_(process_all)/50             23.57        23.58          0.00           0.01%                  [-3.2%, +2.0%]
rng::find(join_view(vector<list<int>>))_(process_all)/8               4.38         4.28         -0.09          -2.16%                  [-4.1%, +1.7%]
rng::find(join_view(vector<list<int>>))_(process_all)/8192        10814.75      8723.88      -2090.86         -19.33%                  [-42.1%, +11.2%]
rng::find(join_view(vector<vector<char>>))_(process_all)/1024        24.56        23.96         -0.61          -2.48%                  [-6.6%, +4.7%]
rng::find(join_view(vector<vector<char>>))_(process_all)/32768      681.12       668.07        -13.04          -1.91%                  [-4.6%, +2.3%]
rng::find(join_view(vector<vector<char>>))_(process_all)/50           4.14         3.95         -0.19          -4.70%                  [-14.6%, +2.8%]
rng::find(join_view(vector<vector<char>>))_(process_all)/8            3.51         3.58          0.07           1.93%                  [-2.4%, +7.3%]
rng::find(join_view(vector<vector<char>>))_(process_all)/8192       176.63       176.41         -0.22          -0.12%                  [-2.8%, +2.9%]
rng::find(join_view(vector<vector<int>>))_(process_all)/1024        277.02       276.20         -0.82          -0.29%                  [-2.8%, +2.9%]
rng::find(join_view(vector<vector<int>>))_(process_all)/32768      8770.95      8782.60         11.65           0.13%                  [-1.4%, +1.4%]
rng::find(join_view(vector<vector<int>>))_(process_all)/50           14.97        15.09          0.12           0.80%                  [-2.6%, +3.2%]
rng::find(join_view(vector<vector<int>>))_(process_all)/8             5.55         5.76          0.21           3.79%                  [-9.2%, +18.5%]
rng::find(join_view(vector<vector<int>>))_(process_all)/8192       2132.57      2120.17        -12.40          -0.58%        x         [-1.0%, -0.1%]
rng::find(vector<bool>)_(process_all)/1024                            4.66         4.76          0.11           2.27%                  [-2.4%, +5.7%]
rng::find(vector<bool>)_(process_all)/1048576                      3879.01      3870.86         -8.15          -0.21%                  [-1.3%, +0.5%]
rng::find(vector<bool>)_(process_all)/50                              1.05         1.16          0.10           9.59%                  [-9.1%, +18.4%]
rng::find(vector<bool>)_(process_all)/8                               1.05         1.16          0.10           9.95%                  [-7.3%, +20.2%]
rng::find(vector<bool>)_(process_all)/8192                           34.46        34.36         -0.11          -0.31%                  [-0.9%, +0.9%]
rng::find_if(vector<bool>)_(process_all)/1024                       584.41       582.27         -2.14          -0.37%                  [-1.5%, +0.8%]
rng::find_if(vector<bool>)_(process_all)/1048576                 599549.48    597747.09      -1802.39          -0.30%                  [-1.2%, +1.2%]
rng::find_if(vector<bool>)_(process_all)/50                          24.71        24.67         -0.04          -0.16%                  [-0.9%, +0.3%]
rng::find_if(vector<bool>)_(process_all)/8                            3.75         3.75         -0.00          -0.01%                  [-0.8%, +0.5%]
rng::find_if(vector<bool>)_(process_all)/8192                      4648.15      4633.76        -14.39          -0.31%                  [-2.0%, +1.9%]
rng::find_if_not(vector<bool>)_(process_all)/1024                   586.73       587.29          0.56           0.10%                  [-0.8%, +0.6%]
rng::find_if_not(vector<bool>)_(process_all)/1048576             600191.57    601305.20       1113.63           0.19%                  [-1.2%, +1.4%]
rng::find_if_not(vector<bool>)_(process_all)/50                      24.72        24.62         -0.10          -0.39%                  [-1.5%, +0.2%]
rng::find_if_not(vector<bool>)_(process_all)/8                        3.75         3.75         -0.00          -0.04%                  [-0.7%, +0.3%]
rng::find_if_not(vector<bool>)_(process_all)/8192                  4665.71      4669.41          3.70           0.08%                  [-1.4%, +1.9%]
std::all_of(deque<int>)_(process_all)/32                             11.87        11.83         -0.04          -0.35%                  [-1.2%, +1.7%]
std::all_of(deque<int>)_(process_all)/32768                       11598.94     11611.79         12.85           0.11%                  [-1.4%, +0.8%]
std::all_of(deque<int>)_(process_all)/50                             18.27        18.33          0.06           0.34%                  [-1.9%, +3.7%]
std::all_of(deque<int>)_(process_all)/8                               3.45         3.40         -0.05          -1.50%                  [-8.5%, +4.8%]
std::all_of(deque<int>)_(process_all)/8192                         2869.05      2863.52         -5.52          -0.19%                  [-1.2%, +1.1%]
std::all_of(list<int>)_(process_all)/32                              10.74        10.72         -0.01          -0.13%                  [-0.3%, +0.3%]
std::all_of(list<int>)_(process_all)/32768                        32306.30     32362.29         55.99           0.17%                  [-4.3%, +8.2%]
std::all_of(list<int>)_(process_all)/50                              19.72        19.63         -0.09          -0.45%                  [-1.3%, +0.7%]
std::all_of(list<int>)_(process_all)/8                                2.28         2.30          0.02           0.70%                  [-1.6%, +2.7%]
std::all_of(list<int>)_(process_all)/8192                          8935.57     10203.12       1267.55          14.19%                  [-4.3%, +23.6%]
std::all_of(vector<int>)_(process_all)/32                             5.30         5.34          0.05           0.89%                  [-1.9%, +2.5%]
std::all_of(vector<int>)_(process_all)/32768                       4964.74      4943.90        -20.83          -0.42%                  [-1.4%, +1.2%]
std::all_of(vector<int>)_(process_all)/50                             8.06         8.07          0.01           0.08%                  [-1.7%, +1.6%]
std::all_of(vector<int>)_(process_all)/8                              1.94         1.91         -0.03          -1.55%                  [-2.9%, +0.0%]
std::all_of(vector<int>)_(process_all)/8192                        1223.90      1210.69        -13.22          -1.08%                  [-2.9%, +2.2%]
std::any_of(deque<int>)_(process_all)/32                             11.94        11.96          0.02           0.19%                  [-1.9%, +1.5%]
std::any_of(deque<int>)_(process_all)/32768                       11638.24     11547.70        -90.53          -0.78%                  [-2.2%, +1.3%]
std::any_of(deque<int>)_(process_all)/50                             18.39        18.32         -0.07          -0.39%                  [-2.1%, +1.9%]
std::any_of(deque<int>)_(process_all)/8                               3.41         3.41          0.00           0.10%                  [-1.5%, +2.5%]
std::any_of(deque<int>)_(process_all)/8192                         2908.86      2884.07        -24.80          -0.85%                  [-1.6%, +0.6%]
std::any_of(list<int>)_(process_all)/32                              10.74        10.74         -0.01          -0.08%                  [-1.4%, +1.2%]
std::any_of(list<int>)_(process_all)/32768                        31406.17     30038.93      -1367.25          -4.35%                  [-8.6%, +1.1%]
std::any_of(list<int>)_(process_all)/50                              19.72        19.73          0.01           0.07%                  [-0.8%, +1.1%]
std::any_of(list<int>)_(process_all)/8                                2.27         2.29          0.01           0.63%                  [-11.6%, +8.4%]
std::any_of(list<int>)_(process_all)/8192                          8819.07      9794.77        975.70          11.06%                  [-3.8%, +25.1%]
std::any_of(vector<int>)_(process_all)/32                             5.29         5.21         -0.08          -1.51%                  [-4.0%, +2.7%]
std::any_of(vector<int>)_(process_all)/32768                       4929.46      4812.91       -116.55          -2.36%                  [-3.6%, +0.2%]
std::any_of(vector<int>)_(process_all)/50                             8.16         7.93         -0.24          -2.92%                  [-6.2%, +2.4%]
std::any_of(vector<int>)_(process_all)/8                              1.84         1.84         -0.00          -0.04%                  [-1.4%, +1.8%]
std::any_of(vector<int>)_(process_all)/8192                        1214.05      1207.21         -6.84          -0.56%                  [-2.6%, +3.8%]
std::find(deque<int>)_(bail_25%)/1024                                70.39        70.29         -0.10          -0.14%                  [-7.0%, +4.8%]
std::find(deque<int>)_(bail_25%)/32768                             1931.86      1927.24         -4.61          -0.24%                  [-1.0%, +0.8%]
std::find(deque<int>)_(bail_25%)/8                                    2.39         2.38         -0.00          -0.19%                  [-1.3%, +0.9%]
std::find(deque<int>)_(bail_25%)/8192                               482.63       482.96          0.32           0.07%                  [-1.2%, +0.9%]
std::find(deque<int>)_(process_all)/1024                            245.52       245.00         -0.51          -0.21%                  [-1.3%, +1.3%]
std::find(deque<int>)_(process_all)/32768                          7902.77      7937.80         35.03           0.44%                  [-1.0%, +2.5%]
std::find(deque<int>)_(process_all)/50                               13.81        13.65         -0.16          -1.19%        x         [-1.8%, -0.4%]
std::find(deque<int>)_(process_all)/8                                 3.34         3.49          0.15           4.57%                  [-6.0%, +13.3%]
std::find(deque<int>)_(process_all)/8192                           1924.75      1921.99         -2.77          -0.14%                  [-2.4%, +1.7%]
std::find(list<int>)_(bail_25%)/1024                                 78.79        83.12          4.33           5.50%                  [-14.9%, +30.1%]
std::find(list<int>)_(bail_25%)/32768                              9364.11      8394.62       -969.49         -10.35%                  [-18.9%, +8.0%]
std::find(list<int>)_(bail_25%)/8                                     0.94         0.94         -0.00          -0.17%                  [-22.6%, +14.4%]
std::find(list<int>)_(bail_25%)/8192                               1473.40      1473.50          0.10           0.01%                  [-1.0%, +1.1%]
std::find(list<int>)_(process_all)/1024                             746.37       747.45          1.08           0.15%                  [-1.8%, +2.4%]
std::find(list<int>)_(process_all)/32768                          31744.14     31496.30       -247.84          -0.78%                  [-6.4%, +5.8%]
std::find(list<int>)_(process_all)/50                                19.50        19.59          0.09           0.48%                  [-1.3%, +1.8%]
std::find(list<int>)_(process_all)/8                                  2.29         2.28         -0.01          -0.48%                  [-3.2%, +3.5%]
std::find(list<int>)_(process_all)/8192                            8524.22      8411.76       -112.46          -1.32%                  [-7.9%, +6.2%]
std::find(vector<bool>)_(process_all)/1024                            4.83         4.77         -0.05          -1.14%                  [-4.8%, +2.1%]
std::find(vector<bool>)_(process_all)/1048576                      3862.09      3847.34        -14.76          -0.38%                  [-1.4%, +1.1%]
std::find(vector<bool>)_(process_all)/50                              1.04         1.12          0.09           8.20%                  [-12.6%, +19.1%]
std::find(vector<bool>)_(process_all)/8                               1.07         1.12          0.04           4.01%                  [-11.6%, +16.1%]
std::find(vector<bool>)_(process_all)/8192                           34.61        34.40         -0.21          -0.60%                  [-2.0%, +1.6%]
std::find(vector<char>)_(bail_25%)/1024                               5.74         5.60         -0.14          -2.46%                  [-5.7%, +4.1%]
std::find(vector<char>)_(bail_25%)/32768                            133.77       133.57         -0.20          -0.15%                  [-1.4%, +1.4%]
std::find(vector<char>)_(bail_25%)/8                                  1.44         1.44          0.00           0.04%                  [-0.8%, +0.7%]
std::find(vector<char>)_(bail_25%)/8192                              39.42        39.19         -0.23          -0.58%                  [-1.3%, +1.0%]
std::find(vector<char>)_(process_all)/1024                           16.57        16.49         -0.08          -0.51%                  [-1.9%, +2.2%]
std::find(vector<char>)_(process_all)/32768                         490.02       483.64         -6.38          -1.30%        x         [-2.0%, -0.6%]
std::find(vector<char>)_(process_all)/50                              2.75         2.74         -0.01          -0.28%                  [-3.6%, +2.7%]
std::find(vector<char>)_(process_all)/8                               1.21         1.21          0.00           0.20%                  [-0.2%, +0.5%]
std::find(vector<char>)_(process_all)/8192                          134.47       134.39         -0.08          -0.06%                  [-1.6%, +1.2%]
std::find(vector<int>)_(bail_25%)/1024                               66.19        66.20          0.01           0.02%                  [-0.7%, +1.1%]
std::find(vector<int>)_(bail_25%)/32768                            1850.52      1848.64         -1.87          -0.10%                  [-1.1%, +1.2%]
std::find(vector<int>)_(bail_25%)/8                                   1.60         1.58         -0.02          -1.01%                  [-2.5%, +1.1%]
std::find(vector<int>)_(bail_25%)/8192                              471.03       469.84         -1.20          -0.25%                  [-0.8%, +0.6%]
std::find(vector<int>)_(process_all)/1024                           239.48       239.32         -0.16          -0.07%                  [-1.2%, +0.9%]
std::find(vector<int>)_(process_all)/32768                         7680.37      7636.91        -43.46          -0.57%                  [-1.2%, +0.6%]
std::find(vector<int>)_(process_all)/50                              12.86        12.85         -0.02          -0.13%                  [-1.3%, +2.6%]
std::find(vector<int>)_(process_all)/8                                2.58         2.80          0.21           8.30%                  [-6.7%, +17.0%]
std::find(vector<int>)_(process_all)/8192                          1860.01      1868.63          8.62           0.46%                  [-1.5%, +3.1%]
std::find(vector<long_long>)_(bail_25%)/1024                         23.61        23.57         -0.04          -0.17%                  [-1.1%, +1.1%]
std::find(vector<long_long>)_(bail_25%)/32768                       741.97       741.76         -0.22          -0.03%                  [-0.5%, +0.3%]
std::find(vector<long_long>)_(bail_25%)/8                             1.20         1.20         -0.00          -0.31%                  [-1.0%, +0.7%]
std::find(vector<long_long>)_(bail_25%)/8192                        191.37       190.83         -0.54          -0.28%                  [-0.9%, +0.5%]
std::find(vector<long_long>)_(process_all)/1024                      94.18        93.91         -0.27          -0.29%                  [-1.6%, +0.7%]
std::find(vector<long_long>)_(process_all)/32768                   3002.99      3000.79         -2.20          -0.07%                  [-0.9%, +0.4%]
std::find(vector<long_long>)_(process_all)/50                         4.66         4.66          0.00           0.07%                  [-0.8%, +0.6%]
std::find(vector<long_long>)_(process_all)/8                          1.42         1.43          0.00           0.17%                  [-1.0%, +1.2%]
std::find(vector<long_long>)_(process_all)/8192                     736.64       738.71          2.07           0.28%                  [-0.1%, +0.6%]
std::find(vector<short>)_(bail_25%)/1024                              6.25         6.25          0.01           0.10%                  [-0.2%, +0.3%]
std::find(vector<short>)_(bail_25%)/32768                           191.63       191.29         -0.34          -0.18%                  [-0.7%, +0.4%]
std::find(vector<short>)_(bail_25%)/8                                 0.73         0.73         -0.00          -0.16%                  [-0.6%, +0.1%]
std::find(vector<short>)_(bail_25%)/8192                             46.24        46.41          0.17           0.36%                  [-0.3%, +1.0%]
std::find(vector<short>)_(process_all)/1024                          23.09        23.05         -0.04          -0.17%                  [-0.7%, +0.8%]
std::find(vector<short>)_(process_all)/32768                        735.82       735.54         -0.28          -0.04%                  [-1.1%, +0.6%]
std::find(vector<short>)_(process_all)/50                             1.83         1.83         -0.00          -0.15%                  [-0.4%, +0.2%]
std::find(vector<short>)_(process_all)/8                              0.85         0.85          0.00           0.06%                  [-0.5%, +0.6%]
std::find(vector<short>)_(process_all)/8192                         185.70       185.73          0.03           0.02%                  [-1.1%, +1.0%]
std::find_if(deque<int>)_(bail_25%)/1024                             94.55        94.18         -0.37          -0.39%                  [-1.4%, +1.2%]
std::find_if(deque<int>)_(bail_25%)/32768                          2880.39      2874.64         -5.75          -0.20%                  [-0.9%, +0.3%]
std::find_if(deque<int>)_(bail_25%)/8                                 1.37         1.37         -0.00          -0.18%                  [-0.9%, +0.8%]
std::find_if(deque<int>)_(bail_25%)/8192                            728.07       725.71         -2.35          -0.32%                  [-2.1%, +1.3%]
std::find_if(deque<int>)_(process_all)/1024                         363.64       361.39         -2.25          -0.62%                  [-1.8%, +1.1%]
std::find_if(deque<int>)_(process_all)/32768                      11569.16     11676.09        106.93           0.92%                  [-0.5%, +2.0%]
std::find_if(deque<int>)_(process_all)/50                            18.25        18.30          0.05           0.28%                  [-1.2%, +1.5%]
std::find_if(deque<int>)_(process_all)/8                              3.42         3.41         -0.01          -0.19%                  [-2.1%, +2.7%]
std::find_if(deque<int>)_(process_all)/8192                        2884.12      2876.27         -7.85          -0.27%                  [-1.2%, +0.6%]
std::find_if(list<int>)_(bail_25%)/1024                             196.20       196.83          0.63           0.32%                  [-2.3%, +2.0%]
std::find_if(list<int>)_(bail_25%)/32768                           8724.18      8693.13        -31.05          -0.36%                  [-8.9%, +6.7%]
std::find_if(list<int>)_(bail_25%)/8                                  0.94         0.94         -0.01          -0.58%                  [-2.1%, +1.9%]
std::find_if(list<int>)_(bail_25%)/8192                            1491.21      1486.82         -4.39          -0.29%                  [-0.8%, +0.1%]
std::find_if(list<int>)_(process_all)/1024                          745.17       746.70          1.53           0.21%                  [-1.1%, +1.6%]
std::find_if(list<int>)_(process_all)/32768                       30477.94     30636.19        158.25           0.52%                  [-13.4%, +9.8%]
std::find_if(list<int>)_(process_all)/50                             19.56        19.59          0.03           0.15%                  [-2.0%, +1.5%]
std::find_if(list<int>)_(process_all)/8                               2.36         2.36         -0.00          -0.17%                  [-7.2%, +4.4%]
std::find_if(list<int>)_(process_all)/8192                         8448.05      8015.19       -432.86          -5.12%                  [-11.2%, +5.9%]
std::find_if(vector<bool>)_(process_all)/1024                       582.03       581.91         -0.12          -0.02%                  [-0.9%, +1.2%]
std::find_if(vector<bool>)_(process_all)/1048576                 593191.67    591741.07      -1450.60          -0.24%                  [-0.9%, +1.0%]
std::find_if(vector<bool>)_(process_all)/50                          25.11        25.08         -0.03          -0.13%                  [-0.9%, +0.5%]
std::find_if(vector<bool>)_(process_all)/8                            3.81         3.81         -0.00          -0.13%                  [-0.8%, +1.0%]
std::find_if(vector<bool>)_(process_all)/8192                      4626.31      4609.03        -17.28          -0.37%                  [-1.1%, +0.5%]
std::find_if(vector<char>)_(bail_25%)/1024                           37.07        37.24          0.17           0.46%                  [-0.4%, +1.3%]
std::find_if(vector<char>)_(bail_25%)/32768                        1177.72      1172.96         -4.76          -0.40%                  [-1.3%, +1.1%]
std::find_if(vector<char>)_(bail_25%)/8                               1.14         1.14         -0.00          -0.17%                  [-21.0%, +32.4%]
std::find_if(vector<char>)_(bail_25%)/8192                          293.77       293.64         -0.13          -0.04%                  [-1.2%, +0.9%]
std::find_if(vector<char>)_(process_all)/1024                       150.07       150.23          0.16           0.10%                  [-1.6%, +1.5%]
std::find_if(vector<char>)_(process_all)/32768                     4685.77      4640.23        -45.54          -0.97%                  [-2.0%, +1.0%]
std::find_if(vector<char>)_(process_all)/50                           7.91         7.93          0.03           0.34%                  [-1.1%, +2.0%]
std::find_if(vector<char>)_(process_all)/8                            1.75         1.73         -0.02          -0.96%                  [-1.5%, +0.3%]
std::find_if(vector<char>)_(process_all)/8192                      1158.54      1169.34         10.80           0.93%                  [-1.4%, +2.5%]
std::find_if(vector<int>)_(bail_25%)/1024                            38.60        38.51         -0.09          -0.22%                  [-7.7%, +6.9%]
std::find_if(vector<int>)_(bail_25%)/32768                         1216.91      1206.49        -10.42          -0.86%                  [-3.6%, +1.7%]
std::find_if(vector<int>)_(bail_25%)/8                                0.96         0.96         -0.00          -0.40%                  [-1.0%, +0.5%]
std::find_if(vector<int>)_(bail_25%)/8192                           309.00       307.39         -1.61          -0.52%                  [-2.4%, +1.0%]
std::find_if(vector<int>)_(process_all)/1024                        150.34       150.96          0.62           0.41%                  [-1.9%, +1.6%]
std::find_if(vector<int>)_(process_all)/32768                      4721.05      4818.94         97.88           2.07%                  [-3.5%, +6.5%]
std::find_if(vector<int>)_(process_all)/50                            8.27         8.04         -0.23          -2.78%                  [-4.3%, +1.0%]
std::find_if(vector<int>)_(process_all)/8                             1.82         1.82         -0.00          -0.02%                  [-0.7%, +1.1%]
std::find_if(vector<int>)_(process_all)/8192                       1174.47      1176.75          2.27           0.19%                  [-2.4%, +4.2%]
std::find_if_not(deque<int>)_(bail_25%)/1024                         94.57        93.87         -0.70          -0.74%        x         [-1.3%, -0.2%]
std::find_if_not(deque<int>)_(bail_25%)/32768                      2888.18      2863.34        -24.84          -0.86%                  [-1.6%, +1.0%]
std::find_if_not(deque<int>)_(bail_25%)/8                             1.37         1.37         -0.00          -0.04%                  [-0.4%, +0.7%]
std::find_if_not(deque<int>)_(bail_25%)/8192                        728.00       725.59         -2.41          -0.33%                  [-1.1%, +1.3%]
std::find_if_not(deque<int>)_(process_all)/1024                     361.91       361.22         -0.69          -0.19%                  [-1.1%, +1.0%]
std::find_if_not(deque<int>)_(process_all)/32768                  11563.27     11612.26         48.99           0.42%                  [-1.2%, +1.1%]
std::find_if_not(deque<int>)_(process_all)/50                        18.30        18.26         -0.03          -0.19%                  [-1.2%, +1.4%]
std::find_if_not(deque<int>)_(process_all)/8                          3.40         3.40          0.00           0.02%                  [-1.3%, +1.1%]
std::find_if_not(deque<int>)_(process_all)/8192                    2875.95      2885.34          9.39           0.33%                  [-1.0%, +1.2%]
std::find_if_not(list<int>)_(bail_25%)/1024                         197.18       195.16         -2.02          -1.02%                  [-3.1%, +1.4%]
std::find_if_not(list<int>)_(bail_25%)/32768                       8156.24      8259.26        103.02           1.26%                  [-11.0%, +7.7%]
std::find_if_not(list<int>)_(bail_25%)/8                              0.95         0.95         -0.00          -0.03%                  [-0.5%, +0.2%]
std::find_if_not(list<int>)_(bail_25%)/8192                        1491.76      1494.96          3.20           0.21%                  [-0.1%, +0.3%]
std::find_if_not(list<int>)_(process_all)/1024                      738.85       748.07          9.21           1.25%                  [-1.2%, +3.9%]
std::find_if_not(list<int>)_(process_all)/32768                   30890.63     30272.42       -618.20          -2.00%                  [-4.7%, +2.1%]
std::find_if_not(list<int>)_(process_all)/50                         19.52        19.49         -0.04          -0.19%                  [-1.6%, +1.3%]
std::find_if_not(list<int>)_(process_all)/8                           2.31         2.29         -0.02          -0.95%                  [-6.6%, +6.0%]
std::find_if_not(list<int>)_(process_all)/8192                    10252.40      9480.19       -772.21          -7.53%                  [-25.9%, +21.5%]
std::find_if_not(vector<bool>)_(process_all)/1024                   582.95       580.30         -2.65          -0.45%                  [-0.9%, +0.4%]
std::find_if_not(vector<bool>)_(process_all)/1048576             597108.71    598568.87       1460.16           0.24%                  [-0.9%, +1.6%]
std::find_if_not(vector<bool>)_(process_all)/50                      24.68        24.68         -0.00          -0.01%                  [-1.2%, +1.5%]
std::find_if_not(vector<bool>)_(process_all)/8                        3.78         3.78         -0.00          -0.05%                  [-0.7%, +0.7%]
std::find_if_not(vector<bool>)_(process_all)/8192                  4646.91      4658.18         11.26           0.24%                  [-1.2%, +1.0%]
std::find_if_not(vector<char>)_(bail_25%)/1024                       37.29        37.04         -0.24          -0.65%                  [-2.2%, +1.5%]
std::find_if_not(vector<char>)_(bail_25%)/32768                    1169.80      1167.05         -2.75          -0.24%                  [-2.2%, +1.3%]
std::find_if_not(vector<char>)_(bail_25%)/8                           1.15         1.08         -0.06          -5.60%                  [-30.8%, +14.2%]
std::find_if_not(vector<char>)_(bail_25%)/8192                      295.36       298.26          2.90           0.98%                  [-1.3%, +2.5%]
std::find_if_not(vector<char>)_(process_all)/1024                   149.73       149.76          0.02           0.02%                  [-1.5%, +1.0%]
std::find_if_not(vector<char>)_(process_all)/32768                 4660.16      4673.34         13.18           0.28%                  [-0.8%, +1.6%]
std::find_if_not(vector<char>)_(process_all)/50                       7.90         7.91          0.01           0.08%                  [-1.0%, +1.3%]
std::find_if_not(vector<char>)_(process_all)/8                        1.75         1.74         -0.01          -0.32%                  [-0.8%, +0.4%]
std::find_if_not(vector<char>)_(process_all)/8192                  1173.18      1166.45         -6.74          -0.57%                  [-1.7%, +0.2%]
std::find_if_not(vector<int>)_(bail_25%)/1024                        38.93        38.57         -0.35          -0.91%                  [-8.5%, +4.3%]
std::find_if_not(vector<int>)_(bail_25%)/32768                     1222.12      1206.57        -15.54          -1.27%                  [-2.9%, +0.8%]
std::find_if_not(vector<int>)_(bail_25%)/8                            0.97         0.96         -0.01          -0.75%                  [-2.3%, +1.4%]
std::find_if_not(vector<int>)_(bail_25%)/8192                       307.87       305.54         -2.33          -0.76%                  [-3.6%, +1.9%]
std::find_if_not(vector<int>)_(process_all)/1024                    151.28       149.93         -1.35          -0.89%                  [-1.6%, +0.8%]
std::find_if_not(vector<int>)_(process_all)/32768                  4735.52      4816.37         80.84           1.71%                  [-3.3%, +4.3%]
std::find_if_not(vector<int>)_(process_all)/50                        8.23         8.08         -0.15          -1.86%                  [-3.6%, +2.4%]
std::find_if_not(vector<int>)_(process_all)/8                         1.82         1.82         -0.01          -0.29%                  [-0.9%, +0.6%]
std::find_if_not(vector<int>)_(process_all)/8192                   1175.37      1175.44          0.07           0.01%                  [-2.1%, +3.4%]
std::none_of(deque<int>)_(process_all)/32                            11.88        11.93          0.04           0.36%                  [-1.1%, +1.9%]
std::none_of(deque<int>)_(process_all)/32768                      11660.49     11602.00        -58.49          -0.50%                  [-1.8%, +0.7%]
std::none_of(deque<int>)_(process_all)/50                            18.46        18.27         -0.19          -1.03%                  [-1.9%, +0.5%]
std::none_of(deque<int>)_(process_all)/8                              3.43         3.45          0.02           0.64%                  [-1.8%, +3.0%]
std::none_of(deque<int>)_(process_all)/8192                        2893.61      2884.78         -8.82          -0.30%                  [-2.1%, +1.7%]
std::none_of(list<int>)_(process_all)/32                             10.79        10.75         -0.04          -0.38%                  [-1.4%, +0.7%]
std::none_of(list<int>)_(process_all)/32768                       32176.43     31970.86       -205.56          -0.64%                  [-5.6%, +5.9%]
std::none_of(list<int>)_(process_all)/50                             19.58        19.61          0.02           0.12%                  [-0.8%, +1.0%]
std::none_of(list<int>)_(process_all)/8                               2.39         2.29         -0.10          -4.06%                  [-8.3%, +5.1%]
std::none_of(list<int>)_(process_all)/8192                         9114.25      9962.18        847.93           9.30%                  [-3.8%, +17.7%]
std::none_of(vector<int>)_(process_all)/32                            5.27         5.21         -0.05          -1.01%                  [-3.8%, +1.2%]
std::none_of(vector<int>)_(process_all)/32768                      4883.67      4875.86         -7.81          -0.16%                  [-1.3%, +1.2%]
std::none_of(vector<int>)_(process_all)/50                            7.98         7.95         -0.03          -0.41%                  [-2.5%, +1.6%]
std::none_of(vector<int>)_(process_all)/8                             1.85         1.87          0.02           1.11%                  [-1.4%, +2.6%]
std::none_of(vector<int>)_(process_all)/8192                       1195.84      1195.35         -0.49          -0.04%                  [-2.0%, +2.3%]
Geomean                                                             119.29       119.21         -0.09          -0.07%

@philnik777 philnik777 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kinda related: Should we assert alignment (possibly only in debug)? This seems like the kind of thing that will bite users in the end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants