[libcxx-commits] [libcxx] e6bd7bd - [libc++] Merge the two swap_ranges benchmarks into one (#214712)

via libcxx-commits libcxx-commits at lists.llvm.org
Tue Aug 11 03:39:30 PDT 2026


Author: Louis Dionne
Date: 2026-08-11T06:39:25-04:00
New Revision: e6bd7bd6ba478237e607577649aabc15a7af0e3c

URL: https://github.com/llvm/llvm-project/commit/e6bd7bd6ba478237e607577649aabc15a7af0e3c
DIFF: https://github.com/llvm/llvm-project/commit/e6bd7bd6ba478237e607577649aabc15a7af0e3c.diff

LOG: [libc++] Merge the two swap_ranges benchmarks into one (#214712)

We had two benchmark files for swap_ranges, one for normal containers
and one for vector<bool>. Merge both like we've done elsewhere.

Added: 
    

Modified: 
    libcxx/test/benchmarks/algorithms/modifying/swap_ranges.bench.cpp

Removed: 
    libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp


################################################################################
diff  --git a/libcxx/test/benchmarks/algorithms/modifying/swap_ranges.bench.cpp b/libcxx/test/benchmarks/algorithms/modifying/swap_ranges.bench.cpp
index 73706bb1be644..445c22e05b993 100644
--- a/libcxx/test/benchmarks/algorithms/modifying/swap_ranges.bench.cpp
+++ b/libcxx/test/benchmarks/algorithms/modifying/swap_ranges.bench.cpp
@@ -20,11 +20,9 @@
 #include "../../GenerateInput.h"
 
 int main(int argc, char** argv) {
-  auto std_swap_ranges = [](auto first1, auto last1, auto first2, auto) {
-    return std::swap_ranges(first1, last1, first2);
-  };
+  auto std_swap_ranges = [](auto first1, auto last1, auto first2) { return std::swap_ranges(first1, last1, first2); };
 
-  // {std,ranges}::swap_ranges(normal container)
+  // std::swap_ranges(normal container)
   {
     auto bm = []<class Container>(std::string name, auto swap_ranges) {
       benchmark::RegisterBenchmark(
@@ -39,7 +37,7 @@ int main(int argc, char** argv) {
             for ([[maybe_unused]] auto _ : st) {
               benchmark::DoNotOptimize(c1);
               benchmark::DoNotOptimize(c2);
-              auto result = swap_ranges(c1.begin(), c1.end(), c2.begin(), c2.end());
+              auto result = swap_ranges(c1.begin(), c1.end(), c2.begin());
               benchmark::DoNotOptimize(result);
               benchmark::DoNotOptimize(c1);
               benchmark::DoNotOptimize(c2);
@@ -55,6 +53,36 @@ int main(int argc, char** argv) {
     bm.operator()<std::list<int>>("std::swap_ranges(list<int>)", std_swap_ranges);
   }
 
+  // std::swap_ranges(vector<bool>)
+  {
+    auto bm = []<bool Aligned>(std::string name, auto swap_ranges) {
+      benchmark::RegisterBenchmark(
+          name,
+          [swap_ranges](auto& st) {
+            std::size_t const size = st.range(0);
+            std::vector<bool> c1(size, true);
+            std::vector<bool> c2(Aligned ? size : size + 4, false);
+            auto first1 = c1.begin();
+            auto last1  = c1.end();
+            auto first2 = Aligned ? c2.begin() : c2.begin() + 4;
+
+            for ([[maybe_unused]] auto _ : st) {
+              benchmark::DoNotOptimize(c1);
+              benchmark::DoNotOptimize(c2);
+              auto result = swap_ranges(first1, last1, first2);
+              benchmark::DoNotOptimize(result);
+            }
+          })
+          ->Arg(32)
+          ->Arg(50) // non power-of-two
+          ->Arg(1024)
+          ->Arg(8192)
+          ->Arg(1 << 20);
+    };
+    bm.operator()<true>("std::swap_ranges(vector<bool>) (aligned)", std_swap_ranges);
+    bm.operator()<false>("std::swap_ranges(vector<bool>) (unaligned)", std_swap_ranges);
+  }
+
   benchmark::Initialize(&argc, argv);
   benchmark::RunSpecifiedBenchmarks();
   benchmark::Shutdown();

diff  --git a/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp b/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp
deleted file mode 100644
index 26db45c5f5c46..0000000000000
--- a/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17
-
-#include <algorithm>
-#include <benchmark/benchmark.h>
-#include <vector>
-
-static void bm_ranges_swap_ranges_vb_aligned(benchmark::State& state) {
-  auto n = state.range();
-  std::vector<bool> vec1(n, true);
-  std::vector<bool> vec2(n, false);
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(std::ranges::swap_ranges(vec1, vec2));
-    benchmark::DoNotOptimize(&vec1);
-    benchmark::DoNotOptimize(&vec2);
-  }
-}
-
-static void bm_ranges_swap_ranges_vb_unaligned(benchmark::State& state) {
-  auto n = state.range();
-  std::vector<bool> vec1(n, true);
-  std::vector<bool> vec2(n + 8, true);
-  auto beg1 = std::ranges::begin(vec1);
-  auto end1 = std::ranges::end(vec1);
-  auto beg2 = std::ranges::begin(vec2) + 4;
-  auto end2 = std::ranges::end(vec2) - 4;
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(std::ranges::swap_ranges(beg1, end1, beg2, end2));
-    benchmark::DoNotOptimize(&vec1);
-    benchmark::DoNotOptimize(&vec2);
-  }
-}
-
-BENCHMARK(bm_ranges_swap_ranges_vb_aligned)
-    ->Name("rng::swap_ranges(std::vector<bool>, std::vector<bool>) (aligned)")
-    ->RangeMultiplier(2)
-    ->Range(8, 1 << 20);
-BENCHMARK(bm_ranges_swap_ranges_vb_unaligned)
-    ->Name("rng::swap_ranges(std::vector<bool>, std::vector<bool>) (unaligned)")
-    ->Range(8, 1 << 20);
-
-static void bm_swap_ranges_vb(benchmark::State& state, bool aligned) {
-  auto n = state.range();
-  std::vector<bool> vec1(n, true);
-  std::vector<bool> vec2(aligned ? n : n + 8, true);
-  auto beg1 = vec1.begin();
-  auto end1 = vec1.end();
-  auto beg2 = aligned ? vec2.begin() : vec2.begin() + 4;
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(std::swap_ranges(beg1, end1, beg2));
-    benchmark::DoNotOptimize(&vec1);
-    benchmark::DoNotOptimize(&vec2);
-  }
-}
-
-static void bm_swap_ranges_vb_aligned(benchmark::State& state) { bm_swap_ranges_vb(state, true); }
-static void bm_swap_ranges_vb_unaligned(benchmark::State& state) { bm_swap_ranges_vb(state, false); }
-
-BENCHMARK(bm_swap_ranges_vb_aligned)
-    ->Name("std::swap_ranges(std::vector<bool>, std::vector<bool>) (aligned)")
-    ->Range(8, 1 << 20);
-BENCHMARK(bm_swap_ranges_vb_unaligned)
-    ->Name("std::swap_ranges(std::vector<bool>, std::vector<bool>) (unaligned)")
-    ->Range(8, 1 << 20);
-
-BENCHMARK_MAIN();


        


More information about the libcxx-commits mailing list