1 //==-- SystemZSchedule.td - SystemZ Scheduling Definitions ----*- tblgen -*-==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Scheduler resources
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
15 def NormalGr : SchedWrite;
16 def Cracked : SchedWrite;
17 def GroupAlone : SchedWrite;
18 def BeginGroup : SchedWrite;
19 def EndGroup : SchedWrite;
21 // A SchedWrite added to other SchedWrites to make LSU latency parameterizable.
22 def LSULatency : SchedWrite;
24 // Operand WriteLatencies.
25 foreach L = 1 - 30 in def "WLat"#L : SchedWrite;
28 def "WLat"#L#"LSU" : WriteSequence<[!cast<SchedWrite>("WLat"#L),
31 // ReadAdvances, used for the register operand next to a memory operand,
32 // modelling that the register operand is needed later than the address
34 def RegReadAdv : SchedRead;
36 foreach Num = ["", "2", "3", "4", "5", "6"] in {
38 def "FXa"#Num : SchedWrite;
39 def "FXb"#Num : SchedWrite;
40 def "FXU"#Num : SchedWrite;
42 def "LSU"#Num : SchedWrite;
43 // Vector sub units (z13 and later)
44 def "VecBF"#Num : SchedWrite;
45 def "VecDF"#Num : SchedWrite;
46 def "VecDFX"#Num : SchedWrite;
47 def "VecMul"#Num : SchedWrite;
48 def "VecStr"#Num : SchedWrite;
49 def "VecXsPm"#Num : SchedWrite;
50 // Floating point unit (zEC12 and earlier)
51 def "FPU"#Num : SchedWrite;
52 def "DFU"#Num : SchedWrite;
55 def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit.
57 def VBU : SchedWrite; // Virtual branching unit
59 def MCD : SchedWrite; // Millicode
61 include "SystemZScheduleZ14.td"
62 include "SystemZScheduleZ13.td"
63 include "SystemZScheduleZEC12.td"
64 include "SystemZScheduleZ196.td"