1// RUN: llvm-tblgen -gen-instr-info -I %p/../../include %s | FileCheck %s
2
3// CHECK: ABCForm_A
4// CHECK-NOT: ABCForm_A
5
6//
7// include Target.td for InstrMapping class and define minimally required objects
8//
9
10include "llvm/Target/Target.td"
11
12class DFVReg<string n> : Register<n> {
13  let Namespace = "DFV";
14}
15
16def R0 : DFVReg<"r0">;
17def DFVRegClass : RegisterClass<"DFV",[i32],0,(add R0)>;
18def DFVInstrInfo : InstrInfo;
19
20def DFVTest : Target {
21  let InstructionSet = DFVInstrInfo;
22}
23
24//
25// Define a number of a InstrMappings with repeated ValueCol fields
26//
27
28class ABCRel;
29
30def getAFormFromBForm : InstrMapping {
31  let FilterClass = "ABCRel";
32  let RowFields = ["BaseName"];
33  let ColFields = ["ABCForm"];
34  let KeyCol = ["B"];
35  let ValueCols = [["A"]];
36}
37
38def getAFormFromCForm : InstrMapping {
39  let FilterClass = "ABCRel";
40  let RowFields = ["BaseName"];
41  let ColFields = ["ABCForm"];
42  let KeyCol = ["C"];
43  let ValueCols = [["A"]];
44}
45
46def getAFormFromDForm : InstrMapping {
47  let FilterClass = "ABCRel";
48  let RowFields = ["BaseName"];
49  let ColFields = ["ABCForm"];
50  let KeyCol = ["D"];
51  let ValueCols = [["A"]];
52}
53
54def getAFormFromEForm : InstrMapping {
55  let FilterClass = "ABCRel";
56  let RowFields = ["BaseName"];
57  let ColFields = ["ABCForm"];
58  let KeyCol = ["E"];
59  let ValueCols = [["A"]];
60}
61
62class I : Instruction {
63  let Namespace = "DFV";
64  let OutOperandList = (outs);
65  let InOperandList = (ins);
66
67  string BaseName = "";
68  string ABCForm = "";
69}
70
71class isAForm { string ABCForm = "A"; }
72class isBForm { string ABCForm = "B"; }
73class isCForm { string ABCForm = "C"; }
74class isDForm { string ABCForm = "D"; }
75class isEForm { string ABCForm = "E"; }
76
77let BaseName = "0" in {
78  def A0 : I, ABCRel, isAForm;
79  def B0 : I, ABCRel, isBForm;
80  def C0 : I, ABCRel, isCForm;
81  def D0 : I, ABCRel, isDForm;
82  def E0 : I, ABCRel, isEForm;
83}
84
85