xref: /llvm-project/llvm/lib/Target/PowerPC/PPCScheduleP10.td (revision 53edf45233ad72f992b111dfb970497d9c5d7b51)
167c64d83SQiu Chaofan//===--- PPCScheduleP10.td - P10 Scheduling Definitions -*- tablegen -*-===//
267c64d83SQiu Chaofan//
367c64d83SQiu Chaofan// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
467c64d83SQiu Chaofan// See https://llvm.org/LICENSE.txt for license information.
567c64d83SQiu Chaofan// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
667c64d83SQiu Chaofan//
767c64d83SQiu Chaofan//===----------------------------------------------------------------------===//
867c64d83SQiu Chaofan// Automatically generated file, do not edit!
967c64d83SQiu Chaofan//
1067c64d83SQiu Chaofan// This file defines the resources required by P10 instructions.
1167c64d83SQiu Chaofan//===----------------------------------------------------------------------===//
1267c64d83SQiu Chaofan// Modeling pipeline forwarding logic.
1367c64d83SQiu Chaofandef P10BR_Read : SchedRead;
1467c64d83SQiu Chaofandef P10DF_Read : SchedRead;
1567c64d83SQiu Chaofandef P10DV_Read : SchedRead;
1667c64d83SQiu Chaofandef P10DX_Read : SchedRead;
1767c64d83SQiu Chaofandef P10F2_Read : SchedRead;
1867c64d83SQiu Chaofandef P10FX_Read : SchedRead;
1967c64d83SQiu Chaofandef P10LD_Read : SchedRead;
2067c64d83SQiu Chaofandef P10MU_Read : SchedRead;
2167c64d83SQiu Chaofandef P10PM_Read : SchedRead;
2267c64d83SQiu Chaofandef P10ST_Read : SchedRead;
2367c64d83SQiu Chaofandef P10SX_Read : SchedRead;
2467c64d83SQiu Chaofandef P10vMU_Read : SchedRead;
2567c64d83SQiu Chaofan
2667c64d83SQiu Chaofandef P10Model : SchedMachineModel {
2767c64d83SQiu Chaofan  let IssueWidth = 8;
2867c64d83SQiu Chaofan  let MicroOpBufferSize = 44;
2967c64d83SQiu Chaofan  let LoopMicroOpBufferSize = 60;
3067c64d83SQiu Chaofan  let CompleteModel = 1;
3167c64d83SQiu Chaofan
32*53edf452SQiu Chaofan  // Power 10 does not support instructions from SPE, Book E and HTM.
33*53edf452SQiu Chaofan  let UnsupportedFeatures = [HasSPE, IsE500, IsBookE, IsISAFuture, HasHTM];
3467c64d83SQiu Chaofan}
3567c64d83SQiu Chaofan
3667c64d83SQiu Chaofanlet SchedModel = P10Model in {
3767c64d83SQiu Chaofan
3867c64d83SQiu Chaofan  // ***************** Processor Resources *****************
3967c64d83SQiu Chaofan
4067c64d83SQiu Chaofan  // Pipeline Groups
4167c64d83SQiu Chaofan
4267c64d83SQiu Chaofan  def P10_BF : ProcResource<4>; // Four Binary Floating Point pipelines.
4367c64d83SQiu Chaofan  def P10_BR : ProcResource<2>; // Two Branch pipelines.
4467c64d83SQiu Chaofan  def P10_CY : ProcResource<4>; // Four Crypto pipelines.
4567c64d83SQiu Chaofan  def P10_DF : ProcResource<1>; // One Decimal Floating Point pipelines.
4667c64d83SQiu Chaofan  def P10_DV : ProcResource<2>; // Two Fixed-point divide (DIV) pipelines.
4767c64d83SQiu Chaofan  def P10_DX : ProcResource<2>; // Two 128-bit fixed-point and BCD pipelines.
4867c64d83SQiu Chaofan  def P10_FX : ProcResource<4>; // Four ALU pipelines.
4967c64d83SQiu Chaofan  def P10_LD : ProcResource<2>; // Two Load pipelines.
5067c64d83SQiu Chaofan  def P10_MM : ProcResource<2>; // Two 512-bit SIMD matrix multiply engine pipelines.
5167c64d83SQiu Chaofan  def P10_PM : ProcResource<4>; // Four 128-bit permute (PM) pipelines.
5267c64d83SQiu Chaofan  def P10_ST : ProcResource<2>; // Two ST-D pipelines.
5367c64d83SQiu Chaofan  def P10_SX : ProcResource<2>; // Two Simple Fixed-point (SFX) pipelines.
5467c64d83SQiu Chaofan
5567c64d83SQiu Chaofan  // Dispatch Groups
5667c64d83SQiu Chaofan
5767c64d83SQiu Chaofan  // Dispatch to any slots
5867c64d83SQiu Chaofan  def P10_ANY_SLOT : ProcResource<8>;
5967c64d83SQiu Chaofan
6067c64d83SQiu Chaofan  let Super = P10_ANY_SLOT in {
6167c64d83SQiu Chaofan
6267c64d83SQiu Chaofan    // Dispatch to even slots
6367c64d83SQiu Chaofan    def P10_EVEN_SLOT : ProcResource<4>;
6467c64d83SQiu Chaofan
6567c64d83SQiu Chaofan    // Dispatch to odd slots
6667c64d83SQiu Chaofan    def P10_ODD_SLOT : ProcResource<4>;
6767c64d83SQiu Chaofan  }
6867c64d83SQiu Chaofan
6967c64d83SQiu Chaofan  // Dispatch Rules
7067c64d83SQiu Chaofan  let NumMicroOps = 0, Latency = 1 in {
7167c64d83SQiu Chaofan    // Dispatch Rule '-'
7267c64d83SQiu Chaofan    def P10W_DISP_ANY : SchedWriteRes<[P10_ANY_SLOT]>;
7367c64d83SQiu Chaofan
7467c64d83SQiu Chaofan    // Dispatch Rule '-', even slot
7567c64d83SQiu Chaofan    def P10W_DISP_EVEN : SchedWriteRes<[P10_EVEN_SLOT]>;
7667c64d83SQiu Chaofan
7767c64d83SQiu Chaofan    // Dispatch Rule 'P'
7867c64d83SQiu Chaofan    def P10W_DISP_PAIR : SchedWriteRes<[P10_EVEN_SLOT, P10_ODD_SLOT]>;
7967c64d83SQiu Chaofan  }
8067c64d83SQiu Chaofan
8167c64d83SQiu Chaofan  // ***************** SchedWriteRes Definitions *****************
8267c64d83SQiu Chaofan
8367c64d83SQiu Chaofan  // A BF pipeline may take from 7 to 36 cycles to complete.
8467c64d83SQiu Chaofan  // Some BF operations may keep the pipeline busy for up to 10 cycles.
8567c64d83SQiu Chaofan  def P10W_BF_7C : SchedWriteRes<[P10_BF]> {
8667c64d83SQiu Chaofan    let Latency = 7;
8767c64d83SQiu Chaofan  }
8867c64d83SQiu Chaofan
8967c64d83SQiu Chaofan  def P10W_BF_22C : SchedWriteRes<[P10_BF]> {
9085e3875aSMichael Maitland    let ReleaseAtCycles = [ 5 ];
9167c64d83SQiu Chaofan    let Latency = 22;
9267c64d83SQiu Chaofan  }
9367c64d83SQiu Chaofan
9467c64d83SQiu Chaofan  def P10W_BF_24C : SchedWriteRes<[P10_BF]> {
9585e3875aSMichael Maitland    let ReleaseAtCycles = [ 8 ];
9667c64d83SQiu Chaofan    let Latency = 24;
9767c64d83SQiu Chaofan  }
9867c64d83SQiu Chaofan
9967c64d83SQiu Chaofan  def P10W_BF_26C : SchedWriteRes<[P10_BF]> {
10085e3875aSMichael Maitland    let ReleaseAtCycles = [ 5 ];
10167c64d83SQiu Chaofan    let Latency = 26;
10267c64d83SQiu Chaofan  }
10367c64d83SQiu Chaofan
10467c64d83SQiu Chaofan  def P10W_BF_27C : SchedWriteRes<[P10_BF]> {
10585e3875aSMichael Maitland    let ReleaseAtCycles = [ 7 ];
10667c64d83SQiu Chaofan    let Latency = 27;
10767c64d83SQiu Chaofan  }
10867c64d83SQiu Chaofan
10967c64d83SQiu Chaofan  def P10W_BF_36C : SchedWriteRes<[P10_BF]> {
11085e3875aSMichael Maitland    let ReleaseAtCycles = [ 10 ];
11167c64d83SQiu Chaofan    let Latency = 36;
11267c64d83SQiu Chaofan  }
11367c64d83SQiu Chaofan
11467c64d83SQiu Chaofan  // A BR pipeline may take 2 cycles to complete.
11567c64d83SQiu Chaofan  def P10W_BR_2C : SchedWriteRes<[P10_BR]> {
11667c64d83SQiu Chaofan    let Latency = 2;
11767c64d83SQiu Chaofan  }
11867c64d83SQiu Chaofan
11967c64d83SQiu Chaofan  // A CY pipeline may take 7 cycles to complete.
12067c64d83SQiu Chaofan  def P10W_CY_7C : SchedWriteRes<[P10_CY]> {
12167c64d83SQiu Chaofan    let Latency = 7;
12267c64d83SQiu Chaofan  }
12367c64d83SQiu Chaofan
12467c64d83SQiu Chaofan  // A DF pipeline may take from 13 to 174 cycles to complete.
12567c64d83SQiu Chaofan  // Some DF operations may keep the pipeline busy for up to 67 cycles.
12667c64d83SQiu Chaofan  def P10W_DF_13C : SchedWriteRes<[P10_DF]> {
12767c64d83SQiu Chaofan    let Latency = 13;
12867c64d83SQiu Chaofan  }
12967c64d83SQiu Chaofan
13067c64d83SQiu Chaofan  def P10W_DF_24C : SchedWriteRes<[P10_DF]> {
13185e3875aSMichael Maitland    let ReleaseAtCycles = [ 16 ];
13267c64d83SQiu Chaofan    let Latency = 24;
13367c64d83SQiu Chaofan  }
13467c64d83SQiu Chaofan
13567c64d83SQiu Chaofan  def P10W_DF_25C : SchedWriteRes<[P10_DF]> {
13685e3875aSMichael Maitland    let ReleaseAtCycles = [ 17 ];
13767c64d83SQiu Chaofan    let Latency = 25;
13867c64d83SQiu Chaofan  }
13967c64d83SQiu Chaofan
14067c64d83SQiu Chaofan  def P10W_DF_26C : SchedWriteRes<[P10_DF]> {
14185e3875aSMichael Maitland    let ReleaseAtCycles = [ 18 ];
14267c64d83SQiu Chaofan    let Latency = 26;
14367c64d83SQiu Chaofan  }
14467c64d83SQiu Chaofan
14567c64d83SQiu Chaofan  def P10W_DF_32C : SchedWriteRes<[P10_DF]> {
14685e3875aSMichael Maitland    let ReleaseAtCycles = [ 22 ];
14767c64d83SQiu Chaofan    let Latency = 32;
14867c64d83SQiu Chaofan  }
14967c64d83SQiu Chaofan
15067c64d83SQiu Chaofan  def P10W_DF_33C : SchedWriteRes<[P10_DF]> {
15185e3875aSMichael Maitland    let ReleaseAtCycles = [ 25 ];
15267c64d83SQiu Chaofan    let Latency = 33;
15367c64d83SQiu Chaofan  }
15467c64d83SQiu Chaofan
15567c64d83SQiu Chaofan  def P10W_DF_34C : SchedWriteRes<[P10_DF]> {
15685e3875aSMichael Maitland    let ReleaseAtCycles = [ 25 ];
15767c64d83SQiu Chaofan    let Latency = 34;
15867c64d83SQiu Chaofan  }
15967c64d83SQiu Chaofan
16067c64d83SQiu Chaofan  def P10W_DF_38C : SchedWriteRes<[P10_DF]> {
16185e3875aSMichael Maitland    let ReleaseAtCycles = [ 30 ];
16267c64d83SQiu Chaofan    let Latency = 38;
16367c64d83SQiu Chaofan  }
16467c64d83SQiu Chaofan
16567c64d83SQiu Chaofan  def P10W_DF_40C : SchedWriteRes<[P10_DF]> {
16685e3875aSMichael Maitland    let ReleaseAtCycles = [ 17 ];
16767c64d83SQiu Chaofan    let Latency = 40;
16867c64d83SQiu Chaofan  }
16967c64d83SQiu Chaofan
17067c64d83SQiu Chaofan  def P10W_DF_43C : SchedWriteRes<[P10_DF]> {
17185e3875aSMichael Maitland    let ReleaseAtCycles = [ 34 ];
17267c64d83SQiu Chaofan    let Latency = 43;
17367c64d83SQiu Chaofan  }
17467c64d83SQiu Chaofan
17567c64d83SQiu Chaofan  def P10W_DF_59C : SchedWriteRes<[P10_DF]> {
17685e3875aSMichael Maitland    let ReleaseAtCycles = [ 49 ];
17767c64d83SQiu Chaofan    let Latency = 59;
17867c64d83SQiu Chaofan  }
17967c64d83SQiu Chaofan
18067c64d83SQiu Chaofan  def P10W_DF_61C : SchedWriteRes<[P10_DF]> {
18185e3875aSMichael Maitland    let ReleaseAtCycles = [ 12 ];
18267c64d83SQiu Chaofan    let Latency = 61;
18367c64d83SQiu Chaofan  }
18467c64d83SQiu Chaofan
18567c64d83SQiu Chaofan  def P10W_DF_68C : SchedWriteRes<[P10_DF]> {
18685e3875aSMichael Maitland    let ReleaseAtCycles = [ 15 ];
18767c64d83SQiu Chaofan    let Latency = 68;
18867c64d83SQiu Chaofan  }
18967c64d83SQiu Chaofan
19067c64d83SQiu Chaofan  def P10W_DF_77C : SchedWriteRes<[P10_DF]> {
19185e3875aSMichael Maitland    let ReleaseAtCycles = [ 67 ];
19267c64d83SQiu Chaofan    let Latency = 77;
19367c64d83SQiu Chaofan  }
19467c64d83SQiu Chaofan
19567c64d83SQiu Chaofan  def P10W_DF_87C : SchedWriteRes<[P10_DF]> {
19685e3875aSMichael Maitland    let ReleaseAtCycles = [ 12 ];
19767c64d83SQiu Chaofan    let Latency = 87;
19867c64d83SQiu Chaofan  }
19967c64d83SQiu Chaofan
20067c64d83SQiu Chaofan  def P10W_DF_100C : SchedWriteRes<[P10_DF]> {
20185e3875aSMichael Maitland    let ReleaseAtCycles = [ 32 ];
20267c64d83SQiu Chaofan    let Latency = 100;
20367c64d83SQiu Chaofan  }
20467c64d83SQiu Chaofan
20567c64d83SQiu Chaofan  def P10W_DF_174C : SchedWriteRes<[P10_DF]> {
20685e3875aSMichael Maitland    let ReleaseAtCycles = [ 33 ];
20767c64d83SQiu Chaofan    let Latency = 174;
20867c64d83SQiu Chaofan  }
20967c64d83SQiu Chaofan
21067c64d83SQiu Chaofan  // A DV pipeline may take from 20 to 83 cycles to complete.
21167c64d83SQiu Chaofan  // Some DV operations may keep the pipeline busy for up to 33 cycles.
21267c64d83SQiu Chaofan  def P10W_DV_20C : SchedWriteRes<[P10_DV]> {
21385e3875aSMichael Maitland    let ReleaseAtCycles = [ 10 ];
21467c64d83SQiu Chaofan    let Latency = 20;
21567c64d83SQiu Chaofan  }
21667c64d83SQiu Chaofan
21767c64d83SQiu Chaofan  def P10W_DV_25C : SchedWriteRes<[P10_DV]> {
21885e3875aSMichael Maitland    let ReleaseAtCycles = [ 10 ];
21967c64d83SQiu Chaofan    let Latency = 25;
22067c64d83SQiu Chaofan  }
22167c64d83SQiu Chaofan
22267c64d83SQiu Chaofan  def P10W_DV_27C : SchedWriteRes<[P10_DV]> {
22385e3875aSMichael Maitland    let ReleaseAtCycles = [ 10 ];
22467c64d83SQiu Chaofan    let Latency = 27;
22567c64d83SQiu Chaofan  }
22667c64d83SQiu Chaofan
22767c64d83SQiu Chaofan  def P10W_DV_41C : SchedWriteRes<[P10_DV]> {
22885e3875aSMichael Maitland    let ReleaseAtCycles = [ 10 ];
22967c64d83SQiu Chaofan    let Latency = 41;
23067c64d83SQiu Chaofan  }
23167c64d83SQiu Chaofan
23267c64d83SQiu Chaofan  def P10W_DV_43C : SchedWriteRes<[P10_DV]> {
23385e3875aSMichael Maitland    let ReleaseAtCycles = [ 21 ];
23467c64d83SQiu Chaofan    let Latency = 43;
23567c64d83SQiu Chaofan  }
23667c64d83SQiu Chaofan
23767c64d83SQiu Chaofan  def P10W_DV_47C : SchedWriteRes<[P10_DV]> {
23885e3875aSMichael Maitland    let ReleaseAtCycles = [ 21 ];
23967c64d83SQiu Chaofan    let Latency = 47;
24067c64d83SQiu Chaofan  }
24167c64d83SQiu Chaofan
24267c64d83SQiu Chaofan  def P10W_DV_54C : SchedWriteRes<[P10_DV]> {
24385e3875aSMichael Maitland    let ReleaseAtCycles = [ 33 ];
24467c64d83SQiu Chaofan    let Latency = 54;
24567c64d83SQiu Chaofan  }
24667c64d83SQiu Chaofan
24767c64d83SQiu Chaofan  def P10W_DV_60C : SchedWriteRes<[P10_DV]> {
24885e3875aSMichael Maitland    let ReleaseAtCycles = [ 33 ];
24967c64d83SQiu Chaofan    let Latency = 60;
25067c64d83SQiu Chaofan  }
25167c64d83SQiu Chaofan
25267c64d83SQiu Chaofan  def P10W_DV_75C : SchedWriteRes<[P10_DV]> {
25385e3875aSMichael Maitland    let ReleaseAtCycles = [ 21 ];
25467c64d83SQiu Chaofan    let Latency = 75;
25567c64d83SQiu Chaofan  }
25667c64d83SQiu Chaofan
25767c64d83SQiu Chaofan  def P10W_DV_83C : SchedWriteRes<[P10_DV]> {
25885e3875aSMichael Maitland    let ReleaseAtCycles = [ 33 ];
25967c64d83SQiu Chaofan    let Latency = 83;
26067c64d83SQiu Chaofan  }
26167c64d83SQiu Chaofan
26267c64d83SQiu Chaofan  // A DX pipeline may take 5 cycles to complete.
26367c64d83SQiu Chaofan  def P10W_DX_5C : SchedWriteRes<[P10_DX]> {
26467c64d83SQiu Chaofan    let Latency = 5;
26567c64d83SQiu Chaofan  }
26667c64d83SQiu Chaofan
26767c64d83SQiu Chaofan  // A F2 pipeline may take 4 cycles to complete.
26867c64d83SQiu Chaofan  def P10W_F2_4C : SchedWriteRes<[P10_FX]> {
26967c64d83SQiu Chaofan    let Latency = 4;
27067c64d83SQiu Chaofan  }
27167c64d83SQiu Chaofan
27267c64d83SQiu Chaofan  // A FX pipeline may take from 2 to 3 cycles to complete.
27367c64d83SQiu Chaofan  def P10W_FX_2C : SchedWriteRes<[P10_FX]> {
27467c64d83SQiu Chaofan    let Latency = 2;
27567c64d83SQiu Chaofan  }
27667c64d83SQiu Chaofan
27767c64d83SQiu Chaofan  def P10W_FX_3C : SchedWriteRes<[P10_FX]> {
27867c64d83SQiu Chaofan    let Latency = 3;
27967c64d83SQiu Chaofan  }
28067c64d83SQiu Chaofan
28167c64d83SQiu Chaofan  // A LD pipeline may take 6 cycles to complete.
28267c64d83SQiu Chaofan  def P10W_LD_6C : SchedWriteRes<[P10_LD]> {
28367c64d83SQiu Chaofan    let Latency = 6;
28467c64d83SQiu Chaofan  }
28567c64d83SQiu Chaofan
28667c64d83SQiu Chaofan  // A MF pipeline may take 13 cycles to complete.
28767c64d83SQiu Chaofan  def P10W_MF_13C : SchedWriteRes<[P10_SX]> {
28867c64d83SQiu Chaofan    let Latency = 13;
28967c64d83SQiu Chaofan  }
29067c64d83SQiu Chaofan
29167c64d83SQiu Chaofan  // A MFL pipeline may take 13 cycles to complete.
29267c64d83SQiu Chaofan  def P10W_MFL_13C : SchedWriteRes<[P10_SX]> {
29367c64d83SQiu Chaofan    let Latency = 13;
29467c64d83SQiu Chaofan  }
29567c64d83SQiu Chaofan
29667c64d83SQiu Chaofan  // A MM pipeline may take 10 cycles to complete.
29767c64d83SQiu Chaofan  def P10W_MM_10C : SchedWriteRes<[P10_MM]> {
29867c64d83SQiu Chaofan    let Latency = 10;
29967c64d83SQiu Chaofan  }
30067c64d83SQiu Chaofan
30167c64d83SQiu Chaofan  // A MU pipeline may take 5 cycles to complete.
30267c64d83SQiu Chaofan  def P10W_MU_5C : SchedWriteRes<[P10_BF]> {
30367c64d83SQiu Chaofan    let Latency = 5;
30467c64d83SQiu Chaofan  }
30567c64d83SQiu Chaofan
30667c64d83SQiu Chaofan  // A PM pipeline may take 4 cycles to complete.
30767c64d83SQiu Chaofan  def P10W_PM_4C : SchedWriteRes<[P10_PM]> {
30867c64d83SQiu Chaofan    let Latency = 4;
30967c64d83SQiu Chaofan  }
31067c64d83SQiu Chaofan
31167c64d83SQiu Chaofan  // A ST pipeline may take 3 cycles to complete.
31267c64d83SQiu Chaofan  def P10W_ST_3C : SchedWriteRes<[P10_ST]> {
31367c64d83SQiu Chaofan    let Latency = 3;
31467c64d83SQiu Chaofan  }
31567c64d83SQiu Chaofan
31667c64d83SQiu Chaofan  // A SX pipeline may take from 0 to 3 cycles to complete.
31767c64d83SQiu Chaofan  def P10W_SX : SchedWriteRes<[P10_SX]> {
31867c64d83SQiu Chaofan    let Latency = 0;
31967c64d83SQiu Chaofan  }
32067c64d83SQiu Chaofan
32167c64d83SQiu Chaofan  def P10W_SX_3C : SchedWriteRes<[P10_SX]> {
32267c64d83SQiu Chaofan    let Latency = 3;
32367c64d83SQiu Chaofan  }
32467c64d83SQiu Chaofan
32567c64d83SQiu Chaofan  // A vMU pipeline may take 7 cycles to complete.
32667c64d83SQiu Chaofan  def P10W_vMU_7C : SchedWriteRes<[P10_BF]> {
32767c64d83SQiu Chaofan    let Latency = 7;
32867c64d83SQiu Chaofan  }
32967c64d83SQiu Chaofan
33067c64d83SQiu Chaofan  // ***************** Read Advance Definitions *****************
33167c64d83SQiu Chaofan
33267c64d83SQiu Chaofan  // Modeling pipeline forwarding logic.
33367c64d83SQiu Chaofan  def P10BF_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>;
33467c64d83SQiu Chaofan  def P10BF_Read_2C : SchedReadAdvance<2, [P10W_BF_7C]>;
33567c64d83SQiu Chaofan  def P10BR_Read_1C : SchedReadAdvance<1, [P10W_FX_3C, P10W_F2_4C]>;
33667c64d83SQiu Chaofan  def P10CY_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_DF_13C, P10W_MM_10C]>;
33767c64d83SQiu Chaofan  def P10CY_Read_3C : SchedReadAdvance<3, [P10W_CY_7C]>;
33867c64d83SQiu Chaofan  def P10DF_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>;
33967c64d83SQiu Chaofan  def P10DV_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>;
34067c64d83SQiu Chaofan  def P10DX_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>;
34167c64d83SQiu Chaofan  def P10F2_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>;
34267c64d83SQiu Chaofan  def P10FX_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>;
34367c64d83SQiu Chaofan  def P10LD_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C]>;
34467c64d83SQiu Chaofan  def P10MM_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C]>;
34567c64d83SQiu Chaofan  def P10MM_Read_6C : SchedReadAdvance<6, [P10W_MM_10C]>;
34667c64d83SQiu Chaofan  def P10MU_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_DF_13C]>;
34767c64d83SQiu Chaofan  def P10PM_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>;
34867c64d83SQiu Chaofan  def P10ST_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>;
34967c64d83SQiu Chaofan  def P10SX_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C, P10W_MM_10C]>;
35067c64d83SQiu Chaofan  def P10vMU_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>;
35167c64d83SQiu Chaofan
35267c64d83SQiu Chaofan  // Save 1 cycles if pipeline BF reads the data from pipelines DX, MU, vMU, CY, DF, MM.
35367c64d83SQiu Chaofan  // Save 2 cycles if pipeline BF reads the data from pipelines BF.
35467c64d83SQiu Chaofan  def P10BF_Read : SchedReadVariant<[
35567c64d83SQiu Chaofan        SchedVar<P10W_BF_7C_Pred, [P10BF_Read_2C]>,
35667c64d83SQiu Chaofan        SchedVar<NoSchedPred,     [P10BF_Read_1C]>
35767c64d83SQiu Chaofan  ]>;
35867c64d83SQiu Chaofan
35967c64d83SQiu Chaofan  // Save 1 cycles if pipeline CY reads the data from pipelines DX, MU, vMU, BF, DF, MM.
36067c64d83SQiu Chaofan  // Save 3 cycles if pipeline CY reads the data from pipelines CY.
36167c64d83SQiu Chaofan  def P10CY_Read : SchedReadVariant<[
36267c64d83SQiu Chaofan        SchedVar<P10W_CY_7C_Pred, [P10CY_Read_3C]>,
36367c64d83SQiu Chaofan        SchedVar<NoSchedPred,     [P10CY_Read_1C]>
36467c64d83SQiu Chaofan  ]>;
36567c64d83SQiu Chaofan
36667c64d83SQiu Chaofan  // Save 1 cycles if pipeline MM reads the data from pipelines DX, MU, vMU, BF, CY, DF.
36767c64d83SQiu Chaofan  // Save 6 cycles if pipeline MM reads the data from pipelines MM.
36867c64d83SQiu Chaofan  def P10MM_Read : SchedReadVariant<[
36967c64d83SQiu Chaofan        SchedVar<P10W_MM_10C_Pred, [P10MM_Read_6C]>,
37067c64d83SQiu Chaofan        SchedVar<NoSchedPred,     [P10MM_Read_1C]>
37167c64d83SQiu Chaofan  ]>;
37267c64d83SQiu Chaofan
37367c64d83SQiu Chaofan  // Save 1 cycles if pipeline BR reads the data from pipelines FX, F2.
37467c64d83SQiu Chaofan  def : SchedAlias<P10BR_Read, P10BR_Read_1C>;
37567c64d83SQiu Chaofan
37667c64d83SQiu Chaofan  // Save 1 cycles if pipeline DF reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM.
37767c64d83SQiu Chaofan  def : SchedAlias<P10DF_Read, P10DF_Read_1C>;
37867c64d83SQiu Chaofan
37967c64d83SQiu Chaofan  // Save 1 cycles if pipeline DV reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM.
38067c64d83SQiu Chaofan  def : SchedAlias<P10DV_Read, P10DV_Read_1C>;
38167c64d83SQiu Chaofan
38267c64d83SQiu Chaofan  // Save 1 cycles if pipeline DX reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM.
38367c64d83SQiu Chaofan  def : SchedAlias<P10DX_Read, P10DX_Read_1C>;
38467c64d83SQiu Chaofan
38567c64d83SQiu Chaofan  // Save 1 cycles if pipeline F2 reads the data from pipelines ST, SX, FX, F2, PM.
38667c64d83SQiu Chaofan  def : SchedAlias<P10F2_Read, P10F2_Read_1C>;
38767c64d83SQiu Chaofan
38867c64d83SQiu Chaofan  // Save 1 cycles if pipeline FX reads the data from pipelines ST, SX, FX, F2, PM.
38967c64d83SQiu Chaofan  def : SchedAlias<P10FX_Read, P10FX_Read_1C>;
39067c64d83SQiu Chaofan
39167c64d83SQiu Chaofan  // Save 1 cycles if pipeline LD reads the data from pipelines ST, SX, FX, F2.
39267c64d83SQiu Chaofan  def : SchedAlias<P10LD_Read, P10LD_Read_1C>;
39367c64d83SQiu Chaofan
39467c64d83SQiu Chaofan  // Save 1 cycles if pipeline MU reads the data from pipelines DX, MU, DF.
39567c64d83SQiu Chaofan  def : SchedAlias<P10MU_Read, P10MU_Read_1C>;
39667c64d83SQiu Chaofan
39767c64d83SQiu Chaofan  // Save 1 cycles if pipeline PM reads the data from pipelines ST, SX, FX, F2, PM.
39867c64d83SQiu Chaofan  def : SchedAlias<P10PM_Read, P10PM_Read_1C>;
39967c64d83SQiu Chaofan
40067c64d83SQiu Chaofan  // Save 1 cycles if pipeline ST reads the data from pipelines ST, SX, FX, F2, PM.
40167c64d83SQiu Chaofan  def : SchedAlias<P10ST_Read, P10ST_Read_1C>;
40267c64d83SQiu Chaofan
40367c64d83SQiu Chaofan  // Save 1 cycles if pipeline SX reads the data from pipelines ST, SX, FX, F2, PM, MM.
40467c64d83SQiu Chaofan  def : SchedAlias<P10SX_Read, P10SX_Read_1C>;
40567c64d83SQiu Chaofan
40667c64d83SQiu Chaofan  // Save 1 cycles if pipeline vMU reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM.
40767c64d83SQiu Chaofan  def : SchedAlias<P10vMU_Read, P10vMU_Read_1C>;
40867c64d83SQiu Chaofan
40967c64d83SQiu Chaofan  include "P10InstrResources.td"
41067c64d83SQiu Chaofan}
411