//===-- MemorySizeDistributions ---------------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // Memory functions operate on buffers of certain sizes. This file provides // probability distributions observed at runtime for a set of applications. // These distributions are used to benchmark and compare memory functions // implementations. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H #define LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H #include #include namespace llvm { namespace libc_benchmarks { /// A simple POD exposing caracteristics of a memory function size /// distributions. The underlying data is immutable. struct MemorySizeDistribution { StringRef Name; // The name of the distribution. ArrayRef Probabilities; // Size indexed array of probabilities. }; /// Returns a list of memmove size distributions. ArrayRef getMemmoveSizeDistributions(); /// Returns a list of memcpy size distributions. ArrayRef getMemcpySizeDistributions(); /// Returns a list of memset size distributions. ArrayRef getMemsetSizeDistributions(); /// Returns a list of memcmp size distributions. ArrayRef getMemcmpSizeDistributions(); /// Returns the first MemorySizeDistribution from Distributions with the /// specified Name. MemorySizeDistribution getDistributionOrDie(ArrayRef Distributions, StringRef Name); } // namespace libc_benchmarks } // namespace llvm #endif // LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H