[libcxx-commits] [libcxx] ef42e9c - [libc++] Remove allocation.bench.cpp (#120767)
via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Dec 20 12:33:55 PST 2024
Author: Louis Dionne
Date: 2024-12-20T15:33:52-05:00
New Revision: ef42e9c59aae112031d6ccbbc560d559730507c8
URL: https://github.com/llvm/llvm-project/commit/ef42e9c59aae112031d6ccbbc560d559730507c8
DIFF: https://github.com/llvm/llvm-project/commit/ef42e9c59aae112031d6ccbbc560d559730507c8.diff
LOG: [libc++] Remove allocation.bench.cpp (#120767)
That benchmark isn't really useful, since it doesn't benchmark anything
from libc++ (besides `operator new`). The implementation of the
benchmark also has serious problems like the fact that it allocates an
unknown amount of memory without deallocating it.
Added:
Modified:
Removed:
libcxx/test/benchmarks/allocation.bench.cpp
################################################################################
diff --git a/libcxx/test/benchmarks/allocation.bench.cpp b/libcxx/test/benchmarks/allocation.bench.cpp
deleted file mode 100644
index bdccaa2c133bd7..00000000000000
--- a/libcxx/test/benchmarks/allocation.bench.cpp
+++ /dev/null
@@ -1,125 +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
-
-// These compiler versions and platforms don't enable sized deallocation by default.
-// ADDITIONAL_COMPILE_FLAGS(clang-17): -fsized-deallocation
-// ADDITIONAL_COMPILE_FLAGS(clang-18): -fsized-deallocation
-// ADDITIONAL_COMPILE_FLAGS(apple-clang-15): -fsized-deallocation
-// ADDITIONAL_COMPILE_FLAGS(apple-clang-16): -fsized-deallocation
-// ADDITIONAL_COMPILE_FLAGS(target=x86_64-w64-windows-gnu): -fsized-deallocation
-// ADDITIONAL_COMPILE_FLAGS(target=i686-w64-windows-gnu): -fsized-deallocation
-
-#include "benchmark/benchmark.h"
-
-#include <cassert>
-#include <cstdlib>
-#include <new>
-#include <vector>
-
-#include "test_macros.h"
-
-struct PointerList {
- PointerList* Next = nullptr;
-};
-
-struct MallocWrapper {
- __attribute__((always_inline)) static void* Allocate(size_t N) { return std::malloc(N); }
- __attribute__((always_inline)) static void Deallocate(void* P, size_t) { std::free(P); }
-};
-
-struct NewWrapper {
- __attribute__((always_inline)) static void* Allocate(size_t N) { return ::operator new(N); }
- __attribute__((always_inline)) static void Deallocate(void* P, size_t) { ::operator delete(P); }
-};
-
-#ifdef TEST_COMPILER_CLANG
-struct BuiltinNewWrapper {
- __attribute__((always_inline)) static void* Allocate(size_t N) { return __builtin_operator_new(N); }
- __attribute__((always_inline)) static void Deallocate(void* P, size_t) { __builtin_operator_delete(P); }
-};
-
-struct BuiltinSizedNewWrapper {
- __attribute__((always_inline)) static void* Allocate(size_t N) { return __builtin_operator_new(N); }
- __attribute__((always_inline)) static void Deallocate(void* P, size_t N) { __builtin_operator_delete(P, N); }
-};
-#endif
-
-template <class AllocWrapper>
-static void BM_AllocateAndDeallocate(benchmark::State& st) {
- const size_t alloc_size = st.range(0);
- while (st.KeepRunning()) {
- void* p = AllocWrapper::Allocate(alloc_size);
- benchmark::DoNotOptimize(p);
- AllocWrapper::Deallocate(p, alloc_size);
- }
-}
-
-template <class AllocWrapper>
-static void BM_AllocateOnly(benchmark::State& st) {
- const size_t alloc_size = st.range(0);
- PointerList* Start = nullptr;
-
- while (st.KeepRunning()) {
- PointerList* p = (PointerList*)AllocWrapper::Allocate(alloc_size);
- benchmark::DoNotOptimize(p);
- p->Next = Start;
- Start = p;
- }
-
- PointerList* Next = Start;
- while (Next) {
- PointerList* Tmp = Next;
- Next = Tmp->Next;
- AllocWrapper::Deallocate(Tmp, alloc_size);
- }
-}
-
-template <class AllocWrapper>
-static void BM_DeallocateOnly(benchmark::State& st) {
- const size_t alloc_size = st.range(0);
- const auto NumAllocs = st.max_iterations;
-
- std::vector<void*> Pointers(NumAllocs);
- for (auto& p : Pointers) {
- p = AllocWrapper::Allocate(alloc_size);
- }
-
- void** Data = Pointers.data();
- [[maybe_unused]] void** const End = Pointers.data() + Pointers.size();
- while (st.KeepRunning()) {
- AllocWrapper::Deallocate(*Data, alloc_size);
- Data += 1;
- }
- assert(Data == End);
-}
-
-static int RegisterAllocBenchmarks() {
- using FnType = void (*)(benchmark::State&);
- struct {
- const char* name;
- FnType func;
- } TestCases[] = {
- {"BM_Malloc", &BM_AllocateAndDeallocate<MallocWrapper>},
- {"BM_New", &BM_AllocateAndDeallocate<NewWrapper>},
-#ifdef TEST_COMPILER_CLANG
- {"BM_BuiltinNewDelete", BM_AllocateAndDeallocate<BuiltinNewWrapper>},
- {"BM_BuiltinSizedNewDelete", BM_AllocateAndDeallocate<BuiltinSizedNewWrapper>},
- {"BM_BuiltinNewAllocateOnly", BM_AllocateOnly<BuiltinSizedNewWrapper>},
- {"BM_BuiltinNewSizedDeallocateOnly", BM_DeallocateOnly<BuiltinSizedNewWrapper>},
-#endif
- };
- for (auto TC : TestCases) {
- benchmark::RegisterBenchmark(TC.name, TC.func)->Range(16, 4096 * 2);
- }
- return 0;
-}
-int Sink = RegisterAllocBenchmarks();
-
-BENCHMARK_MAIN();
More information about the libcxx-commits
mailing list