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