[libcxx-commits] [libcxx] [libc++] Add a benchmark for std::reverse (PR #125262)

via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jan 31 09:53:34 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

<details>
<summary>Changes</summary>



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


1 Files Affected:

- (added) libcxx/test/benchmarks/algorithms/reverse.bench.cpp (+48) 


``````````diff
diff --git a/libcxx/test/benchmarks/algorithms/reverse.bench.cpp b/libcxx/test/benchmarks/algorithms/reverse.bench.cpp
new file mode 100644
index 000000000000000..2d8dd819ac24c23
--- /dev/null
+++ b/libcxx/test/benchmarks/algorithms/reverse.bench.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// 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, c++20
+
+#include <algorithm>
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include <benchmark/benchmark.h>
+#include "../GenerateInput.h"
+
+template <class T>
+static void bm_reverse(benchmark::State& state) {
+  std::size_t const n = state.range();
+  std::vector<T> vec;
+  std::generate_n(std::back_inserter(vec), n, [] { return Generate<T>::cheap(); });
+  for (auto _ : state) {
+    std::reverse(vec.begin(), vec.end());
+    benchmark::DoNotOptimize(vec);
+  }
+}
+BENCHMARK(bm_reverse<int>)->Name("std::reverse(vector<int>)")->DenseRange(1, 8)->Range(16, 1 << 20);
+BENCHMARK(bm_reverse<std::string>)->Name("std::reverse(vector<string>)")->DenseRange(1, 8)->Range(16, 1 << 20);
+
+template <class T>
+static void bm_ranges_reverse(benchmark::State& state) {
+  std::size_t const n = state.range();
+  std::vector<T> vec;
+  std::generate_n(std::back_inserter(vec), n, [] { return Generate<T>::cheap(); });
+  for (auto _ : state) {
+    std::ranges::reverse(vec.begin(), vec.end());
+    benchmark::DoNotOptimize(vec);
+  }
+}
+BENCHMARK(bm_ranges_reverse<int>)->Name("ranges::reverse(vector<int>)")->DenseRange(1, 8)->Range(16, 1 << 20);
+BENCHMARK(bm_ranges_reverse<std::string>)
+    ->Name("ranges::reverse(vector<string>)")
+    ->DenseRange(1, 8)
+    ->Range(16, 1 << 20);
+
+BENCHMARK_MAIN();

``````````

</details>


https://github.com/llvm/llvm-project/pull/125262


More information about the libcxx-commits mailing list