[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;