[libcxx-commits] [libcxx] [libc++] Rename a few benchmarks to allow identifying what's being benchmarked from the name (PR #185747)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Mar 11 04:15:59 PDT 2026
https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/185747
>From b5df086c5d5962c448f1ede05aba045bbcf5a74f Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Tue, 10 Mar 2026 16:27:52 -0400
Subject: [PATCH 1/2] [libc++] Rename a few benchmarks to allow identifying
what's being benchmarked from the name
---
.../benchmarks/adjacent_view_begin.bench.cpp | 46 +++---
.../algorithms/swap_ranges.bench.cpp | 19 ++-
libcxx/test/benchmarks/filesystem.bench.cpp | 35 ++--
.../benchmarks/format/formatter_int.bench.cpp | 16 +-
.../libcxxabi/dynamic_cast.bench.cpp | 152 +++++++++---------
5 files changed, 141 insertions(+), 127 deletions(-)
diff --git a/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp b/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
index 568b51f372d18..8b4535b87dc40 100644
--- a/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
+++ b/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
@@ -27,17 +27,17 @@ void BM_adjacent_full(benchmark::State& state) {
}
}
-BENCHMARK(BM_adjacent_full<2>);
-BENCHMARK(BM_adjacent_full<3>);
-BENCHMARK(BM_adjacent_full<4>);
-BENCHMARK(BM_adjacent_full<5>);
-BENCHMARK(BM_adjacent_full<6>);
-BENCHMARK(BM_adjacent_full<7>);
-BENCHMARK(BM_adjacent_full<8>);
-BENCHMARK(BM_adjacent_full<9>);
-BENCHMARK(BM_adjacent_full<10>);
-BENCHMARK(BM_adjacent_full<100>);
-BENCHMARK(BM_adjacent_full<1000>);
+BENCHMARK(BM_adjacent_full<2>)->Name("rng::adjacent_view::begin() (full, size 2)");
+BENCHMARK(BM_adjacent_full<3>)->Name("rng::adjacent_view::begin() (full, size 3)");
+BENCHMARK(BM_adjacent_full<4>)->Name("rng::adjacent_view::begin() (full, size 4)");
+BENCHMARK(BM_adjacent_full<5>)->Name("rng::adjacent_view::begin() (full, size 5)");
+BENCHMARK(BM_adjacent_full<6>)->Name("rng::adjacent_view::begin() (full, size 6)");
+BENCHMARK(BM_adjacent_full<7>)->Name("rng::adjacent_view::begin() (full, size 7)");
+BENCHMARK(BM_adjacent_full<8>)->Name("rng::adjacent_view::begin() (full, size 8)");
+BENCHMARK(BM_adjacent_full<9>)->Name("rng::adjacent_view::begin() (full, size 9)");
+BENCHMARK(BM_adjacent_full<10>)->Name("rng::adjacent_view::begin() (full, size 10)");
+BENCHMARK(BM_adjacent_full<100>)->Name("rng::adjacent_view::begin() (full, size 100)");
+BENCHMARK(BM_adjacent_full<1000>)->Name("rng::adjacent_view::begin() (full, size 1000)");
template <size_t N>
void BM_adjacent_empty(benchmark::State& state) {
@@ -49,18 +49,18 @@ void BM_adjacent_empty(benchmark::State& state) {
}
}
-BENCHMARK(BM_adjacent_empty<2>);
-BENCHMARK(BM_adjacent_empty<3>);
-BENCHMARK(BM_adjacent_empty<4>);
-BENCHMARK(BM_adjacent_empty<5>);
-BENCHMARK(BM_adjacent_empty<6>);
-BENCHMARK(BM_adjacent_empty<7>);
-BENCHMARK(BM_adjacent_empty<8>);
-BENCHMARK(BM_adjacent_empty<9>);
-BENCHMARK(BM_adjacent_empty<10>);
-BENCHMARK(BM_adjacent_empty<100>);
-BENCHMARK(BM_adjacent_empty<1000>);
+BENCHMARK(BM_adjacent_empty<2>)->Name("rng::adjacent_view::begin() (empty, size 2)");
+BENCHMARK(BM_adjacent_empty<3>)->Name("rng::adjacent_view::begin() (empty, size 3)");
+BENCHMARK(BM_adjacent_empty<4>)->Name("rng::adjacent_view::begin() (empty, size 4)");
+BENCHMARK(BM_adjacent_empty<5>)->Name("rng::adjacent_view::begin() (empty, size 5)");
+BENCHMARK(BM_adjacent_empty<6>)->Name("rng::adjacent_view::begin() (empty, size 6)");
+BENCHMARK(BM_adjacent_empty<7>)->Name("rng::adjacent_view::begin() (empty, size 7)");
+BENCHMARK(BM_adjacent_empty<8>)->Name("rng::adjacent_view::begin() (empty, size 8)");
+BENCHMARK(BM_adjacent_empty<9>)->Name("rng::adjacent_view::begin() (empty, size 9)");
+BENCHMARK(BM_adjacent_empty<10>)->Name("rng::adjacent_view::begin() (empty, size 10)");
+BENCHMARK(BM_adjacent_empty<100>)->Name("rng::adjacent_view::begin() (empty, size 100)");
+BENCHMARK(BM_adjacent_empty<1000>)->Name("rng::adjacent_view::begin() (empty, size 1000)");
} // namespace
-BENCHMARK_MAIN();
\ No newline at end of file
+BENCHMARK_MAIN();
diff --git a/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp b/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp
index 0c6dc10a6b7d6..26db45c5f5c46 100644
--- a/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp
+++ b/libcxx/test/benchmarks/algorithms/swap_ranges.bench.cpp
@@ -38,9 +38,13 @@ static void bm_ranges_swap_ranges_vb_unaligned(benchmark::State& state) {
}
}
-// Test std::ranges::swap_ranges for vector<bool>::iterator
-BENCHMARK(bm_ranges_swap_ranges_vb_aligned)->RangeMultiplier(2)->Range(8, 1 << 20);
-BENCHMARK(bm_ranges_swap_ranges_vb_unaligned)->Range(8, 1 << 20);
+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();
@@ -59,8 +63,11 @@ static void bm_swap_ranges_vb(benchmark::State& state, bool aligned) {
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); }
-// Test std::swap_ranges for vector<bool>::iterator
-BENCHMARK(bm_swap_ranges_vb_aligned)->Range(8, 1 << 20);
-BENCHMARK(bm_swap_ranges_vb_unaligned)->Range(8, 1 << 20);
+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();
diff --git a/libcxx/test/benchmarks/filesystem.bench.cpp b/libcxx/test/benchmarks/filesystem.bench.cpp
index 61d14a453e72f..ef06209ca0e67 100644
--- a/libcxx/test/benchmarks/filesystem.bench.cpp
+++ b/libcxx/test/benchmarks/filesystem.bench.cpp
@@ -31,7 +31,9 @@ void BM_PathConstructString(benchmark::State& st, GenInputs gen) {
benchmark::DoNotOptimize(P.native().data());
}
}
-BENCHMARK_CAPTURE(BM_PathConstructString, large_string, getRandomStringInputs)->Range(8, TestNumInputs);
+BENCHMARK_CAPTURE(BM_PathConstructString, large_string, getRandomStringInputs)
+ ->Name("filesystem::path::ctor(std::string const&)")
+ ->Range(8, TestNumInputs);
template <class GenInputs>
void BM_PathConstructCStr(benchmark::State& st, GenInputs gen) {
@@ -46,7 +48,9 @@ void BM_PathConstructCStr(benchmark::State& st, GenInputs gen) {
benchmark::DoNotOptimize(P.native().data());
}
}
-BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string, getRandomStringInputs)->Arg(TestNumInputs);
+BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string, getRandomStringInputs)
+ ->Name("filesystem::path::ctor(char const*)")
+ ->Arg(TestNumInputs);
template <template <class...> class ItType, class GenInputs>
void BM_PathConstructIter(benchmark::State& st, GenInputs gen) {
@@ -66,17 +70,11 @@ void BM_PathConstructIter(benchmark::State& st, GenInputs gen) {
benchmark::DoNotOptimize(P.native().data());
}
}
-template <class GenInputs>
-void BM_PathConstructInputIter(benchmark::State& st, GenInputs gen) {
- BM_PathConstructIter<cpp17_input_iterator>(st, gen);
-}
-template <class GenInputs>
-void BM_PathConstructForwardIter(benchmark::State& st, GenInputs gen) {
- BM_PathConstructIter<forward_iterator>(st, gen);
-}
-BENCHMARK_CAPTURE(BM_PathConstructInputIter, large_string, getRandomStringInputs)
+BENCHMARK_CAPTURE(BM_PathConstructIter<cpp17_input_iterator>, large_string, getRandomStringInputs)
+ ->Name("filesystem::path::ctor(input-iter, input-iter)")
->Range(8, TestNumInputs);
-BENCHMARK_CAPTURE(BM_PathConstructForwardIter, large_string, getRandomStringInputs)
+BENCHMARK_CAPTURE(BM_PathConstructIter<forward_iterator>, large_string, getRandomStringInputs)
+ ->Name("filesystem::path::ctor(forward-iter, forward-iter)")
->Range(8, TestNumInputs);
template <class GenInputs>
@@ -95,6 +93,7 @@ void BM_PathIterateMultipleTimes(benchmark::State& st, GenInputs gen) {
}
}
BENCHMARK_CAPTURE(BM_PathIterateMultipleTimes, iterate_elements, getRandomStringInputs)
+ ->Name("filesystem::path::iterator (iterate multiple times)")
->Range(8, TestNumInputs);
template <class GenInputs>
@@ -113,7 +112,9 @@ void BM_PathIterateOnce(benchmark::State& st, GenInputs gen) {
benchmark::ClobberMemory();
}
}
-BENCHMARK_CAPTURE(BM_PathIterateOnce, iterate_elements, getRandomStringInputs)->Range(8, TestNumInputs);
+BENCHMARK_CAPTURE(BM_PathIterateOnce, iterate_elements, getRandomStringInputs)
+ ->Name("filesystem::path::iterator (iterate once)")
+ ->Range(8, TestNumInputs);
template <class GenInputs>
void BM_PathIterateOnceBackwards(benchmark::State& st, GenInputs gen) {
@@ -134,7 +135,9 @@ void BM_PathIterateOnceBackwards(benchmark::State& st, GenInputs gen) {
benchmark::DoNotOptimize(*I);
}
}
-BENCHMARK_CAPTURE(BM_PathIterateOnceBackwards, iterate_elements, getRandomStringInputs)->Arg(TestNumInputs);
+BENCHMARK_CAPTURE(BM_PathIterateOnceBackwards, iterate_elements, getRandomStringInputs)
+ ->Name("filesystem::path::iterator (iterate once backwards)")
+ ->Arg(TestNumInputs);
static fs::path getRandomPaths(int NumParts, int PathLen) {
fs::path Result;
@@ -155,9 +158,11 @@ void BM_LexicallyNormal(benchmark::State& st, GenInput gen, size_t PathLen) {
}
}
BENCHMARK_CAPTURE(BM_LexicallyNormal, small_path, getRandomPaths, /*PathLen*/ 5)
+ ->Name("filesystem::path::lexically_normal() (small path)")
->RangeMultiplier(2)
->Range(2, 256);
BENCHMARK_CAPTURE(BM_LexicallyNormal, large_path, getRandomPaths, /*PathLen*/ 32)
+ ->Name("filesystem::path::lexically_normal() (large path)")
->RangeMultiplier(2)
->Range(2, 256);
@@ -172,9 +177,11 @@ void BM_LexicallyRelative(benchmark::State& st, GenInput gen, size_t PathLen) {
}
}
BENCHMARK_CAPTURE(BM_LexicallyRelative, small_path, getRandomPaths, /*PathLen*/ 5)
+ ->Name("filesystem::path::lexically_relative() (small path)")
->RangeMultiplier(2)
->Range(2, 256);
BENCHMARK_CAPTURE(BM_LexicallyRelative, large_path, getRandomPaths, /*PathLen*/ 32)
+ ->Name("filesystem::path::lexically_relative() (large path)")
->RangeMultiplier(2)
->Range(2, 256);
diff --git a/libcxx/test/benchmarks/format/formatter_int.bench.cpp b/libcxx/test/benchmarks/format/formatter_int.bench.cpp
index 5e0667873279c..f0b6fcc849e31 100644
--- a/libcxx/test/benchmarks/format/formatter_int.bench.cpp
+++ b/libcxx/test/benchmarks/format/formatter_int.bench.cpp
@@ -34,10 +34,10 @@ static void BM_Basic(benchmark::State& state) {
for (auto value : data)
benchmark::DoNotOptimize(std::format_to(output.begin(), "{}", value));
}
-BENCHMARK(BM_Basic<uint32_t>);
-BENCHMARK(BM_Basic<int32_t>);
-BENCHMARK(BM_Basic<uint64_t>);
-BENCHMARK(BM_Basic<int64_t>);
+BENCHMARK(BM_Basic<uint32_t>)->Name("std::format(uint32_t)");
+BENCHMARK(BM_Basic<int32_t>)->Name("std::format(int32_t)");
+BENCHMARK(BM_Basic<uint64_t>)->Name("std::format(uint64_t)");
+BENCHMARK(BM_Basic<int64_t>)->Name("std::format(int64_t)");
// Ideally the low values of a 128-bit value are all dispatched to a 64-bit routine.
#ifndef TEST_HAS_NO_INT128
@@ -52,11 +52,11 @@ static void BM_BasicLow(benchmark::State& state) {
for (auto value : data)
benchmark::DoNotOptimize(std::format_to(output.begin(), "{}", value));
}
-BENCHMARK(BM_BasicLow<__uint128_t>);
-BENCHMARK(BM_BasicLow<__int128_t>);
+BENCHMARK(BM_BasicLow<__uint128_t>)->Name("std::format(__uint128_t) (low)");
+BENCHMARK(BM_BasicLow<__int128_t>)->Name("std::format(__int128_t) (low)");
-BENCHMARK(BM_Basic<__uint128_t>);
-BENCHMARK(BM_Basic<__int128_t>);
+BENCHMARK(BM_Basic<__uint128_t>)->Name("std::format(__uint128_t)");
+BENCHMARK(BM_Basic<__int128_t>)->Name("std::format(__int128_t)");
#endif
template <class>
diff --git a/libcxx/test/benchmarks/libcxxabi/dynamic_cast.bench.cpp b/libcxx/test/benchmarks/libcxxabi/dynamic_cast.bench.cpp
index 43fe31823104a..709bc3838eb2e 100644
--- a/libcxx/test/benchmarks/libcxxabi/dynamic_cast.bench.cpp
+++ b/libcxx/test/benchmarks/libcxxabi/dynamic_cast.bench.cpp
@@ -64,111 +64,111 @@ static void StaticCast(benchmark::State& state) {
}
// Downcast along a chain from base to the most derived type
-BENCHMARK(DynCast<Chain<1>, Chain<0>>)->Name("Chain, 1 level");
-BENCHMARK(DynCast<Chain<2>, Chain<0>>)->Name("Chain, 2 levels");
-BENCHMARK(DynCast<Chain<3>, Chain<0>>)->Name("Chain, 3 levels");
-BENCHMARK(DynCast<Chain<4>, Chain<0>>)->Name("Chain, 4 levels");
-BENCHMARK(DynCast<Chain<5>, Chain<0>>)->Name("Chain, 5 levels");
-BENCHMARK(DynCast<Chain<6>, Chain<0>>)->Name("Chain, 6 levels");
-BENCHMARK(DynCast<Chain<7>, Chain<0>>)->Name("Chain, 7 levels");
-BENCHMARK(DynCast<Chain<8>, Chain<0>>)->Name("Chain, 8 levels");
-BENCHMARK(DynCast<Chain<9>, Chain<0>>)->Name("Chain, 9 levels");
+BENCHMARK(DynCast<Chain<1>, Chain<0>>)->Name("dynamic_cast (Chain, 1 level)");
+BENCHMARK(DynCast<Chain<2>, Chain<0>>)->Name("dynamic_cast (Chain, 2 levels)");
+BENCHMARK(DynCast<Chain<3>, Chain<0>>)->Name("dynamic_cast (Chain, 3 levels)");
+BENCHMARK(DynCast<Chain<4>, Chain<0>>)->Name("dynamic_cast (Chain, 4 levels)");
+BENCHMARK(DynCast<Chain<5>, Chain<0>>)->Name("dynamic_cast (Chain, 5 levels)");
+BENCHMARK(DynCast<Chain<6>, Chain<0>>)->Name("dynamic_cast (Chain, 6 levels)");
+BENCHMARK(DynCast<Chain<7>, Chain<0>>)->Name("dynamic_cast (Chain, 7 levels)");
+BENCHMARK(DynCast<Chain<8>, Chain<0>>)->Name("dynamic_cast (Chain, 8 levels)");
+BENCHMARK(DynCast<Chain<9>, Chain<0>>)->Name("dynamic_cast (Chain, 9 levels)");
// Downcast along a chain from base to the middle of the chain
-BENCHMARK(DynCast<Chain<2>, Chain<0>, Chain<1>>)->Name("Chain middle, 1 level");
-BENCHMARK(DynCast<Chain<4>, Chain<0>, Chain<2>>)->Name("Chain middle, 2 levels");
-BENCHMARK(DynCast<Chain<6>, Chain<0>, Chain<3>>)->Name("Chain middle, 3 levels");
-BENCHMARK(DynCast<Chain<8>, Chain<0>, Chain<4>>)->Name("Chain middle, 4 levels");
+BENCHMARK(DynCast<Chain<2>, Chain<0>, Chain<1>>)->Name("dynamic_cast (Chain middle, 1 level)");
+BENCHMARK(DynCast<Chain<4>, Chain<0>, Chain<2>>)->Name("dynamic_cast (Chain middle, 2 levels)");
+BENCHMARK(DynCast<Chain<6>, Chain<0>, Chain<3>>)->Name("dynamic_cast (Chain middle, 3 levels)");
+BENCHMARK(DynCast<Chain<8>, Chain<0>, Chain<4>>)->Name("dynamic_cast (Chain middle, 4 levels)");
// Downcast along a chain that fails
-BENCHMARK(DynCast<Chain<1>, Chain<0>, Chain<9>>)->Name("Chain fail, 1 level");
-BENCHMARK(DynCast<Chain<2>, Chain<0>, Chain<9>>)->Name("Chain fail, 2 levels");
-BENCHMARK(DynCast<Chain<3>, Chain<0>, Chain<9>>)->Name("Chain fail, 3 levels");
-BENCHMARK(DynCast<Chain<4>, Chain<0>, Chain<9>>)->Name("Chain fail, 4 levels");
-BENCHMARK(DynCast<Chain<5>, Chain<0>, Chain<9>>)->Name("Chain fail, 5 levels");
-BENCHMARK(DynCast<Chain<6>, Chain<0>, Chain<9>>)->Name("Chain fail, 6 levels");
-BENCHMARK(DynCast<Chain<7>, Chain<0>, Chain<9>>)->Name("Chain fail, 7 levels");
-BENCHMARK(DynCast<Chain<8>, Chain<0>, Chain<9>>)->Name("Chain fail, 8 levels");
+BENCHMARK(DynCast<Chain<1>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 1 level)");
+BENCHMARK(DynCast<Chain<2>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 2 levels)");
+BENCHMARK(DynCast<Chain<3>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 3 levels)");
+BENCHMARK(DynCast<Chain<4>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 4 levels)");
+BENCHMARK(DynCast<Chain<5>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 5 levels)");
+BENCHMARK(DynCast<Chain<6>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 6 levels)");
+BENCHMARK(DynCast<Chain<7>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 7 levels)");
+BENCHMARK(DynCast<Chain<8>, Chain<0>, Chain<9>>)->Name("dynamic_cast (Chain fail, 8 levels)");
// Downcast along a virtual inheritance chain from base to the most derived type
-BENCHMARK(DynCast<VChain<1>, VChain<0>>)->Name("VChain, 1 level");
-BENCHMARK(DynCast<VChain<2>, VChain<0>>)->Name("VChain, 2 levels");
-BENCHMARK(DynCast<VChain<3>, VChain<0>>)->Name("VChain, 3 levels");
-BENCHMARK(DynCast<VChain<4>, VChain<0>>)->Name("VChain, 4 levels");
-BENCHMARK(DynCast<VChain<5>, VChain<0>>)->Name("VChain, 5 levels");
+BENCHMARK(DynCast<VChain<1>, VChain<0>>)->Name("dynamic_cast (VChain, 1 level)");
+BENCHMARK(DynCast<VChain<2>, VChain<0>>)->Name("dynamic_cast (VChain, 2 levels)");
+BENCHMARK(DynCast<VChain<3>, VChain<0>>)->Name("dynamic_cast (VChain, 3 levels)");
+BENCHMARK(DynCast<VChain<4>, VChain<0>>)->Name("dynamic_cast (VChain, 4 levels)");
+BENCHMARK(DynCast<VChain<5>, VChain<0>>)->Name("dynamic_cast (VChain, 5 levels)");
// Downcast along a virtual inheritance chain from base to the middle of the chain
-BENCHMARK(DynCast<VChain<2>, VChain<0>, VChain<1>>)->Name("VChain middle, 1 level");
-BENCHMARK(DynCast<VChain<4>, VChain<0>, VChain<2>>)->Name("VChain middle, 2 levels");
-BENCHMARK(DynCast<VChain<6>, VChain<0>, VChain<3>>)->Name("VChain middle, 3 levels");
-BENCHMARK(DynCast<VChain<8>, VChain<0>, VChain<4>>)->Name("VChain middle, 4 levels");
+BENCHMARK(DynCast<VChain<2>, VChain<0>, VChain<1>>)->Name("dynamic_cast (VChain middle, 1 level)");
+BENCHMARK(DynCast<VChain<4>, VChain<0>, VChain<2>>)->Name("dynamic_cast (VChain middle, 2 levels)");
+BENCHMARK(DynCast<VChain<6>, VChain<0>, VChain<3>>)->Name("dynamic_cast (VChain middle, 3 levels)");
+BENCHMARK(DynCast<VChain<8>, VChain<0>, VChain<4>>)->Name("dynamic_cast (VChain middle, 4 levels)");
// Downcast along a virtual chain that fails
-BENCHMARK(DynCast<VChain<1>, VChain<0>, VChain<8>>)->Name("VChain fail, 1 level");
-BENCHMARK(DynCast<VChain<2>, VChain<0>, VChain<8>>)->Name("VChain fail, 2 levels");
-BENCHMARK(DynCast<VChain<3>, VChain<0>, VChain<8>>)->Name("VChain fail, 3 levels");
-BENCHMARK(DynCast<VChain<4>, VChain<0>, VChain<8>>)->Name("VChain fail, 4 levels");
-BENCHMARK(DynCast<VChain<5>, VChain<0>, VChain<8>>)->Name("VChain fail, 5 levels");
+BENCHMARK(DynCast<VChain<1>, VChain<0>, VChain<8>>)->Name("dynamic_cast (VChain fail, 1 level)");
+BENCHMARK(DynCast<VChain<2>, VChain<0>, VChain<8>>)->Name("dynamic_cast (VChain fail, 2 levels)");
+BENCHMARK(DynCast<VChain<3>, VChain<0>, VChain<8>>)->Name("dynamic_cast (VChain fail, 3 levels)");
+BENCHMARK(DynCast<VChain<4>, VChain<0>, VChain<8>>)->Name("dynamic_cast (VChain fail, 4 levels)");
+BENCHMARK(DynCast<VChain<5>, VChain<0>, VChain<8>>)->Name("dynamic_cast (VChain fail, 5 levels)");
// Downcast along a DAG from base to the most derived type
-BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>>)->Name("DAG rightmost, 3 levels");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>>)->Name("DAG rightmost, 4 levels");
-BENCHMARK(DynCast<Dag<0, 5>, Dag<5, 0>>)->Name("DAG rightmost, 5 levels");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<0, 0>>)->Name("DAG leftmost, 3 levels");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>>)->Name("DAG leftmost, 4 levels");
-BENCHMARK(DynCast<Dag<0, 5>, Dag<0, 0>>)->Name("DAG leftmost, 5 levels");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>>)->Name("dynamic_cast (DAG rightmost, 3 levels)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>>)->Name("dynamic_cast (DAG rightmost, 4 levels)");
+BENCHMARK(DynCast<Dag<0, 5>, Dag<5, 0>>)->Name("dynamic_cast (DAG rightmost, 5 levels)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<0, 0>>)->Name("dynamic_cast (DAG leftmost, 3 levels)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>>)->Name("dynamic_cast (DAG leftmost, 4 levels)");
+BENCHMARK(DynCast<Dag<0, 5>, Dag<0, 0>>)->Name("dynamic_cast (DAG leftmost, 5 levels)");
// Downcast along a DAG from base to the middle of the DAG
-BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<3, 1>>)->Name("DAG rightmost middle, 1 level");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<2, 2>>)->Name("DAG rightmost middle, 2 levels");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<1, 3>>)->Name("DAG rightmost middle, 3 levels");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 1>>)->Name("DAG leftmost middle, 1 level");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 2>>)->Name("DAG leftmost middle, 2 levels");
-BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 3>>)->Name("DAG leftmost middle, 3 levels");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<3, 1>>)->Name("dynamic_cast (DAG rightmost middle, 1 level)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<2, 2>>)->Name("dynamic_cast (DAG rightmost middle, 2 levels)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<4, 0>, Dag<1, 3>>)->Name("dynamic_cast (DAG rightmost middle, 3 levels)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 1>>)->Name("dynamic_cast (DAG leftmost middle, 1 level)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 2>>)->Name("dynamic_cast (DAG leftmost middle, 2 levels)");
+BENCHMARK(DynCast<Dag<0, 4>, Dag<0, 0>, Dag<0, 3>>)->Name("dynamic_cast (DAG leftmost middle, 3 levels)");
// Sidecast along a DAG
-BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, Dag<0, 0>>)->Name("DAG sidecast, 3 levels");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<2, 1>, Dag<0, 1>>)->Name("DAG sidecast, 2 levels");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<1, 2>, Dag<0, 2>>)->Name("DAG sidecast, 1 level");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, Dag<0, 0>>)->Name("dynamic_cast (DAG sidecast, 3 levels)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<2, 1>, Dag<0, 1>>)->Name("dynamic_cast (DAG sidecast, 2 levels)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<1, 2>, Dag<0, 2>>)->Name("dynamic_cast (DAG sidecast, 1 level)");
// Sidecast along a DAG that fails
-BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, Dag<0, 4>>)->Name("DAG sidecast fail, 3 levels");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<2, 1>, Dag<0, 4>>)->Name("DAG sidecast fail, 2 levels");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<1, 2>, Dag<0, 4>>)->Name("DAG sidecast fail, 1 level");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, Dag<0, 4>>)->Name("dynamic_cast (DAG sidecast fail, 3 levels)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<2, 1>, Dag<0, 4>>)->Name("dynamic_cast (DAG sidecast fail, 2 levels)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<1, 2>, Dag<0, 4>>)->Name("dynamic_cast (DAG sidecast fail, 1 level)");
// Downcast along a virtual inheritance DAG from base to the most derived type
-BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>>)->Name("VDAG rightmost, 3 levels");
-BENCHMARK(DynCast<VDag<0, 4>, VDag<4, 0>>)->Name("VDAG rightmost, 4 levels");
-BENCHMARK(DynCast<VDag<0, 5>, VDag<5, 0>>)->Name("VDAG rightmost, 5 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<0, 0>>)->Name("VDAG leftmost, 3 levels");
-BENCHMARK(DynCast<VDag<0, 4>, VDag<0, 0>>)->Name("VDAG leftmost, 4 levels");
-BENCHMARK(DynCast<VDag<0, 5>, VDag<0, 0>>)->Name("VDAG leftmost, 5 levels");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>>)->Name("dynamic_cast (VDAG rightmost, 3 levels)");
+BENCHMARK(DynCast<VDag<0, 4>, VDag<4, 0>>)->Name("dynamic_cast (VDAG rightmost, 4 levels)");
+BENCHMARK(DynCast<VDag<0, 5>, VDag<5, 0>>)->Name("dynamic_cast (VDAG rightmost, 5 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<0, 0>>)->Name("dynamic_cast (VDAG leftmost, 3 levels)");
+BENCHMARK(DynCast<VDag<0, 4>, VDag<0, 0>>)->Name("dynamic_cast (VDAG leftmost, 4 levels)");
+BENCHMARK(DynCast<VDag<0, 5>, VDag<0, 0>>)->Name("dynamic_cast (VDAG leftmost, 5 levels)");
// Downcast along a virtual inheritance DAG from base to the middle of the DAG
-BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<2, 1>>)->Name("VDAG rightmost middle, 1 level");
-BENCHMARK(DynCast<VDag<0, 4>, VDag<4, 0>, VDag<2, 2>>)->Name("VDAG rightmost middle, 2 levels");
-BENCHMARK(DynCast<VDag<0, 5>, VDag<5, 0>, VDag<2, 3>>)->Name("VDAG rightmost middle, 3 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<0, 0>, VDag<0, 1>>)->Name("VDAG leftmost middle, 1 level");
-BENCHMARK(DynCast<VDag<0, 4>, VDag<0, 0>, VDag<0, 2>>)->Name("VDAG leftmost middle, 2 levels");
-BENCHMARK(DynCast<VDag<0, 5>, VDag<0, 0>, VDag<0, 3>>)->Name("VDAG leftmost middle, 3 levels");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<2, 1>>)->Name("dynamic_cast (VDAG rightmost middle, 1 level)");
+BENCHMARK(DynCast<VDag<0, 4>, VDag<4, 0>, VDag<2, 2>>)->Name("dynamic_cast (VDAG rightmost middle, 2 levels)");
+BENCHMARK(DynCast<VDag<0, 5>, VDag<5, 0>, VDag<2, 3>>)->Name("dynamic_cast (VDAG rightmost middle, 3 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<0, 0>, VDag<0, 1>>)->Name("dynamic_cast (VDAG leftmost middle, 1 level)");
+BENCHMARK(DynCast<VDag<0, 4>, VDag<0, 0>, VDag<0, 2>>)->Name("dynamic_cast (VDAG leftmost middle, 2 levels)");
+BENCHMARK(DynCast<VDag<0, 5>, VDag<0, 0>, VDag<0, 3>>)->Name("dynamic_cast (VDAG leftmost middle, 3 levels)");
// Sidecast along a virtual inheritance DAG
-BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<0, 0>>)->Name("VDAG sidecast, 3 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<2, 1>, VDag<0, 1>>)->Name("VDAG sidecast, 2 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<1, 2>, VDag<0, 2>>)->Name("VDAG sidecast, 1 level");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<0, 0>>)->Name("dynamic_cast (VDAG sidecast, 3 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<2, 1>, VDag<0, 1>>)->Name("dynamic_cast (VDAG sidecast, 2 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<1, 2>, VDag<0, 2>>)->Name("dynamic_cast (VDAG sidecast, 1 level)");
// Sidecast along a virtual inheritance DAG that fails
-BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<0, 4>>)->Name("VDAG sidecast fail, 3 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<2, 1>, VDag<0, 4>>)->Name("VDAG sidecast fail, 2 levels");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<1, 2>, VDag<0, 4>>)->Name("VDAG sidecast fail, 1 level");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, VDag<0, 4>>)->Name("dynamic_cast (VDAG sidecast fail, 3 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<2, 1>, VDag<0, 4>>)->Name("dynamic_cast (VDAG sidecast fail, 2 levels)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<1, 2>, VDag<0, 4>>)->Name("dynamic_cast (VDAG sidecast fail, 1 level)");
// Cast to complete object pointer
-BENCHMARK(DynCast<Chain<8>, Chain<0>, void>)->Name("Chain to complete");
-BENCHMARK(DynCast<VChain<5>, VChain<0>, void>)->Name("VChain to complete");
-BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, void>)->Name("DAG to complete");
-BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, void>)->Name("VDAG to complete");
+BENCHMARK(DynCast<Chain<8>, Chain<0>, void>)->Name("dynamic_cast (Chain to complete)");
+BENCHMARK(DynCast<VChain<5>, VChain<0>, void>)->Name("dynamic_cast (VChain to complete)");
+BENCHMARK(DynCast<Dag<0, 3>, Dag<3, 0>, void>)->Name("dynamic_cast (DAG to complete)");
+BENCHMARK(DynCast<VDag<0, 3>, VDag<3, 0>, void>)->Name("dynamic_cast (VDAG to complete)");
// Static cast as the baseline.
-BENCHMARK(StaticCast)->Name("Static");
+BENCHMARK(StaticCast)->Name("static_cast");
BENCHMARK_MAIN();
>From d24f0f61de0ac318a1c6a3257724e2f3ef07b090 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Wed, 11 Mar 2026 07:15:44 -0400
Subject: [PATCH 2/2] Suggestions
---
.../benchmarks/adjacent_view_begin.bench.cpp | 44 +++++++++----------
.../benchmarks/format/formatter_int.bench.cpp | 4 +-
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp b/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
index 8b4535b87dc40..7ca94c990f0cf 100644
--- a/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
+++ b/libcxx/test/benchmarks/adjacent_view_begin.bench.cpp
@@ -27,17 +27,17 @@ void BM_adjacent_full(benchmark::State& state) {
}
}
-BENCHMARK(BM_adjacent_full<2>)->Name("rng::adjacent_view::begin() (full, size 2)");
-BENCHMARK(BM_adjacent_full<3>)->Name("rng::adjacent_view::begin() (full, size 3)");
-BENCHMARK(BM_adjacent_full<4>)->Name("rng::adjacent_view::begin() (full, size 4)");
-BENCHMARK(BM_adjacent_full<5>)->Name("rng::adjacent_view::begin() (full, size 5)");
-BENCHMARK(BM_adjacent_full<6>)->Name("rng::adjacent_view::begin() (full, size 6)");
-BENCHMARK(BM_adjacent_full<7>)->Name("rng::adjacent_view::begin() (full, size 7)");
-BENCHMARK(BM_adjacent_full<8>)->Name("rng::adjacent_view::begin() (full, size 8)");
-BENCHMARK(BM_adjacent_full<9>)->Name("rng::adjacent_view::begin() (full, size 9)");
-BENCHMARK(BM_adjacent_full<10>)->Name("rng::adjacent_view::begin() (full, size 10)");
-BENCHMARK(BM_adjacent_full<100>)->Name("rng::adjacent_view::begin() (full, size 100)");
-BENCHMARK(BM_adjacent_full<1000>)->Name("rng::adjacent_view::begin() (full, size 1000)");
+BENCHMARK(BM_adjacent_full<2>)->Name("rng::adjacent_view::begin()/2 (full view)");
+BENCHMARK(BM_adjacent_full<3>)->Name("rng::adjacent_view::begin()/3 (full view)");
+BENCHMARK(BM_adjacent_full<4>)->Name("rng::adjacent_view::begin()/4 (full view)");
+BENCHMARK(BM_adjacent_full<5>)->Name("rng::adjacent_view::begin()/5 (full view)");
+BENCHMARK(BM_adjacent_full<6>)->Name("rng::adjacent_view::begin()/6 (full view)");
+BENCHMARK(BM_adjacent_full<7>)->Name("rng::adjacent_view::begin()/7 (full view)");
+BENCHMARK(BM_adjacent_full<8>)->Name("rng::adjacent_view::begin()/8 (full view)");
+BENCHMARK(BM_adjacent_full<9>)->Name("rng::adjacent_view::begin()/9 (full view)");
+BENCHMARK(BM_adjacent_full<10>)->Name("rng::adjacent_view::begin()/10 (full view)");
+BENCHMARK(BM_adjacent_full<100>)->Name("rng::adjacent_view::begin()/100 (full view)");
+BENCHMARK(BM_adjacent_full<1000>)->Name("rng::adjacent_view::begin()/1000 (full view)");
template <size_t N>
void BM_adjacent_empty(benchmark::State& state) {
@@ -49,17 +49,17 @@ void BM_adjacent_empty(benchmark::State& state) {
}
}
-BENCHMARK(BM_adjacent_empty<2>)->Name("rng::adjacent_view::begin() (empty, size 2)");
-BENCHMARK(BM_adjacent_empty<3>)->Name("rng::adjacent_view::begin() (empty, size 3)");
-BENCHMARK(BM_adjacent_empty<4>)->Name("rng::adjacent_view::begin() (empty, size 4)");
-BENCHMARK(BM_adjacent_empty<5>)->Name("rng::adjacent_view::begin() (empty, size 5)");
-BENCHMARK(BM_adjacent_empty<6>)->Name("rng::adjacent_view::begin() (empty, size 6)");
-BENCHMARK(BM_adjacent_empty<7>)->Name("rng::adjacent_view::begin() (empty, size 7)");
-BENCHMARK(BM_adjacent_empty<8>)->Name("rng::adjacent_view::begin() (empty, size 8)");
-BENCHMARK(BM_adjacent_empty<9>)->Name("rng::adjacent_view::begin() (empty, size 9)");
-BENCHMARK(BM_adjacent_empty<10>)->Name("rng::adjacent_view::begin() (empty, size 10)");
-BENCHMARK(BM_adjacent_empty<100>)->Name("rng::adjacent_view::begin() (empty, size 100)");
-BENCHMARK(BM_adjacent_empty<1000>)->Name("rng::adjacent_view::begin() (empty, size 1000)");
+BENCHMARK(BM_adjacent_empty<2>)->Name("rng::adjacent_view::begin()/2 (empty view)");
+BENCHMARK(BM_adjacent_empty<3>)->Name("rng::adjacent_view::begin()/3 (empty view)");
+BENCHMARK(BM_adjacent_empty<4>)->Name("rng::adjacent_view::begin()/4 (empty view)");
+BENCHMARK(BM_adjacent_empty<5>)->Name("rng::adjacent_view::begin()/5 (empty view)");
+BENCHMARK(BM_adjacent_empty<6>)->Name("rng::adjacent_view::begin()/6 (empty view)");
+BENCHMARK(BM_adjacent_empty<7>)->Name("rng::adjacent_view::begin()/7 (empty view)");
+BENCHMARK(BM_adjacent_empty<8>)->Name("rng::adjacent_view::begin()/8 (empty view)");
+BENCHMARK(BM_adjacent_empty<9>)->Name("rng::adjacent_view::begin()/9 (empty view)");
+BENCHMARK(BM_adjacent_empty<10>)->Name("rng::adjacent_view::begin()/10 (empty view)");
+BENCHMARK(BM_adjacent_empty<100>)->Name("rng::adjacent_view::begin()/100 (empty view)");
+BENCHMARK(BM_adjacent_empty<1000>)->Name("rng::adjacent_view::begin()/1000 (empty view)");
} // namespace
diff --git a/libcxx/test/benchmarks/format/formatter_int.bench.cpp b/libcxx/test/benchmarks/format/formatter_int.bench.cpp
index f0b6fcc849e31..01cd1f04017b0 100644
--- a/libcxx/test/benchmarks/format/formatter_int.bench.cpp
+++ b/libcxx/test/benchmarks/format/formatter_int.bench.cpp
@@ -52,8 +52,8 @@ static void BM_BasicLow(benchmark::State& state) {
for (auto value : data)
benchmark::DoNotOptimize(std::format_to(output.begin(), "{}", value));
}
-BENCHMARK(BM_BasicLow<__uint128_t>)->Name("std::format(__uint128_t) (low)");
-BENCHMARK(BM_BasicLow<__int128_t>)->Name("std::format(__int128_t) (low)");
+BENCHMARK(BM_BasicLow<__uint128_t>)->Name("std::format(__uint128_t) (lower 64 bits only)");
+BENCHMARK(BM_BasicLow<__int128_t>)->Name("std::format(__int128_t) (lower 64 bits only)");
BENCHMARK(BM_Basic<__uint128_t>)->Name("std::format(__uint128_t)");
BENCHMARK(BM_Basic<__int128_t>)->Name("std::format(__int128_t)");
More information about the libcxx-commits
mailing list