[PATCH] D41778: Improve diagnostics for instruction mapping
Aleksandar Beserminji via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 5 10:13:53 PST 2018
abeserminji created this revision.
abeserminji added reviewers: petarj, sdardis.
Herald added a subscriber: arichardson.
While mapping instructions for microMIPS, I made an error in capitalization of one field which led to a segfault. This patch improves diagnostic for this case, displaying reasonable message instead of segfault.
Repository:
rL LLVM
https://reviews.llvm.org/D41778
Files:
test/TableGen/RelTest.td
utils/TableGen/CodeGenMapTable.cpp
Index: utils/TableGen/CodeGenMapTable.cpp
===================================================================
--- utils/TableGen/CodeGenMapTable.cpp
+++ utils/TableGen/CodeGenMapTable.cpp
@@ -243,7 +243,11 @@
std::vector<Init*> KeyValue;
ListInit *RowFields = InstrMapDesc.getRowFields();
for (Init *RowField : RowFields->getValues()) {
- Init *CurInstrVal = CurInstr->getValue(RowField)->getValue();
+ RecordVal *recVal = CurInstr->getValue(RowField);
+ if (recVal == nullptr)
+ PrintFatalError("No value " + RowField->getAsString() + " found in \"" +
+ CurInstr->getName() + "\" instruction description.");
+ Init *CurInstrVal = recVal->getValue();
KeyValue.push_back(CurInstrVal);
}
Index: test/TableGen/RelTest.td
===================================================================
--- /dev/null
+++ test/TableGen/RelTest.td
@@ -0,0 +1,36 @@
+// RUN: not llvm-tblgen -gen-instr-info -I %p/../../include %s 2>&1 | FileCheck %s
+
+include "llvm/Target/Target.td"
+
+class SimpleReg<string n> : Register<n> {
+ let Namespace = "Simple";
+}
+def R0 : SimpleReg<"r0">;
+def SimpleRegClass : RegisterClass<"Simple",[i32],0,(add R0)>;
+def SimpleInstrInfo : InstrInfo;
+
+def SimpleTarget : Target {
+ let InstructionSet = SimpleInstrInfo;
+}
+
+class SimpleRel;
+
+def REL_DEF : InstrMapping {
+ let FilterClass = "SimpleRel";
+ let RowFields = ["BaseName"];
+ let ColFields = ["Col"];
+ let KeyCol = ["KeyCol"];
+ let ValueCols = [["ValCol"]];
+}
+
+class INSTR_DEF : Instruction {
+ let Namespace = "Simple";
+ let OutOperandList = (outs);
+ let InOperandList = (ins);
+ string Basename = "";
+ string Col = "";
+}
+
+def SimpleInstr : SimpleRel, INSTR_DEF;
+
+// CHECK: error:No value "BaseName" found in "SimpleInstr" instruction description.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41778.128769.patch
Type: text/x-patch
Size: 1836 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180105/5f4c370f/attachment.bin>
More information about the llvm-commits
mailing list