• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- Latency.h -----------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// A BenchmarkRunner implementation to measure instruction latencies.
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
16 #define LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
17 
18 #include "BenchmarkRunner.h"
19 #include "MCInstrDescView.h"
20 
21 namespace exegesis {
22 
23 class LatencyBenchmarkRunner : public BenchmarkRunner {
24 public:
LatencyBenchmarkRunner(const LLVMState & State)25   LatencyBenchmarkRunner(const LLVMState &State)
26       : BenchmarkRunner(State, InstructionBenchmark::Latency) {}
27   ~LatencyBenchmarkRunner() override;
28 
29   llvm::Expected<SnippetPrototype>
30   generatePrototype(unsigned Opcode) const override;
31 
32 private:
33   llvm::Error isInfeasible(const llvm::MCInstrDesc &MCInstrDesc) const;
34 
35   llvm::Expected<SnippetPrototype> generateTwoInstructionPrototype(
36       const Instruction &Instr) const;
37 
38   std::vector<BenchmarkMeasure>
39   runMeasurements(const ExecutableFunction &EF,
40                   const unsigned NumRepetitions) const override;
41 
42   virtual const char *getCounterName() const;
43 };
44 
45 } // namespace exegesis
46 
47 #endif // LLVM_TOOLS_LLVM_EXEGESIS_LATENCY_H
48