| // 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; |
| } |
| |