[llvm-exegesis] SnippetFile: do create source manager in MCContext
authorRoman Lebedev <lebedev.ri@gmail.com>
Sun, 4 Apr 2021 12:56:43 +0000 (15:56 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Sun, 4 Apr 2021 12:58:39 +0000 (15:58 +0300)
This way, once there's an error in the snippet file (like in the test),
llvm-exegesis won't crash with an assertion failure,
but print a nice diagnostic about the problem.

llvm/test/tools/llvm-exegesis/X86/uops-misspelled-div.s [new file with mode: 0644]
llvm/tools/llvm-exegesis/lib/SnippetFile.cpp

diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-misspelled-div.s b/llvm/test/tools/llvm-exegesis/X86/uops-misspelled-div.s
new file mode 100644 (file)
index 0000000..05e8f4d
--- /dev/null
@@ -0,0 +1,8 @@
+# RUN: not llvm-exegesis -mode=uops -snippets-file=%s 2>&1 | FileCheck %s
+
+# LLVM-EXEGESIS-DEFREG CL 1
+# LLVM-EXEGESIS-DEFREG AX 1
+div8r cl
+
+CHECK: error: invalid instruction mnemonic 'div8r'
+CHECK: llvm-exegesis error: cannot parse asm file
index c71050c..1b8b3e7 100644 (file)
@@ -133,6 +133,7 @@ Expected<std::vector<BenchmarkCode>> readSnippets(const LLVMState &State,
   MCObjectFileInfo ObjectFileInfo;
   const TargetMachine &TM = State.getTargetMachine();
   MCContext Context(TM.getMCAsmInfo(), TM.getMCRegisterInfo(), &ObjectFileInfo);
+  Context.initInlineSourceManager();
   ObjectFileInfo.InitMCObjectFileInfo(TM.getTargetTriple(), /*PIC*/ false,
                                       Context);
   BenchmarkCodeStreamer Streamer(&Context, TM.getMCRegisterInfo(), &Result);