Mercurial > hg > CbC > CbC_llvm
view llvm/tools/llvm-exegesis/lib/UopsBenchmarkRunner.cpp @ 201:a96fbbdf2d0f
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 04 Jun 2021 21:07:06 +0900 |
parents | 1d019706d866 |
children | 1f2b6ac9f198 |
line wrap: on
line source
//===-- UopsBenchmarkRunner.cpp ---------------------------------*- 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 // //===----------------------------------------------------------------------===// #include "UopsBenchmarkRunner.h" #include "Target.h" namespace llvm { namespace exegesis { UopsBenchmarkRunner::~UopsBenchmarkRunner() = default; Expected<std::vector<BenchmarkMeasure>> UopsBenchmarkRunner::runMeasurements(const FunctionExecutor &Executor) const { std::vector<BenchmarkMeasure> Result; const PfmCountersInfo &PCI = State.getPfmCounters(); // Uops per port. for (const auto *IssueCounter = PCI.IssueCounters, *IssueCounterEnd = PCI.IssueCounters + PCI.NumIssueCounters; IssueCounter != IssueCounterEnd; ++IssueCounter) { if (!IssueCounter->Counter) continue; auto ExpectedCounterValue = Executor.runAndMeasure(IssueCounter->Counter); if (!ExpectedCounterValue) return ExpectedCounterValue.takeError(); Result.push_back(BenchmarkMeasure::Create(IssueCounter->ProcResName, *ExpectedCounterValue)); } // NumMicroOps. if (const char *const UopsCounter = PCI.UopsCounter) { auto ExpectedCounterValue = Executor.runAndMeasure(UopsCounter); if (!ExpectedCounterValue) return ExpectedCounterValue.takeError(); Result.push_back( BenchmarkMeasure::Create("NumMicroOps", *ExpectedCounterValue)); } return std::move(Result); } } // namespace exegesis } // namespace llvm