1//===-- LatencyBenchmarkRunner.h --------------------------------*- 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/// \file
10/// A BenchmarkRunner implementation to measure instruction latencies.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
15#define LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
16
17#include "BenchmarkRunner.h"
18#include "Target.h"
19
20namespace llvm {
21namespace exegesis {
22
23class LatencyBenchmarkRunner : public BenchmarkRunner {
24public:
25 LatencyBenchmarkRunner(const LLVMState &State, Benchmark::ModeE Mode,
26 BenchmarkPhaseSelectorE BenchmarkPhaseSelector,
27 Benchmark::ResultAggregationModeE ResultAggMode,
28 ExecutionModeE ExecutionMode,
29 ArrayRef<ValidationEvent> ValCounters,
30 unsigned BenchmarkRepeatCount);
31 ~LatencyBenchmarkRunner() override;
32
33private:
34 Expected<std::vector<BenchmarkMeasure>>
35 runMeasurements(const FunctionExecutor &Executor) const override;
36
37 Benchmark::ResultAggregationModeE ResultAggMode;
38 unsigned NumMeasurements;
39};
40} // namespace exegesis
41} // namespace llvm
42
43#endif // LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
44