[llvm-exegesis] Add a snippet generator to generate snippets to compute ROB sizes.
llvm-svn: 346394
diff --git a/llvm/tools/llvm-exegesis/lib/Target.cpp b/llvm/tools/llvm-exegesis/lib/Target.cpp
index 0655777..085518c 100644
--- a/llvm/tools/llvm-exegesis/lib/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/Target.cpp
@@ -9,6 +9,7 @@
#include "Target.h"
#include "Latency.h"
+#include "ROBSize.h"
#include "Uops.h"
namespace llvm {
@@ -38,6 +39,31 @@
}
std::unique_ptr<SnippetGenerator>
+ExegesisTarget::createLatencySnippetGenerator(const LLVMState &State) const {
+ return llvm::make_unique<LatencySnippetGenerator>(State);
+}
+
+std::unique_ptr<SnippetGenerator>
+ExegesisTarget::createUopsSnippetGenerator(const LLVMState &State) const {
+ return llvm::make_unique<UopsSnippetGenerator>(State);
+}
+
+std::unique_ptr<SnippetGenerator>
+static createROBSizeSnippetGenerator(const LLVMState &State) {
+ return llvm::make_unique<ROBSizeSnippetGenerator>(State);
+}
+
+std::unique_ptr<BenchmarkRunner>
+ExegesisTarget::createLatencyBenchmarkRunner(const LLVMState &State) const {
+ return llvm::make_unique<LatencyBenchmarkRunner>(State);
+}
+
+std::unique_ptr<BenchmarkRunner>
+ExegesisTarget::createUopsBenchmarkRunner(const LLVMState &State) const {
+ return llvm::make_unique<UopsBenchmarkRunner>(State);
+}
+
+std::unique_ptr<SnippetGenerator>
ExegesisTarget::createSnippetGenerator(InstructionBenchmark::ModeE Mode,
const LLVMState &State) const {
switch (Mode) {
@@ -47,6 +73,8 @@
return createLatencySnippetGenerator(State);
case InstructionBenchmark::Uops:
return createUopsSnippetGenerator(State);
+ case InstructionBenchmark::ROBSize:
+ return createROBSizeSnippetGenerator(State);
}
return nullptr;
}
@@ -58,6 +86,7 @@
case InstructionBenchmark::Unknown:
return nullptr;
case InstructionBenchmark::Latency:
+ case InstructionBenchmark::ROBSize:
return createLatencyBenchmarkRunner(State);
case InstructionBenchmark::Uops:
return createUopsBenchmarkRunner(State);
@@ -65,26 +94,6 @@
return nullptr;
}
-std::unique_ptr<SnippetGenerator>
-ExegesisTarget::createLatencySnippetGenerator(const LLVMState &State) const {
- return llvm::make_unique<LatencySnippetGenerator>(State);
-}
-
-std::unique_ptr<SnippetGenerator>
-ExegesisTarget::createUopsSnippetGenerator(const LLVMState &State) const {
- return llvm::make_unique<UopsSnippetGenerator>(State);
-}
-
-std::unique_ptr<BenchmarkRunner>
-ExegesisTarget::createLatencyBenchmarkRunner(const LLVMState &State) const {
- return llvm::make_unique<LatencyBenchmarkRunner>(State);
-}
-
-std::unique_ptr<BenchmarkRunner>
-ExegesisTarget::createUopsBenchmarkRunner(const LLVMState &State) const {
- return llvm::make_unique<UopsBenchmarkRunner>(State);
-}
-
static_assert(std::is_pod<PfmCountersInfo>::value,
"We shouldn't have dynamic initialization here");
const PfmCountersInfo PfmCountersInfo::Default = {nullptr, nullptr, nullptr, 0u};
@@ -123,6 +132,11 @@
llvm_unreachable("Not yet implemented");
}
+ std::vector<llvm::MCInst> copyReg(const llvm::MCSubtargetInfo &STI,
+ unsigned ToReg, unsigned FromReg) const override {
+ llvm_unreachable("Not yet implemented");
+ }
+
bool matchesArch(llvm::Triple::ArchType Arch) const override {
llvm_unreachable("never called");
return false;