1//==-- SystemZSchedule.td - SystemZ Scheduling Definitions ----*- tblgen -*-==//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// Scheduler resources
11
12// These resources are used to express decoder grouping rules.  The number of
13// decoder slots needed by an instructions is normally one, but there are
14// exceptions.
15def NormalGr    : SchedWrite;
16def Cracked     : SchedWrite;
17def GroupAlone  : SchedWrite;
18def GroupAlone2 : SchedWrite;
19def GroupAlone3 : SchedWrite;
20def BeginGroup  : SchedWrite;
21def EndGroup    : SchedWrite;
22
23// A SchedWrite added to other SchedWrites to make LSU latency parameterizable.
24def LSULatency : SchedWrite;
25
26// Operand WriteLatencies.
27foreach L = 1 - 30 in def "WLat"#L : SchedWrite;
28
29foreach L = 1 - 16 in
30  def "WLat"#L#"LSU" : WriteSequence<[!cast<SchedWrite>("WLat"#L),
31                                      LSULatency]>;
32
33// ReadAdvances, used for the register operand next to a memory operand,
34// modelling that the register operand is needed later than the address
35// operands.
36def RegReadAdv : SchedRead;
37
38foreach Num = ["", "2", "3", "4", "5", "6"] in {
39  // Fixed-point units
40  def "FXa"#Num : SchedWrite;
41  def "FXb"#Num : SchedWrite;
42  def "FXU"#Num : SchedWrite;
43  // Load/store unit
44  def "LSU"#Num : SchedWrite;
45  // Vector sub units (z13 and later)
46  def "VecBF"#Num : SchedWrite;
47  def "VecDF"#Num : SchedWrite;
48  def "VecDFX"#Num : SchedWrite;
49  def "VecMul"#Num : SchedWrite;
50  def "VecStr"#Num : SchedWrite;
51  def "VecXsPm"#Num : SchedWrite;
52  // Floating point unit (zEC12 and earlier)
53  def "FPU"#Num : SchedWrite;
54  def "DFU"#Num : SchedWrite;
55}
56
57def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit.
58
59def VBU : SchedWrite; // Virtual branching unit
60
61def MCD : SchedWrite; // Millicode
62
63include "SystemZScheduleZ14.td"
64include "SystemZScheduleZ13.td"
65include "SystemZScheduleZEC12.td"
66include "SystemZScheduleZ196.td"
67