Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libc++] Remove allocation.bench.cpp #120767

Merged
merged 1 commit into from
Dec 20, 2024

Conversation

ldionne
Copy link
Member

@ldionne ldionne commented Dec 20, 2024

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.

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.
@ldionne ldionne requested a review from a team as a code owner December 20, 2024 16:21
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Dec 20, 2024
@llvmbot
Copy link
Member

llvmbot commented Dec 20, 2024

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

Changes

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.


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

1 Files Affected:

  • (removed) libcxx/test/benchmarks/allocation.bench.cpp (-125)
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();

@ldionne ldionne merged commit ef42e9c into llvm:main Dec 20, 2024
61 of 63 checks passed
@ldionne ldionne deleted the review/remove-bm-allocate branch December 20, 2024 20:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants