[llvm] c72bff6 - [llvm-exegesis] Set up AsmTargetStreamer in readSnippets

Guillaume Chatelet via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 16 04:48:53 PST 2019


Author: Guillaume Chatelet
Date: 2019-12-16T13:37:59+01:00
New Revision: c72bff682193118c054eb3d3c59eb718042787da

URL: https://github.com/llvm/llvm-project/commit/c72bff682193118c054eb3d3c59eb718042787da
DIFF: https://github.com/llvm/llvm-project/commit/c72bff682193118c054eb3d3c59eb718042787da.diff

LOG: [llvm-exegesis] Set up AsmTargetStreamer in readSnippets

Summary: This is a follow up on D71137 properly setting up the AsmTargetStreamer prior to AsmParser::Run call.

Reviewers: courbet, mstojanovic

Subscribers: tschuett, mikhail.ramalho, llvm-commits, petarj, atanasyan

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71468

Added: 
    

Modified: 
    llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
    llvm/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp b/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
index 63df5c634537..7941bfa90000 100644
--- a/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
+++ b/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
@@ -9,6 +9,7 @@
 #include "SnippetFile.h"
 #include "Error.h"
 #include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCInstPrinter.h"
 #include "llvm/MC/MCObjectFileInfo.h"
 #include "llvm/MC/MCParser/MCAsmParser.h"
 #include "llvm/MC/MCParser/MCTargetAsmParser.h"
@@ -135,6 +136,21 @@ Expected<std::vector<BenchmarkCode>> readSnippets(const LLVMState &State,
   ObjectFileInfo.InitMCObjectFileInfo(TM.getTargetTriple(), /*PIC*/ false,
                                       Context);
   BenchmarkCodeStreamer Streamer(&Context, TM.getMCRegisterInfo(), &Result);
+
+  std::string Error;
+  raw_string_ostream ErrorStream(Error);
+  formatted_raw_ostream InstPrinterOStream(ErrorStream);
+  const std::unique_ptr<MCInstPrinter> InstPrinter(
+      TM.getTarget().createMCInstPrinter(
+          TM.getTargetTriple(), TM.getMCAsmInfo()->getAssemblerDialect(),
+          *TM.getMCAsmInfo(), *TM.getMCInstrInfo(), *TM.getMCRegisterInfo()));
+  // The following call will take care of calling Streamer.setTargetStreamer.
+  TM.getTarget().createAsmTargetStreamer(Streamer, InstPrinterOStream,
+                                         InstPrinter.get(),
+                                         TM.Options.MCOptions.AsmVerbose);
+  if (!Streamer.getTargetStreamer())
+    return make_error<Failure>("cannot create target asm streamer");
+
   const std::unique_ptr<MCAsmParser> AsmParser(
       createMCAsmParser(SM, Context, Streamer, *TM.getMCAsmInfo()));
   if (!AsmParser)

diff  --git a/llvm/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp b/llvm/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp
index 04ba51cef277..da3974775be6 100644
--- a/llvm/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp
+++ b/llvm/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp
@@ -115,6 +115,13 @@ TEST_F(X86SnippetFileTest, MissingParam) {
   consumeError(std::move(Error));
 }
 
+TEST_F(X86SnippetFileTest, NoAsmStreamer) {
+  auto Snippets = TestCommon(R"(
+    .cv_fpo_proc foo 4
+  )");
+  EXPECT_FALSE((bool)Snippets.takeError());
+}
+
 } // namespace
 } // namespace exegesis
 } // namespace llvm


        


More information about the llvm-commits mailing list