mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[mips] Improve diagnostics for instruction mapping
This patch improves diagnostic for case when mapped instruction does not contain a field listed under RowFields. Differential Revision: https://reviews.llvm.org/D41778 llvm-svn: 322004
This commit is contained in:
parent
d9a55e3d2b
commit
af5c70768b
40
test/TableGen/RelTest.td
Normal file
40
test/TableGen/RelTest.td
Normal file
@ -0,0 +1,40 @@
|
||||
// RUN: not llvm-tblgen -gen-instr-info -I %p/../../include %s 2>&1 | FileCheck %s
|
||||
|
||||
// This test verifies that TableGen is displaying an error when mapped instruction
|
||||
// does not contain a field listed under RowFields.
|
||||
|
||||
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.
|
||||
// CHECK: def SimpleInstr : SimpleRel, INSTR_DEF;
|
@ -243,7 +243,12 @@ void MapTableEmitter::buildRowInstrMap() {
|
||||
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(CurInstr->getLoc(), "No value " +
|
||||
RowField->getAsString() + " found in \"" +
|
||||
CurInstr->getName() + "\" instruction description.");
|
||||
Init *CurInstrVal = RecVal->getValue();
|
||||
KeyValue.push_back(CurInstrVal);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user