| //==-- SystemZSchedule.td - SystemZ Scheduling Definitions ----*- tblgen -*-==// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // Scheduler resources |
| // Resources ending with a '2' use that resource for 2 cycles. An instruction |
| // using two such resources use the mapped unit for 4 cycles, and 2 is added |
| // to the total number of uops of the sched class. |
| |
| // These three resources are used to express decoder grouping rules. |
| // The number of decoder slots needed by an instructions is normally |
| // one. For a cracked instruction (BeginGroup && !EndGroup) it is |
| // two. Expanded instructions (BeginGroup && EndGroup) group alone. |
| def GroupAlone : SchedWrite; |
| def BeginGroup : SchedWrite; |
| def EndGroup : SchedWrite; |
| |
| // Latencies, to make code a bit neater. If more than one resource is |
| // used for an instruction, the greatest latency (not the sum) will be |
| // output by Tablegen. Therefore, in such cases one of these resources |
| // is needed. |
| def Lat2 : SchedWrite; |
| def Lat3 : SchedWrite; |
| def Lat4 : SchedWrite; |
| def Lat5 : SchedWrite; |
| def Lat6 : SchedWrite; |
| def Lat7 : SchedWrite; |
| def Lat8 : SchedWrite; |
| def Lat9 : SchedWrite; |
| def Lat10 : SchedWrite; |
| def Lat11 : SchedWrite; |
| def Lat12 : SchedWrite; |
| def Lat15 : SchedWrite; |
| def Lat20 : SchedWrite; |
| def Lat30 : SchedWrite; |
| |
| // Fixed-point |
| def FXa : SchedWrite; |
| def FXa2 : SchedWrite; |
| def FXb : SchedWrite; |
| def FXU : SchedWrite; |
| |
| // Load/store unit |
| def LSU : SchedWrite; |
| |
| // Model a return without latency, otherwise if-converter will model |
| // extra cost and abort (currently there is an assert that checks that |
| // all instructions have at least one uop). |
| def LSU_lat1 : SchedWrite; |
| |
| // Floating point unit (zEC12 and earlier) |
| def FPU : SchedWrite; |
| def FPU2 : SchedWrite; |
| def DFU : SchedWrite; |
| def DFU2 : SchedWrite; |
| |
| // Vector sub units (z13 and later) |
| def VecBF : SchedWrite; |
| def VecBF2 : SchedWrite; |
| def VecDF : SchedWrite; |
| def VecDF2 : SchedWrite; |
| def VecDFX : SchedWrite; |
| def VecDFX2 : SchedWrite; |
| def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit. |
| def VecMul : SchedWrite; |
| def VecStr : SchedWrite; |
| def VecXsPm : SchedWrite; |
| |
| // Virtual branching unit |
| def VBU : SchedWrite; |
| |
| |
| include "SystemZScheduleZ14.td" |
| include "SystemZScheduleZ13.td" |
| include "SystemZScheduleZEC12.td" |
| include "SystemZScheduleZ196.td" |
| |