[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