diff options
author | Konstantin Varlamov <var-const@users.noreply.github.com> | 2023-09-29 07:27:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-29 10:27:20 -0400 |
commit | dd788af74a33b0014b90e8fccf3fe377ee67cb29 (patch) | |
tree | aa959ab9e0b18da824ad31451ecdbf5d14d53f22 /libcxx/benchmarks | |
parent | ec9d80ec43f5761a34c4a785c67d9e7d21ec8bda (diff) | |
download | llvm-dd788af74a33b0014b90e8fccf3fe377ee67cb29.zip llvm-dd788af74a33b0014b90e8fccf3fe377ee67cb29.tar.gz llvm-dd788af74a33b0014b90e8fccf3fe377ee67cb29.tar.bz2 |
Reapply "[libc++][ranges] Add benchmarks for the `from_range` constructors of `vector` and `deque`." (#67753)
This reverts commit 10edd5d9436153ace82009a04900ac67d3adc202 and guards
against older versions of GCC to work around the problem.
Diffstat (limited to 'libcxx/benchmarks')
-rw-r--r-- | libcxx/benchmarks/CMakeLists.txt | 22 | ||||
-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, 49 insertions, 1 deletions
diff --git a/libcxx/benchmarks/CMakeLists.txt b/libcxx/benchmarks/CMakeLists.txt index 041c0d3..56d22af0 100644 --- a/libcxx/benchmarks/CMakeLists.txt +++ b/libcxx/benchmarks/CMakeLists.txt @@ -76,7 +76,27 @@ 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. This is a workaround to prevent older versions of GCC +# from failing the configure step because they don't support C++23. +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "13.0") + return() +endif() +#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) +# ibm-clang does not recognize the cxx_std_23 flag, so use this as a temporary +# workaround on AIX as well. +elseif (${CMAKE_SYSTEM_NAME} MATCHES "AIX") + add_compile_options(-std=c++23) +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 f738c5e..071e46c 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(); |