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