summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2018-09-13 07:40:53 +0000
committerClement Courbet <courbet@google.com>2018-09-13 07:40:53 +0000
commitd939f6d01396201d1b8fb5dba652e9528276e79e (patch)
treea6a1ce6223ee509273ef8b3f6d7c9a080ee6034a /llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h
parent58c3dee3b3cdf103680d80b61167dda9612d3e0d (diff)
downloadbcm5719-llvm-d939f6d01396201d1b8fb5dba652e9528276e79e.tar.gz
bcm5719-llvm-d939f6d01396201d1b8fb5dba652e9528276e79e.zip
[llvm-exegesis][NFC] Split BenchmarkRunner class
Summary: The snippet-generation part goes to the SnippetGenerator class. This will allow benchmarking arbitrary code (see PR38437). Reviewers: gchatelet Subscribers: mgorny, tschuett, llvm-commits Differential Revision: https://reviews.llvm.org/D51979 llvm-svn: 342117
Diffstat (limited to 'llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h')
-rw-r--r--llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h48
1 files changed, 3 insertions, 45 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h
index 5d7ea25ecb8..07ab23c336b 100644
--- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h
+++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h
@@ -17,10 +17,10 @@
#define LLVM_TOOLS_LLVM_EXEGESIS_BENCHMARKRUNNER_H
#include "Assembler.h"
+#include "BenchmarkCode.h"
#include "BenchmarkResult.h"
#include "LlvmState.h"
#include "MCInstrDescView.h"
-#include "RegisterAliasing.h"
#include "llvm/MC/MCInst.h"
#include "llvm/Support/Error.h"
#include <cstdlib>
@@ -36,23 +36,6 @@ public:
BenchmarkFailure(const llvm::Twine &S);
};
-// A collection of instructions that are to be assembled, executed and measured.
-struct BenchmarkCode {
- // The sequence of instructions that are to be repeated.
- std::vector<llvm::MCInst> Instructions;
-
- // Before the code is executed some instructions are added to setup the
- // registers initial values.
- std::vector<unsigned> RegsToDef;
-
- // We also need to provide the registers that are live on entry for the
- // assembler to generate proper prologue/epilogue.
- std::vector<unsigned> LiveIns;
-
- // Informations about how this configuration was built.
- std::string Info;
-};
-
// Common code for all benchmark modes.
class BenchmarkRunner {
public:
@@ -61,12 +44,8 @@ public:
virtual ~BenchmarkRunner();
- llvm::Expected<std::vector<InstructionBenchmark>>
- run(unsigned Opcode, unsigned NumRepetitions);
-
- // Given a snippet, computes which registers the setup code needs to define.
- std::vector<unsigned>
- computeRegsToDef(const std::vector<InstructionBuilder> &Snippet) const;
+ InstructionBenchmark runConfiguration(const BenchmarkCode &Configuration,
+ unsigned NumRepetitions) const;
// Scratch space to run instructions that touch memory.
struct ScratchSpace {
@@ -87,33 +66,12 @@ public:
protected:
const LLVMState &State;
- const RegisterAliasingTrackerCache RATC;
-
- // Generates a single code template that has a self-dependency.
- llvm::Expected<CodeTemplate>
- generateSelfAliasingCodeTemplate(const Instruction &Instr) const;
- // Generates a single code template without assignment constraints.
- llvm::Expected<CodeTemplate>
- generateUnconstrainedCodeTemplate(const Instruction &Instr,
- llvm::StringRef Msg) const;
private:
- // API to be implemented by subclasses.
- virtual llvm::Expected<CodeTemplate>
- generateCodeTemplate(unsigned Opcode) const = 0;
-
virtual std::vector<BenchmarkMeasure>
runMeasurements(const ExecutableFunction &EF, ScratchSpace &Scratch,
const unsigned NumRepetitions) const = 0;
- // Internal helpers.
- InstructionBenchmark runConfiguration(const BenchmarkCode &Configuration,
- unsigned NumRepetitions) const;
-
- // Calls generateCodeTemplate and expands it into one or more BenchmarkCode.
- llvm::Expected<std::vector<BenchmarkCode>>
- generateConfigurations(unsigned Opcode) const;
-
llvm::Expected<std::string>
writeObjectFile(const BenchmarkCode &Configuration,
llvm::ArrayRef<llvm::MCInst> Code) const;
OpenPOWER on IntegriCloud