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