1349cc55cSDimitry Andric//===--- PPCScheduleP10.td - P10 Scheduling Definitions -*- tablegen -*-===// 2349cc55cSDimitry Andric// 3349cc55cSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4349cc55cSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5349cc55cSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6349cc55cSDimitry Andric// 7349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 8349cc55cSDimitry Andric// Automatically generated file, do not edit! 9349cc55cSDimitry Andric// 10349cc55cSDimitry Andric// This file defines the resources required by P10 instructions. 11349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 12349cc55cSDimitry Andric// Modeling pipeline forwarding logic. 13349cc55cSDimitry Andricdef P10BR_Read : SchedRead; 14349cc55cSDimitry Andricdef P10DF_Read : SchedRead; 15349cc55cSDimitry Andricdef P10DV_Read : SchedRead; 16349cc55cSDimitry Andricdef P10DX_Read : SchedRead; 17349cc55cSDimitry Andricdef P10F2_Read : SchedRead; 18349cc55cSDimitry Andricdef P10FX_Read : SchedRead; 19349cc55cSDimitry Andricdef P10LD_Read : SchedRead; 20349cc55cSDimitry Andricdef P10MU_Read : SchedRead; 21349cc55cSDimitry Andricdef P10PM_Read : SchedRead; 22349cc55cSDimitry Andricdef P10ST_Read : SchedRead; 23349cc55cSDimitry Andricdef P10SX_Read : SchedRead; 24349cc55cSDimitry Andricdef P10vMU_Read : SchedRead; 25349cc55cSDimitry Andric 26349cc55cSDimitry Andricdef P10Model : SchedMachineModel { 27349cc55cSDimitry Andric let IssueWidth = 8; 28349cc55cSDimitry Andric let MicroOpBufferSize = 44; 29349cc55cSDimitry Andric let LoopMicroOpBufferSize = 60; 30349cc55cSDimitry Andric let CompleteModel = 1; 31349cc55cSDimitry Andric 32*5f757f3fSDimitry Andric // Power 10 does not support instructions from SPE, Book E and HTM. 33*5f757f3fSDimitry Andric let UnsupportedFeatures = [HasSPE, IsE500, IsBookE, IsISAFuture, HasHTM]; 34349cc55cSDimitry Andric} 35349cc55cSDimitry Andric 36349cc55cSDimitry Andriclet SchedModel = P10Model in { 37349cc55cSDimitry Andric 38349cc55cSDimitry Andric // ***************** Processor Resources ***************** 39349cc55cSDimitry Andric 40349cc55cSDimitry Andric // Pipeline Groups 41349cc55cSDimitry Andric 42349cc55cSDimitry Andric def P10_BF : ProcResource<4>; // Four Binary Floating Point pipelines. 43349cc55cSDimitry Andric def P10_BR : ProcResource<2>; // Two Branch pipelines. 44349cc55cSDimitry Andric def P10_CY : ProcResource<4>; // Four Crypto pipelines. 45349cc55cSDimitry Andric def P10_DF : ProcResource<1>; // One Decimal Floating Point pipelines. 46349cc55cSDimitry Andric def P10_DV : ProcResource<2>; // Two Fixed-point divide (DIV) pipelines. 47349cc55cSDimitry Andric def P10_DX : ProcResource<2>; // Two 128-bit fixed-point and BCD pipelines. 48349cc55cSDimitry Andric def P10_FX : ProcResource<4>; // Four ALU pipelines. 49349cc55cSDimitry Andric def P10_LD : ProcResource<2>; // Two Load pipelines. 50349cc55cSDimitry Andric def P10_MM : ProcResource<2>; // Two 512-bit SIMD matrix multiply engine pipelines. 51349cc55cSDimitry Andric def P10_PM : ProcResource<4>; // Four 128-bit permute (PM) pipelines. 52349cc55cSDimitry Andric def P10_ST : ProcResource<2>; // Two ST-D pipelines. 53349cc55cSDimitry Andric def P10_SX : ProcResource<2>; // Two Simple Fixed-point (SFX) pipelines. 54349cc55cSDimitry Andric 55349cc55cSDimitry Andric // Dispatch Groups 56349cc55cSDimitry Andric 57349cc55cSDimitry Andric // Dispatch to any slots 58349cc55cSDimitry Andric def P10_ANY_SLOT : ProcResource<8>; 59349cc55cSDimitry Andric 60349cc55cSDimitry Andric let Super = P10_ANY_SLOT in { 61349cc55cSDimitry Andric 62349cc55cSDimitry Andric // Dispatch to even slots 63349cc55cSDimitry Andric def P10_EVEN_SLOT : ProcResource<4>; 64349cc55cSDimitry Andric 65349cc55cSDimitry Andric // Dispatch to odd slots 66349cc55cSDimitry Andric def P10_ODD_SLOT : ProcResource<4>; 67349cc55cSDimitry Andric } 68349cc55cSDimitry Andric 69349cc55cSDimitry Andric // Dispatch Rules 70349cc55cSDimitry Andric let NumMicroOps = 0, Latency = 1 in { 71349cc55cSDimitry Andric // Dispatch Rule '-' 72349cc55cSDimitry Andric def P10W_DISP_ANY : SchedWriteRes<[P10_ANY_SLOT]>; 73349cc55cSDimitry Andric 74349cc55cSDimitry Andric // Dispatch Rule '-', even slot 75349cc55cSDimitry Andric def P10W_DISP_EVEN : SchedWriteRes<[P10_EVEN_SLOT]>; 76349cc55cSDimitry Andric 77349cc55cSDimitry Andric // Dispatch Rule 'P' 78349cc55cSDimitry Andric def P10W_DISP_PAIR : SchedWriteRes<[P10_EVEN_SLOT, P10_ODD_SLOT]>; 79349cc55cSDimitry Andric } 80349cc55cSDimitry Andric 81349cc55cSDimitry Andric // ***************** SchedWriteRes Definitions ***************** 82349cc55cSDimitry Andric 83349cc55cSDimitry Andric // A BF pipeline may take from 7 to 36 cycles to complete. 84349cc55cSDimitry Andric // Some BF operations may keep the pipeline busy for up to 10 cycles. 85349cc55cSDimitry Andric def P10W_BF_7C : SchedWriteRes<[P10_BF]> { 86349cc55cSDimitry Andric let Latency = 7; 87349cc55cSDimitry Andric } 88349cc55cSDimitry Andric 89349cc55cSDimitry Andric def P10W_BF_22C : SchedWriteRes<[P10_BF]> { 90*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 5 ]; 91349cc55cSDimitry Andric let Latency = 22; 92349cc55cSDimitry Andric } 93349cc55cSDimitry Andric 94349cc55cSDimitry Andric def P10W_BF_24C : SchedWriteRes<[P10_BF]> { 95*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 8 ]; 96349cc55cSDimitry Andric let Latency = 24; 97349cc55cSDimitry Andric } 98349cc55cSDimitry Andric 99349cc55cSDimitry Andric def P10W_BF_26C : SchedWriteRes<[P10_BF]> { 100*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 5 ]; 101349cc55cSDimitry Andric let Latency = 26; 102349cc55cSDimitry Andric } 103349cc55cSDimitry Andric 104349cc55cSDimitry Andric def P10W_BF_27C : SchedWriteRes<[P10_BF]> { 105*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 7 ]; 106349cc55cSDimitry Andric let Latency = 27; 107349cc55cSDimitry Andric } 108349cc55cSDimitry Andric 109349cc55cSDimitry Andric def P10W_BF_36C : SchedWriteRes<[P10_BF]> { 110*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 10 ]; 111349cc55cSDimitry Andric let Latency = 36; 112349cc55cSDimitry Andric } 113349cc55cSDimitry Andric 114349cc55cSDimitry Andric // A BR pipeline may take 2 cycles to complete. 115349cc55cSDimitry Andric def P10W_BR_2C : SchedWriteRes<[P10_BR]> { 116349cc55cSDimitry Andric let Latency = 2; 117349cc55cSDimitry Andric } 118349cc55cSDimitry Andric 119349cc55cSDimitry Andric // A CY pipeline may take 7 cycles to complete. 120349cc55cSDimitry Andric def P10W_CY_7C : SchedWriteRes<[P10_CY]> { 121349cc55cSDimitry Andric let Latency = 7; 122349cc55cSDimitry Andric } 123349cc55cSDimitry Andric 124349cc55cSDimitry Andric // A DF pipeline may take from 13 to 174 cycles to complete. 125349cc55cSDimitry Andric // Some DF operations may keep the pipeline busy for up to 67 cycles. 126349cc55cSDimitry Andric def P10W_DF_13C : SchedWriteRes<[P10_DF]> { 127349cc55cSDimitry Andric let Latency = 13; 128349cc55cSDimitry Andric } 129349cc55cSDimitry Andric 130349cc55cSDimitry Andric def P10W_DF_24C : SchedWriteRes<[P10_DF]> { 131*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 16 ]; 132349cc55cSDimitry Andric let Latency = 24; 133349cc55cSDimitry Andric } 134349cc55cSDimitry Andric 135349cc55cSDimitry Andric def P10W_DF_25C : SchedWriteRes<[P10_DF]> { 136*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 17 ]; 137349cc55cSDimitry Andric let Latency = 25; 138349cc55cSDimitry Andric } 139349cc55cSDimitry Andric 140349cc55cSDimitry Andric def P10W_DF_26C : SchedWriteRes<[P10_DF]> { 141*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 18 ]; 142349cc55cSDimitry Andric let Latency = 26; 143349cc55cSDimitry Andric } 144349cc55cSDimitry Andric 145349cc55cSDimitry Andric def P10W_DF_32C : SchedWriteRes<[P10_DF]> { 146*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 22 ]; 147349cc55cSDimitry Andric let Latency = 32; 148349cc55cSDimitry Andric } 149349cc55cSDimitry Andric 150349cc55cSDimitry Andric def P10W_DF_33C : SchedWriteRes<[P10_DF]> { 151*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 25 ]; 152349cc55cSDimitry Andric let Latency = 33; 153349cc55cSDimitry Andric } 154349cc55cSDimitry Andric 155349cc55cSDimitry Andric def P10W_DF_34C : SchedWriteRes<[P10_DF]> { 156*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 25 ]; 157349cc55cSDimitry Andric let Latency = 34; 158349cc55cSDimitry Andric } 159349cc55cSDimitry Andric 160349cc55cSDimitry Andric def P10W_DF_38C : SchedWriteRes<[P10_DF]> { 161*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 30 ]; 162349cc55cSDimitry Andric let Latency = 38; 163349cc55cSDimitry Andric } 164349cc55cSDimitry Andric 165349cc55cSDimitry Andric def P10W_DF_40C : SchedWriteRes<[P10_DF]> { 166*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 17 ]; 167349cc55cSDimitry Andric let Latency = 40; 168349cc55cSDimitry Andric } 169349cc55cSDimitry Andric 170349cc55cSDimitry Andric def P10W_DF_43C : SchedWriteRes<[P10_DF]> { 171*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 34 ]; 172349cc55cSDimitry Andric let Latency = 43; 173349cc55cSDimitry Andric } 174349cc55cSDimitry Andric 175349cc55cSDimitry Andric def P10W_DF_59C : SchedWriteRes<[P10_DF]> { 176*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 49 ]; 177349cc55cSDimitry Andric let Latency = 59; 178349cc55cSDimitry Andric } 179349cc55cSDimitry Andric 180349cc55cSDimitry Andric def P10W_DF_61C : SchedWriteRes<[P10_DF]> { 181*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 12 ]; 182349cc55cSDimitry Andric let Latency = 61; 183349cc55cSDimitry Andric } 184349cc55cSDimitry Andric 185349cc55cSDimitry Andric def P10W_DF_68C : SchedWriteRes<[P10_DF]> { 186*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 15 ]; 187349cc55cSDimitry Andric let Latency = 68; 188349cc55cSDimitry Andric } 189349cc55cSDimitry Andric 190349cc55cSDimitry Andric def P10W_DF_77C : SchedWriteRes<[P10_DF]> { 191*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 67 ]; 192349cc55cSDimitry Andric let Latency = 77; 193349cc55cSDimitry Andric } 194349cc55cSDimitry Andric 195349cc55cSDimitry Andric def P10W_DF_87C : SchedWriteRes<[P10_DF]> { 196*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 12 ]; 197349cc55cSDimitry Andric let Latency = 87; 198349cc55cSDimitry Andric } 199349cc55cSDimitry Andric 200349cc55cSDimitry Andric def P10W_DF_100C : SchedWriteRes<[P10_DF]> { 201*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 32 ]; 202349cc55cSDimitry Andric let Latency = 100; 203349cc55cSDimitry Andric } 204349cc55cSDimitry Andric 205349cc55cSDimitry Andric def P10W_DF_174C : SchedWriteRes<[P10_DF]> { 206*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 33 ]; 207349cc55cSDimitry Andric let Latency = 174; 208349cc55cSDimitry Andric } 209349cc55cSDimitry Andric 210349cc55cSDimitry Andric // A DV pipeline may take from 20 to 83 cycles to complete. 211349cc55cSDimitry Andric // Some DV operations may keep the pipeline busy for up to 33 cycles. 212349cc55cSDimitry Andric def P10W_DV_20C : SchedWriteRes<[P10_DV]> { 213*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 10 ]; 214349cc55cSDimitry Andric let Latency = 20; 215349cc55cSDimitry Andric } 216349cc55cSDimitry Andric 217349cc55cSDimitry Andric def P10W_DV_25C : SchedWriteRes<[P10_DV]> { 218*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 10 ]; 219349cc55cSDimitry Andric let Latency = 25; 220349cc55cSDimitry Andric } 221349cc55cSDimitry Andric 222349cc55cSDimitry Andric def P10W_DV_27C : SchedWriteRes<[P10_DV]> { 223*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 10 ]; 224349cc55cSDimitry Andric let Latency = 27; 225349cc55cSDimitry Andric } 226349cc55cSDimitry Andric 227349cc55cSDimitry Andric def P10W_DV_41C : SchedWriteRes<[P10_DV]> { 228*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 10 ]; 229349cc55cSDimitry Andric let Latency = 41; 230349cc55cSDimitry Andric } 231349cc55cSDimitry Andric 232349cc55cSDimitry Andric def P10W_DV_43C : SchedWriteRes<[P10_DV]> { 233*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 21 ]; 234349cc55cSDimitry Andric let Latency = 43; 235349cc55cSDimitry Andric } 236349cc55cSDimitry Andric 237349cc55cSDimitry Andric def P10W_DV_47C : SchedWriteRes<[P10_DV]> { 238*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 21 ]; 239349cc55cSDimitry Andric let Latency = 47; 240349cc55cSDimitry Andric } 241349cc55cSDimitry Andric 242349cc55cSDimitry Andric def P10W_DV_54C : SchedWriteRes<[P10_DV]> { 243*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 33 ]; 244349cc55cSDimitry Andric let Latency = 54; 245349cc55cSDimitry Andric } 246349cc55cSDimitry Andric 247349cc55cSDimitry Andric def P10W_DV_60C : SchedWriteRes<[P10_DV]> { 248*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 33 ]; 249349cc55cSDimitry Andric let Latency = 60; 250349cc55cSDimitry Andric } 251349cc55cSDimitry Andric 252349cc55cSDimitry Andric def P10W_DV_75C : SchedWriteRes<[P10_DV]> { 253*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 21 ]; 254349cc55cSDimitry Andric let Latency = 75; 255349cc55cSDimitry Andric } 256349cc55cSDimitry Andric 257349cc55cSDimitry Andric def P10W_DV_83C : SchedWriteRes<[P10_DV]> { 258*5f757f3fSDimitry Andric let ReleaseAtCycles = [ 33 ]; 259349cc55cSDimitry Andric let Latency = 83; 260349cc55cSDimitry Andric } 261349cc55cSDimitry Andric 262349cc55cSDimitry Andric // A DX pipeline may take 5 cycles to complete. 263349cc55cSDimitry Andric def P10W_DX_5C : SchedWriteRes<[P10_DX]> { 264349cc55cSDimitry Andric let Latency = 5; 265349cc55cSDimitry Andric } 266349cc55cSDimitry Andric 267349cc55cSDimitry Andric // A F2 pipeline may take 4 cycles to complete. 268349cc55cSDimitry Andric def P10W_F2_4C : SchedWriteRes<[P10_FX]> { 269349cc55cSDimitry Andric let Latency = 4; 270349cc55cSDimitry Andric } 271349cc55cSDimitry Andric 272349cc55cSDimitry Andric // A FX pipeline may take from 2 to 3 cycles to complete. 273349cc55cSDimitry Andric def P10W_FX_2C : SchedWriteRes<[P10_FX]> { 274349cc55cSDimitry Andric let Latency = 2; 275349cc55cSDimitry Andric } 276349cc55cSDimitry Andric 277349cc55cSDimitry Andric def P10W_FX_3C : SchedWriteRes<[P10_FX]> { 278349cc55cSDimitry Andric let Latency = 3; 279349cc55cSDimitry Andric } 280349cc55cSDimitry Andric 281349cc55cSDimitry Andric // A LD pipeline may take 6 cycles to complete. 282349cc55cSDimitry Andric def P10W_LD_6C : SchedWriteRes<[P10_LD]> { 283349cc55cSDimitry Andric let Latency = 6; 284349cc55cSDimitry Andric } 285349cc55cSDimitry Andric 286349cc55cSDimitry Andric // A MF pipeline may take 13 cycles to complete. 287349cc55cSDimitry Andric def P10W_MF_13C : SchedWriteRes<[P10_SX]> { 288349cc55cSDimitry Andric let Latency = 13; 289349cc55cSDimitry Andric } 290349cc55cSDimitry Andric 291349cc55cSDimitry Andric // A MFL pipeline may take 13 cycles to complete. 292349cc55cSDimitry Andric def P10W_MFL_13C : SchedWriteRes<[P10_SX]> { 293349cc55cSDimitry Andric let Latency = 13; 294349cc55cSDimitry Andric } 295349cc55cSDimitry Andric 296349cc55cSDimitry Andric // A MM pipeline may take 10 cycles to complete. 297349cc55cSDimitry Andric def P10W_MM_10C : SchedWriteRes<[P10_MM]> { 298349cc55cSDimitry Andric let Latency = 10; 299349cc55cSDimitry Andric } 300349cc55cSDimitry Andric 301349cc55cSDimitry Andric // A MU pipeline may take 5 cycles to complete. 302349cc55cSDimitry Andric def P10W_MU_5C : SchedWriteRes<[P10_BF]> { 303349cc55cSDimitry Andric let Latency = 5; 304349cc55cSDimitry Andric } 305349cc55cSDimitry Andric 306349cc55cSDimitry Andric // A PM pipeline may take 4 cycles to complete. 307349cc55cSDimitry Andric def P10W_PM_4C : SchedWriteRes<[P10_PM]> { 308349cc55cSDimitry Andric let Latency = 4; 309349cc55cSDimitry Andric } 310349cc55cSDimitry Andric 311349cc55cSDimitry Andric // A ST pipeline may take 3 cycles to complete. 312349cc55cSDimitry Andric def P10W_ST_3C : SchedWriteRes<[P10_ST]> { 313349cc55cSDimitry Andric let Latency = 3; 314349cc55cSDimitry Andric } 315349cc55cSDimitry Andric 316349cc55cSDimitry Andric // A SX pipeline may take from 0 to 3 cycles to complete. 317349cc55cSDimitry Andric def P10W_SX : SchedWriteRes<[P10_SX]> { 318349cc55cSDimitry Andric let Latency = 0; 319349cc55cSDimitry Andric } 320349cc55cSDimitry Andric 321349cc55cSDimitry Andric def P10W_SX_3C : SchedWriteRes<[P10_SX]> { 322349cc55cSDimitry Andric let Latency = 3; 323349cc55cSDimitry Andric } 324349cc55cSDimitry Andric 325349cc55cSDimitry Andric // A vMU pipeline may take 7 cycles to complete. 326349cc55cSDimitry Andric def P10W_vMU_7C : SchedWriteRes<[P10_BF]> { 327349cc55cSDimitry Andric let Latency = 7; 328349cc55cSDimitry Andric } 329349cc55cSDimitry Andric 330349cc55cSDimitry Andric // ***************** Read Advance Definitions ***************** 331349cc55cSDimitry Andric 332349cc55cSDimitry Andric // Modeling pipeline forwarding logic. 333349cc55cSDimitry Andric def P10BF_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_CY_7C, P10W_DF_13C, P10W_MM_10C]>; 334349cc55cSDimitry Andric def P10BF_Read_2C : SchedReadAdvance<2, [P10W_BF_7C]>; 335349cc55cSDimitry Andric def P10BR_Read_1C : SchedReadAdvance<1, [P10W_FX_3C, P10W_F2_4C]>; 336349cc55cSDimitry Andric def P10CY_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_DF_13C, P10W_MM_10C]>; 337349cc55cSDimitry Andric def P10CY_Read_3C : SchedReadAdvance<3, [P10W_CY_7C]>; 338349cc55cSDimitry Andric 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]>; 339349cc55cSDimitry Andric 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]>; 340349cc55cSDimitry Andric 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]>; 341349cc55cSDimitry Andric def P10F2_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>; 342349cc55cSDimitry Andric def P10FX_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>; 343349cc55cSDimitry Andric def P10LD_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C]>; 344349cc55cSDimitry Andric def P10MM_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_vMU_7C, P10W_BF_7C, P10W_CY_7C, P10W_DF_13C]>; 345349cc55cSDimitry Andric def P10MM_Read_6C : SchedReadAdvance<6, [P10W_MM_10C]>; 346349cc55cSDimitry Andric def P10MU_Read_1C : SchedReadAdvance<1, [P10W_DX_5C, P10W_MU_5C, P10W_DF_13C]>; 347349cc55cSDimitry Andric def P10PM_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>; 348349cc55cSDimitry Andric def P10ST_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C]>; 349349cc55cSDimitry Andric def P10SX_Read_1C : SchedReadAdvance<1, [P10W_ST_3C, P10W_SX_3C, P10W_FX_3C, P10W_F2_4C, P10W_PM_4C, P10W_MM_10C]>; 350349cc55cSDimitry Andric 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]>; 351349cc55cSDimitry Andric 352349cc55cSDimitry Andric // Save 1 cycles if pipeline BF reads the data from pipelines DX, MU, vMU, CY, DF, MM. 353349cc55cSDimitry Andric // Save 2 cycles if pipeline BF reads the data from pipelines BF. 354349cc55cSDimitry Andric def P10BF_Read : SchedReadVariant<[ 355349cc55cSDimitry Andric SchedVar<P10W_BF_7C_Pred, [P10BF_Read_2C]>, 356349cc55cSDimitry Andric SchedVar<NoSchedPred, [P10BF_Read_1C]> 357349cc55cSDimitry Andric ]>; 358349cc55cSDimitry Andric 359349cc55cSDimitry Andric // Save 1 cycles if pipeline CY reads the data from pipelines DX, MU, vMU, BF, DF, MM. 360349cc55cSDimitry Andric // Save 3 cycles if pipeline CY reads the data from pipelines CY. 361349cc55cSDimitry Andric def P10CY_Read : SchedReadVariant<[ 362349cc55cSDimitry Andric SchedVar<P10W_CY_7C_Pred, [P10CY_Read_3C]>, 363349cc55cSDimitry Andric SchedVar<NoSchedPred, [P10CY_Read_1C]> 364349cc55cSDimitry Andric ]>; 365349cc55cSDimitry Andric 366349cc55cSDimitry Andric // Save 1 cycles if pipeline MM reads the data from pipelines DX, MU, vMU, BF, CY, DF. 367349cc55cSDimitry Andric // Save 6 cycles if pipeline MM reads the data from pipelines MM. 368349cc55cSDimitry Andric def P10MM_Read : SchedReadVariant<[ 369349cc55cSDimitry Andric SchedVar<P10W_MM_10C_Pred, [P10MM_Read_6C]>, 370349cc55cSDimitry Andric SchedVar<NoSchedPred, [P10MM_Read_1C]> 371349cc55cSDimitry Andric ]>; 372349cc55cSDimitry Andric 373349cc55cSDimitry Andric // Save 1 cycles if pipeline BR reads the data from pipelines FX, F2. 374349cc55cSDimitry Andric def : SchedAlias<P10BR_Read, P10BR_Read_1C>; 375349cc55cSDimitry Andric 376349cc55cSDimitry Andric // Save 1 cycles if pipeline DF reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM. 377349cc55cSDimitry Andric def : SchedAlias<P10DF_Read, P10DF_Read_1C>; 378349cc55cSDimitry Andric 379349cc55cSDimitry Andric // Save 1 cycles if pipeline DV reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM. 380349cc55cSDimitry Andric def : SchedAlias<P10DV_Read, P10DV_Read_1C>; 381349cc55cSDimitry Andric 382349cc55cSDimitry Andric // Save 1 cycles if pipeline DX reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM. 383349cc55cSDimitry Andric def : SchedAlias<P10DX_Read, P10DX_Read_1C>; 384349cc55cSDimitry Andric 385349cc55cSDimitry Andric // Save 1 cycles if pipeline F2 reads the data from pipelines ST, SX, FX, F2, PM. 386349cc55cSDimitry Andric def : SchedAlias<P10F2_Read, P10F2_Read_1C>; 387349cc55cSDimitry Andric 388349cc55cSDimitry Andric // Save 1 cycles if pipeline FX reads the data from pipelines ST, SX, FX, F2, PM. 389349cc55cSDimitry Andric def : SchedAlias<P10FX_Read, P10FX_Read_1C>; 390349cc55cSDimitry Andric 391349cc55cSDimitry Andric // Save 1 cycles if pipeline LD reads the data from pipelines ST, SX, FX, F2. 392349cc55cSDimitry Andric def : SchedAlias<P10LD_Read, P10LD_Read_1C>; 393349cc55cSDimitry Andric 394349cc55cSDimitry Andric // Save 1 cycles if pipeline MU reads the data from pipelines DX, MU, DF. 395349cc55cSDimitry Andric def : SchedAlias<P10MU_Read, P10MU_Read_1C>; 396349cc55cSDimitry Andric 397349cc55cSDimitry Andric // Save 1 cycles if pipeline PM reads the data from pipelines ST, SX, FX, F2, PM. 398349cc55cSDimitry Andric def : SchedAlias<P10PM_Read, P10PM_Read_1C>; 399349cc55cSDimitry Andric 400349cc55cSDimitry Andric // Save 1 cycles if pipeline ST reads the data from pipelines ST, SX, FX, F2, PM. 401349cc55cSDimitry Andric def : SchedAlias<P10ST_Read, P10ST_Read_1C>; 402349cc55cSDimitry Andric 403349cc55cSDimitry Andric // Save 1 cycles if pipeline SX reads the data from pipelines ST, SX, FX, F2, PM, MM. 404349cc55cSDimitry Andric def : SchedAlias<P10SX_Read, P10SX_Read_1C>; 405349cc55cSDimitry Andric 406349cc55cSDimitry Andric // Save 1 cycles if pipeline vMU reads the data from pipelines DX, MU, vMU, BF, CY, DF, MM. 407349cc55cSDimitry Andric def : SchedAlias<P10vMU_Read, P10vMU_Read_1C>; 408349cc55cSDimitry Andric 409349cc55cSDimitry Andric include "P10InstrResources.td" 410349cc55cSDimitry Andric} 411