forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TableGen
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TableGen
		
	
	
	
| //==-- SystemZSchedule.td - SystemZ Scheduling Definitions ----*- tblgen -*-==//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| // Scheduler resources
 | |
| 
 | |
| // These resources are used to express decoder grouping rules.  The number of
 | |
| // decoder slots needed by an instructions is normally one, but there are
 | |
| // exceptions.
 | |
| def NormalGr    : SchedWrite;
 | |
| def Cracked     : SchedWrite;
 | |
| def GroupAlone  : SchedWrite;
 | |
| def GroupAlone2 : SchedWrite;
 | |
| def GroupAlone3 : SchedWrite;
 | |
| def BeginGroup  : SchedWrite;
 | |
| def EndGroup    : SchedWrite;
 | |
| 
 | |
| // A SchedWrite added to other SchedWrites to make LSU latency parameterizable.
 | |
| def LSULatency : SchedWrite;
 | |
| 
 | |
| // Operand WriteLatencies.
 | |
| foreach L = 1 - 30 in def "WLat"#L : SchedWrite;
 | |
| 
 | |
| foreach L = 1 - 16 in
 | |
|   def "WLat"#L#"LSU" : WriteSequence<[!cast<SchedWrite>("WLat"#L),
 | |
|                                       LSULatency]>;
 | |
| 
 | |
| // ReadAdvances, used for the register operand next to a memory operand,
 | |
| // modelling that the register operand is needed later than the address
 | |
| // operands.
 | |
| def RegReadAdv : SchedRead;
 | |
| 
 | |
| foreach Num = ["", "2", "3", "4", "5", "6"] in {
 | |
|   // Fixed-point units
 | |
|   def "FXa"#Num : SchedWrite;
 | |
|   def "FXb"#Num : SchedWrite;
 | |
|   def "FXU"#Num : SchedWrite;
 | |
|   // Load/store unit
 | |
|   def "LSU"#Num : SchedWrite;
 | |
|   // Vector sub units (z13 and later)
 | |
|   def "VecBF"#Num : SchedWrite;
 | |
|   def "VecDF"#Num : SchedWrite;
 | |
|   def "VecDFX"#Num : SchedWrite;
 | |
|   def "VecMul"#Num : SchedWrite;
 | |
|   def "VecStr"#Num : SchedWrite;
 | |
|   def "VecXsPm"#Num : SchedWrite;
 | |
|   // Floating point unit (zEC12 and earlier)
 | |
|   def "FPU"#Num : SchedWrite;
 | |
|   def "DFU"#Num : SchedWrite;
 | |
| }
 | |
| 
 | |
| def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit.
 | |
| 
 | |
| def VBU : SchedWrite; // Virtual branching unit
 | |
| 
 | |
| def MCD : SchedWrite; // Millicode
 | |
| 
 | |
| include "SystemZScheduleArch13.td"
 | |
| include "SystemZScheduleZ14.td"
 | |
| include "SystemZScheduleZ13.td"
 | |
| include "SystemZScheduleZEC12.td"
 | |
| include "SystemZScheduleZ196.td"
 |