You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TableGen
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TableGen
		
	
	
	
	
	
|   | // 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; | ||
|  | } | ||
|  | 
 |