Home | History | Annotate | Download | only in SystemZ
      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.
     15 def NormalGr   : SchedWrite;
     16 def Cracked    : SchedWrite;
     17 def GroupAlone : SchedWrite;
     18 def BeginGroup : SchedWrite;
     19 def EndGroup   : SchedWrite;
     20 
     21 // A SchedWrite added to other SchedWrites to make LSU latency parameterizable.
     22 def LSULatency : SchedWrite;
     23 
     24 // Operand WriteLatencies.
     25 foreach L = 1 - 30 in def "WLat"#L : SchedWrite;
     26 
     27 foreach L = 1 - 16 in
     28   def "WLat"#L#"LSU" : WriteSequence<[!cast<SchedWrite>("WLat"#L),
     29                                       LSULatency]>;
     30 
     31 // ReadAdvances, used for the register operand next to a memory operand,
     32 // modelling that the register operand is needed later than the address
     33 // operands.
     34 def RegReadAdv : SchedRead;
     35 
     36 foreach Num = ["", "2", "3", "4", "5", "6"] in {
     37   // Fixed-point units
     38   def "FXa"#Num : SchedWrite;
     39   def "FXb"#Num : SchedWrite;
     40   def "FXU"#Num : SchedWrite;
     41   // Load/store unit
     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;
     53 }
     54 
     55 def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit.
     56 
     57 def VBU : SchedWrite; // Virtual branching unit
     58 
     59 def MCD : SchedWrite; // Millicode
     60 
     61 include "SystemZScheduleZ14.td"
     62 include "SystemZScheduleZ13.td"
     63 include "SystemZScheduleZEC12.td"
     64 include "SystemZScheduleZ196.td"
     65