--- /dev/null
+// RUN: llvm-tblgen -gen-instr-info -I %p/../../include %s | FileCheck %s
+
+// CHECK: ABCForm_A
+// CHECK-NOT: ABCForm_A
+
+//
+// include Target.td for InstrMapping class and define minimally required objects
+//
+
+include "llvm/Target/Target.td"
+
+class DFVReg<string n> : Register<n> {
+ let Namespace = "DFV";
+}
+
+def R0 : DFVReg<"r0">;
+def DFVRegClass : RegisterClass<"DFV",[i32],0,(add R0)>;
+def DFVInstrInfo : InstrInfo;
+
+def DFVTest : Target {
+ let InstructionSet = DFVInstrInfo;
+}
+
+//
+// Define a number of a InstrMappings with repeated ValueCol fields
+//
+
+class ABCRel;
+
+def getAFormFromBForm : InstrMapping {
+ let FilterClass = "ABCRel";
+ let RowFields = ["BaseName"];
+ let ColFields = ["ABCForm"];
+ let KeyCol = ["B"];
+ let ValueCols = [["A"]];
+}
+
+def getAFormFromCForm : InstrMapping {
+ let FilterClass = "ABCRel";
+ let RowFields = ["BaseName"];
+ let ColFields = ["ABCForm"];
+ let KeyCol = ["C"];
+ let ValueCols = [["A"]];
+}
+
+def getAFormFromDForm : InstrMapping {
+ let FilterClass = "ABCRel";
+ let RowFields = ["BaseName"];
+ let ColFields = ["ABCForm"];
+ let KeyCol = ["D"];
+ let ValueCols = [["A"]];
+}
+
+def getAFormFromEForm : InstrMapping {
+ let FilterClass = "ABCRel";
+ let RowFields = ["BaseName"];
+ let ColFields = ["ABCForm"];
+ let KeyCol = ["E"];
+ let ValueCols = [["A"]];
+}
+
+class I : Instruction {
+ let Namespace = "DFV";
+ let OutOperandList = (outs);
+ let InOperandList = (ins);
+
+ string BaseName = "";
+ string ABCForm = "";
+}
+
+class isAForm { string ABCForm = "A"; }
+class isBForm { string ABCForm = "B"; }
+class isCForm { string ABCForm = "C"; }
+class isDForm { string ABCForm = "D"; }
+class isEForm { string ABCForm = "E"; }
+
+let BaseName = "0" in {
+ def A0 : I, ABCRel, isAForm;
+ def B0 : I, ABCRel, isBForm;
+ def C0 : I, ABCRel, isCForm;
+ def D0 : I, ABCRel, isDForm;
+ def E0 : I, ABCRel, isEForm;
+}
+