// 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 : Register { 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; }