diff options
Diffstat (limited to 'llvm/test/TableGen/DuplicateFieldValues.td')
-rw-r--r-- | llvm/test/TableGen/DuplicateFieldValues.td | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/llvm/test/TableGen/DuplicateFieldValues.td b/llvm/test/TableGen/DuplicateFieldValues.td new file mode 100644 index 00000000000..50c77fa88cc --- /dev/null +++ b/llvm/test/TableGen/DuplicateFieldValues.td @@ -0,0 +1,84 @@ +// 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; +} + |