2016-10-20 16:27:16 +08:00
|
|
|
//==-- SystemZSchedule.td - SystemZ Scheduling Definitions ----*- tblgen -*-==//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2016-10-20 16:27:16 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
// Scheduler resources
|
|
|
|
|
2018-07-20 17:40:43 +08:00
|
|
|
// These resources are used to express decoder grouping rules. The number of
|
|
|
|
// decoder slots needed by an instructions is normally one, but there are
|
|
|
|
// exceptions.
|
2018-08-03 18:43:05 +08:00
|
|
|
def NormalGr : SchedWrite;
|
|
|
|
def Cracked : SchedWrite;
|
|
|
|
def GroupAlone : SchedWrite;
|
|
|
|
def GroupAlone2 : SchedWrite;
|
|
|
|
def GroupAlone3 : SchedWrite;
|
|
|
|
def BeginGroup : SchedWrite;
|
|
|
|
def EndGroup : SchedWrite;
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2018-07-20 17:40:43 +08:00
|
|
|
// A SchedWrite added to other SchedWrites to make LSU latency parameterizable.
|
|
|
|
def LSULatency : SchedWrite;
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2018-07-20 17:40:43 +08:00
|
|
|
// Operand WriteLatencies.
|
2018-07-25 19:42:55 +08:00
|
|
|
foreach L = 1 - 30 in def "WLat"#L : SchedWrite;
|
2018-07-20 17:40:43 +08:00
|
|
|
|
2018-07-25 19:42:55 +08:00
|
|
|
foreach L = 1 - 16 in
|
|
|
|
def "WLat"#L#"LSU" : WriteSequence<[!cast<SchedWrite>("WLat"#L),
|
|
|
|
LSULatency]>;
|
2018-07-20 17:40:43 +08:00
|
|
|
|
|
|
|
// ReadAdvances, used for the register operand next to a memory operand,
|
|
|
|
// modelling that the register operand is needed later than the address
|
|
|
|
// operands.
|
|
|
|
def RegReadAdv : SchedRead;
|
|
|
|
|
2018-07-25 19:42:55 +08:00
|
|
|
foreach Num = ["", "2", "3", "4", "5", "6"] in {
|
|
|
|
// Fixed-point units
|
|
|
|
def "FXa"#Num : SchedWrite;
|
|
|
|
def "FXb"#Num : SchedWrite;
|
|
|
|
def "FXU"#Num : SchedWrite;
|
|
|
|
// Load/store unit
|
|
|
|
def "LSU"#Num : SchedWrite;
|
|
|
|
// Vector sub units (z13 and later)
|
|
|
|
def "VecBF"#Num : SchedWrite;
|
|
|
|
def "VecDF"#Num : SchedWrite;
|
|
|
|
def "VecDFX"#Num : SchedWrite;
|
|
|
|
def "VecMul"#Num : SchedWrite;
|
|
|
|
def "VecStr"#Num : SchedWrite;
|
|
|
|
def "VecXsPm"#Num : SchedWrite;
|
|
|
|
// Floating point unit (zEC12 and earlier)
|
|
|
|
def "FPU"#Num : SchedWrite;
|
|
|
|
def "DFU"#Num : SchedWrite;
|
|
|
|
}
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2018-07-25 19:42:55 +08:00
|
|
|
def VecFPd : SchedWrite; // Blocking BFP div/sqrt unit.
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2018-07-25 19:42:55 +08:00
|
|
|
def VBU : SchedWrite; // Virtual branching unit
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2018-07-25 19:42:55 +08:00
|
|
|
def MCD : SchedWrite; // Millicode
|
2016-10-20 16:27:16 +08:00
|
|
|
|
2019-07-13 02:13:16 +08:00
|
|
|
include "SystemZScheduleArch13.td"
|
2017-07-18 01:41:11 +08:00
|
|
|
include "SystemZScheduleZ14.td"
|
2016-10-20 16:27:16 +08:00
|
|
|
include "SystemZScheduleZ13.td"
|
|
|
|
include "SystemZScheduleZEC12.td"
|
|
|
|
include "SystemZScheduleZ196.td"
|