xref: /llvm-project/libc/benchmarks/LibcBenchmark.cpp (revision d768bf994f508d7eaf9541a568be3d71096febf5)
1438f7fc0SSiva Chandra Reddy //===-- Benchmark function -----------------------------------------------===//
2438f7fc0SSiva Chandra Reddy //
3438f7fc0SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4438f7fc0SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5438f7fc0SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6438f7fc0SSiva Chandra Reddy //
7438f7fc0SSiva Chandra Reddy //===----------------------------------------------------------------------===//
8438f7fc0SSiva Chandra Reddy 
9438f7fc0SSiva Chandra Reddy #include "LibcBenchmark.h"
10438f7fc0SSiva Chandra Reddy #include "llvm/ADT/StringRef.h"
11*d768bf99SArchibald Elliott #include "llvm/TargetParser/Host.h"
12438f7fc0SSiva Chandra Reddy 
13438f7fc0SSiva Chandra Reddy namespace llvm {
14438f7fc0SSiva Chandra Reddy namespace libc_benchmarks {
15438f7fc0SSiva Chandra Reddy 
checkRequirements()16438f7fc0SSiva Chandra Reddy void checkRequirements() {
17438f7fc0SSiva Chandra Reddy   const auto &CpuInfo = benchmark::CPUInfo::Get();
185dda2efdSMircea Trofin   if (CpuInfo.scaling == benchmark::CPUInfo::ENABLED)
19438f7fc0SSiva Chandra Reddy     report_fatal_error(
20438f7fc0SSiva Chandra Reddy         "CPU scaling is enabled, the benchmark real time measurements may be "
21438f7fc0SSiva Chandra Reddy         "noisy and will incur extra overhead.");
22438f7fc0SSiva Chandra Reddy }
23438f7fc0SSiva Chandra Reddy 
get()24438f7fc0SSiva Chandra Reddy HostState HostState::get() {
25438f7fc0SSiva Chandra Reddy   const auto &CpuInfo = benchmark::CPUInfo::Get();
26438f7fc0SSiva Chandra Reddy   HostState H;
27438f7fc0SSiva Chandra Reddy   H.CpuFrequency = CpuInfo.cycles_per_second;
28438f7fc0SSiva Chandra Reddy   H.CpuName = llvm::sys::getHostCPUName().str();
29438f7fc0SSiva Chandra Reddy   for (const auto &BenchmarkCacheInfo : CpuInfo.caches) {
30438f7fc0SSiva Chandra Reddy     CacheInfo CI;
31438f7fc0SSiva Chandra Reddy     CI.Type = BenchmarkCacheInfo.type;
32438f7fc0SSiva Chandra Reddy     CI.Level = BenchmarkCacheInfo.level;
33438f7fc0SSiva Chandra Reddy     CI.Size = BenchmarkCacheInfo.size;
34438f7fc0SSiva Chandra Reddy     CI.NumSharing = BenchmarkCacheInfo.num_sharing;
35438f7fc0SSiva Chandra Reddy     H.Caches.push_back(std::move(CI));
36438f7fc0SSiva Chandra Reddy   }
37438f7fc0SSiva Chandra Reddy   return H;
38438f7fc0SSiva Chandra Reddy }
39438f7fc0SSiva Chandra Reddy 
40438f7fc0SSiva Chandra Reddy } // namespace libc_benchmarks
41438f7fc0SSiva Chandra Reddy } // namespace llvm
42