1 //===-- MemorySizeDistributions ---------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Memory functions operate on buffers of certain sizes. This file provides
10 // probability distributions observed at runtime for a set of applications.
11 // These distributions are used to benchmark and compare memory functions
12 // implementations.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H
17 #define LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H
18 
19 #include <llvm/ADT/ArrayRef.h>
20 #include <llvm/ADT/StringRef.h>
21 
22 namespace llvm {
23 namespace libc_benchmarks {
24 
25 /// A simple POD exposing caracteristics of a memory function size
26 /// distributions. The underlying data is immutable.
27 struct MemorySizeDistribution {
28   StringRef Name;                 // The name of the distribution.
29   ArrayRef<double> Probabilities; // Size indexed array of probabilities.
30 };
31 
32 /// Returns a list of memcpy size distributions.
33 ArrayRef<MemorySizeDistribution> getMemcpySizeDistributions();
34 
35 /// Returns a list of memset size distributions.
36 ArrayRef<MemorySizeDistribution> getMemsetSizeDistributions();
37 
38 /// Returns a list of memcmp size distributions.
39 ArrayRef<MemorySizeDistribution> getMemcmpSizeDistributions();
40 
41 } // namespace libc_benchmarks
42 } // namespace llvm
43 
44 #endif // LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H
45