diff options
author | varconst <varconsteq@gmail.com> | 2023-09-05 15:52:39 -0700 |
---|---|---|
committer | Konstantin Varlamov <varconsteq@gmail.com> | 2023-09-05 15:57:45 -0700 |
commit | 390ac823178fc1073612b4c8a38835f441138d9d (patch) | |
tree | fd13ae3d2aef1f7f1752b7aae93133d2b33252cb /libcxx/benchmarks | |
parent | 695c59c4a2af4728f3edf8c6a0b3c63565cba0f8 (diff) | |
download | llvm-390ac823178fc1073612b4c8a38835f441138d9d.zip llvm-390ac823178fc1073612b4c8a38835f441138d9d.tar.gz llvm-390ac823178fc1073612b4c8a38835f441138d9d.tar.bz2 |
[libc++][ranges] Add benchmarks for the `from_range` constructors of `vector` and `deque`.
Differential Revision: https://reviews.llvm.org/D150747
Diffstat (limited to 'libcxx/benchmarks')
-rw-r--r-- | libcxx/benchmarks/CMakeLists.txt | 11 | ||||
-rw-r--r-- | libcxx/benchmarks/ContainerBenchmarks.h | 10 | ||||
-rw-r--r-- | libcxx/benchmarks/deque.bench.cpp | 9 | ||||
-rw-r--r-- | libcxx/benchmarks/vector_operations.bench.cpp | 9 |
4 files changed, 38 insertions, 1 deletions
diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt index 92f295e..d79c647 100644 --- a/libcxx/benchmarks/CMakeLists.txt +++ b/libcxx/benchmarks/CMakeLists.txt @@ -76,7 +76,16 @@ set(BENCHMARK_LIBCXX_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx) set(BENCHMARK_NATIVE_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native) add_library( cxx-benchmarks-flags INTERFACE) -target_compile_features( cxx-benchmarks-flags INTERFACE cxx_std_20) +#TODO(cmake): remove the `add_compile_options`. Currently we have to explicitly +# pass the `std:c++latest` flag on Windows to work around an issue where +# requesting `cxx_std_23` results in an error -- somehow CMake fails to +# translate the `c++23` flag into `c++latest`, and the highest numbered C++ +# version that MSVC flags support is C++20. +if (MSVC) + add_compile_options(/std:c++latest) +else() + target_compile_features( cxx-benchmarks-flags INTERFACE cxx_std_23) +endif() target_compile_options( cxx-benchmarks-flags INTERFACE -fsized-deallocation -nostdinc++) target_include_directories(cxx-benchmarks-flags INTERFACE "${LIBCXX_GENERATED_INCLUDE_DIR}" INTERFACE "${BENCHMARK_LIBCXX_INSTALL}/include" diff --git a/libcxx/benchmarks/ContainerBenchmarks.h b/libcxx/benchmarks/ContainerBenchmarks.h index bf027f5..5ab6f61 100644 --- a/libcxx/benchmarks/ContainerBenchmarks.h +++ b/libcxx/benchmarks/ContainerBenchmarks.h @@ -70,6 +70,16 @@ void BM_ConstructIterIter(benchmark::State& st, Container, GenInputs gen) { } template <class Container, class GenInputs> +void BM_ConstructFromRange(benchmark::State& st, Container, GenInputs gen) { + auto in = gen(st.range(0)); + benchmark::DoNotOptimize(&in); + while (st.KeepRunning()) { + Container c(std::from_range, in); + DoNotOptimizeData(c); + } +} + +template <class Container, class GenInputs> void BM_InsertValue(benchmark::State& st, Container c, GenInputs gen) { auto in = gen(st.range(0)); const auto end = in.end(); diff --git a/libcxx/benchmarks/deque.bench.cpp b/libcxx/benchmarks/deque.bench.cpp index ced2ba2..d6dadaa 100644 --- a/libcxx/benchmarks/deque.bench.cpp +++ b/libcxx/benchmarks/deque.bench.cpp @@ -30,4 +30,13 @@ BENCHMARK_CAPTURE(BM_ConstructIterIter, deque_size_t, std::deque<size_t>{}, getR BENCHMARK_CAPTURE(BM_ConstructIterIter, deque_string, std::deque<std::string>{}, getRandomStringInputs) ->Arg(TestNumInputs); +BENCHMARK_CAPTURE(BM_ConstructFromRange, deque_char, std::deque<char>{}, getRandomIntegerInputs<char>) + ->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_ConstructFromRange, deque_size_t, std::deque<size_t>{}, getRandomIntegerInputs<size_t>) + ->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_ConstructFromRange, deque_string, std::deque<std::string>{}, getRandomStringInputs) + ->Arg(TestNumInputs); + BENCHMARK_MAIN(); diff --git a/libcxx/benchmarks/vector_operations.bench.cpp b/libcxx/benchmarks/vector_operations.bench.cpp index e02f0ee..be0bee6 100644 --- a/libcxx/benchmarks/vector_operations.bench.cpp +++ b/libcxx/benchmarks/vector_operations.bench.cpp @@ -30,4 +30,13 @@ BENCHMARK_CAPTURE(BM_ConstructIterIter, vector_size_t, std::vector<size_t>{}, ge BENCHMARK_CAPTURE(BM_ConstructIterIter, vector_string, std::vector<std::string>{}, getRandomStringInputs) ->Arg(TestNumInputs); +BENCHMARK_CAPTURE(BM_ConstructFromRange, vector_char, std::vector<char>{}, getRandomIntegerInputs<char>) + ->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_ConstructFromRange, vector_size_t, std::vector<size_t>{}, getRandomIntegerInputs<size_t>) + ->Arg(TestNumInputs); + +BENCHMARK_CAPTURE(BM_ConstructFromRange, vector_string, std::vector<std::string>{}, getRandomStringInputs) + ->Arg(TestNumInputs); + BENCHMARK_MAIN(); |