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 Reddyvoid 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 ReddyHostState 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