summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2019-12-13 16:14:39 +0100
committerGuillaume Chatelet <gchatelet@google.com>2019-12-16 13:37:59 +0100
commitc72bff682193118c054eb3d3c59eb718042787da (patch)
treead1e60c69be410b8f80dae35ca44f5b3fc3ec2a1 /llvm/tools
parent181ab91efc9fb08dedda10a2fbc5fccb83ce8799 (diff)
downloadbcm5719-llvm-c72bff682193118c054eb3d3c59eb718042787da.tar.gz
bcm5719-llvm-c72bff682193118c054eb3d3c59eb718042787da.zip
[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
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-exegesis/lib/SnippetFile.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp b/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
index 63df5c63453..7941bfa9000 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)
OpenPOWER on IntegriCloud