1//===-- RISCVScheduleB.td - RISCV Scheduling Definitions B -*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9/// Define scheduler resources associated with def operands. 10 11// Zba extension 12def WriteSHXADD : SchedWrite; // sh1add/sh2add/sh3add 13def WriteSHXADD32 : SchedWrite; // sh1add.uw/sh2add.uw/sh3add.uw 14 15// Zbb extension 16def WriteRotateImm : SchedWrite; 17def WriteRotateImm32 : SchedWrite; 18def WriteRotateReg : SchedWrite; 19def WriteRotateReg32 : SchedWrite; 20def WriteCLZ : SchedWrite; 21def WriteCLZ32 : SchedWrite; 22def WriteCTZ : SchedWrite; 23def WriteCTZ32 : SchedWrite; 24def WriteCPOP : SchedWrite; 25def WriteCPOP32 : SchedWrite; 26def WriteREV8 : SchedWrite; 27def WriteORCB : SchedWrite; 28 29// Zbc extension 30def WriteCLMUL : SchedWrite; // CLMUL/CLMULR/CLMULH 31 32// Zbs extension 33def WriteSingleBit : SchedWrite; // BCLR/BSET/BINV/BEXT 34def WriteSingleBitImm: SchedWrite; // BCLRI/BSETI/BINVI/BEXTI 35 36// Zbe extension 37def WriteDecompress : SchedWrite; // bdecompress 38def WriteCompress : SchedWrite; // bcompress 39def WriteDecompress32: SchedWrite; // bdecompressw 40def WriteCompress32 : SchedWrite; // bcompressw 41 42// Zbf extension 43def WriteBFP : SchedWrite; // BFP 44def WriteBFP32 : SchedWrite; // BFPW 45 46// Zbm extension 47def WriteBMatrix : SchedWrite; // bmator/bmatxor/bmatflip 48 49// Zbp extension 50def WriteORC : SchedWrite; // gorc 51def WriteREV : SchedWrite; // grev 52def WriteORC32 : SchedWrite; // gorcw 53def WriteREV32 : SchedWrite; // grevw 54def WriteREVImm : SchedWrite; // grevi 55def WriteORCImm : SchedWrite; // gorci 56def WriteREVImm32 : SchedWrite; // greviw 57def WriteORCImm32 : SchedWrite; // gorciw 58def WriteSHFL : SchedWrite; // shfl 59def WriteUNSHFL : SchedWrite; // unshfl 60def WriteSHFL32 : SchedWrite; // shflw 61def WriteUNSHFL32 : SchedWrite; // unshflw 62def WriteSHFLImm : SchedWrite; // shfli 63def WriteUNSHFLImm : SchedWrite; // unshfli 64def WriteXPERMH : SchedWrite; // xperm.h 65def WriteXPERMW : SchedWrite; // xperm.w 66def WritePACK : SchedWrite; // pack/packh 67def WritePACK32 : SchedWrite; // packw 68def WritePACKU : SchedWrite; // packu 69def WritePACKU32 : SchedWrite; // packuw 70 71// Zbr extension 72def WriteCRCB : SchedWrite; // crc32.b 73def WriteCRCH : SchedWrite; // crc32.h 74def WriteCRCW : SchedWrite; // crc32.w 75def WriteCRCD : SchedWrite; // crc32.d 76def WriteCRCCB : SchedWrite; // crc32c.b 77def WriteCRCCH : SchedWrite; // crc32c.h 78def WriteCRCCW : SchedWrite; // crc32c.w 79def WriteCRCCD : SchedWrite; // crc32c.d 80 81// Zbt extension 82def WriteCMix : SchedWrite; // cmix 83def WriteCMov : SchedWrite; // cmov 84def WriteFSReg : SchedWrite; // fsl/fsr 85def WriteFSRImm : SchedWrite; // fsri 86def WriteFSReg32 : SchedWrite; // fslw/fsrw 87def WriteFSRImm32 : SchedWrite; // fsriw 88 89/// Define scheduler resources associated with use operands. 90 91// Zba extension 92def ReadSHXADD : SchedRead; // sh1add/sh2add/sh3add 93def ReadSHXADD32 : SchedRead; // sh1add.uw/sh2add.uw/sh3add.uw 94 95// Zbb extension 96def ReadRotateImm : SchedRead; 97def ReadRotateImm32 : SchedRead; 98def ReadRotateReg : SchedRead; 99def ReadRotateReg32 : SchedRead; 100def ReadCLZ : SchedRead; 101def ReadCLZ32 : SchedRead; 102def ReadCTZ : SchedRead; 103def ReadCTZ32 : SchedRead; 104def ReadCPOP : SchedRead; 105def ReadCPOP32 : SchedRead; 106def ReadREV8 : SchedRead; 107def ReadORCB : SchedRead; 108 109// Zbc extension 110def ReadCLMUL : SchedRead; // CLMUL/CLMULR/CLMULH 111 112// Zbs extension 113def ReadSingleBit : SchedRead; // BCLR/BSET/BINV/BEXT 114def ReadSingleBitImm: SchedRead; // BCLRI/BSETI/BINVI/BEXTI 115 116// Zbe extension 117def ReadDecompress : SchedRead; // bdecompress 118def ReadCompress : SchedRead; // bcompress 119def ReadDecompress32: SchedRead; // bdecompressw 120def ReadCompress32 : SchedRead; // bcompressw 121 122// Zbf extension 123def ReadBFP : SchedRead; // BFP 124def ReadBFP32 : SchedRead; // BFPW 125 126// Zbm extension 127def ReadBMatrix : SchedRead; // bmator/bmatxor/bmatflip 128 129// Zbp extension 130def ReadORC : SchedRead; // gorc 131def ReadREV : SchedRead; // grev 132def ReadORC32 : SchedRead; // gorcw 133def ReadREV32 : SchedRead; // grevw 134def ReadREVImm : SchedRead; // grevi 135def ReadORCImm : SchedRead; // groci 136def ReadREVImm32 : SchedRead; // greviw 137def ReadORCImm32 : SchedRead; // gorciw 138def ReadSHFL : SchedRead; // shfl 139def ReadUNSHFL : SchedRead; // unshfl 140def ReadSHFL32 : SchedRead; // shflw 141def ReadUNSHFL32 : SchedRead; // unshflw 142def ReadSHFLImm : SchedRead; // shfli 143def ReadUNSHFLImm : SchedRead; // unshfli 144def ReadXPERMH : SchedRead; // xperm.h 145def ReadXPERMW : SchedRead; // xperm.w 146def ReadPACK : SchedRead; // pack/packh 147def ReadPACK32 : SchedRead; // packw 148def ReadPACKU : SchedRead; // packu 149def ReadPACKU32 : SchedRead; // packuw 150 151// Zbr extension 152def ReadCRCB : SchedRead; // crc32.b 153def ReadCRCH : SchedRead; // crc32.h 154def ReadCRCW : SchedRead; // crc32.w 155def ReadCRCD : SchedRead; // crc32.d 156def ReadCRCCB : SchedRead; // crc32c.b 157def ReadCRCCH : SchedRead; // crc32c.h 158def ReadCRCCW : SchedRead; // crc32c.w 159def ReadCRCCD : SchedRead; // crc32c.d 160 161// Zbt extension 162def ReadCMix : SchedRead; // cmix 163def ReadCMov : SchedRead; // cmov 164def ReadFSReg : SchedRead; // fsl/fsr 165def ReadFSRImm : SchedRead; // fsri 166def ReadFSReg32 : SchedRead; // fslw/fsrw 167def ReadFSRImm32 : SchedRead; // fsriw 168 169/// Define default scheduler resources for B. 170 171multiclass UnsupportedSchedZba { 172let Unsupported = true in { 173def : WriteRes<WriteSHXADD, []>; 174def : WriteRes<WriteSHXADD32, []>; 175 176def : ReadAdvance<ReadSHXADD, 0>; 177def : ReadAdvance<ReadSHXADD32, 0>; 178} 179} 180 181multiclass UnsupportedSchedZbb { 182let Unsupported = true in { 183def : WriteRes<WriteRotateImm, []>; 184def : WriteRes<WriteRotateImm32, []>; 185def : WriteRes<WriteRotateReg, []>; 186def : WriteRes<WriteRotateReg32, []>; 187def : WriteRes<WriteCLZ, []>; 188def : WriteRes<WriteCLZ32, []>; 189def : WriteRes<WriteCTZ, []>; 190def : WriteRes<WriteCTZ32, []>; 191def : WriteRes<WriteCPOP, []>; 192def : WriteRes<WriteCPOP32, []>; 193def : WriteRes<WriteREV8, []>; 194def : WriteRes<WriteORCB, []>; 195 196def : ReadAdvance<ReadRotateImm, 0>; 197def : ReadAdvance<ReadRotateImm32, 0>; 198def : ReadAdvance<ReadRotateReg, 0>; 199def : ReadAdvance<ReadRotateReg32, 0>; 200def : ReadAdvance<ReadCLZ, 0>; 201def : ReadAdvance<ReadCLZ32, 0>; 202def : ReadAdvance<ReadCTZ, 0>; 203def : ReadAdvance<ReadCTZ32, 0>; 204def : ReadAdvance<ReadCPOP, 0>; 205def : ReadAdvance<ReadCPOP32, 0>; 206def : ReadAdvance<ReadREV8, 0>; 207def : ReadAdvance<ReadORCB, 0>; 208} 209} 210 211multiclass UnsupportedSchedZbc { 212let Unsupported = true in { 213def : WriteRes<WriteCLMUL, []>; 214 215def : ReadAdvance<ReadCLMUL, 0>; 216} 217} 218 219multiclass UnsupportedSchedZbs { 220let Unsupported = true in { 221def : WriteRes<WriteSingleBit, []>; 222def : WriteRes<WriteSingleBitImm, []>; 223 224def : ReadAdvance<ReadSingleBit, 0>; 225def : ReadAdvance<ReadSingleBitImm, 0>; 226} 227} 228 229multiclass UnsupportedSchedZbe { 230let Unsupported = true in { 231def : WriteRes<WriteDecompress, []>; 232def : WriteRes<WriteCompress, []>; 233def : WriteRes<WriteDecompress32, []>; 234def : WriteRes<WriteCompress32, []>; 235 236def : ReadAdvance<ReadDecompress, 0>; 237def : ReadAdvance<ReadCompress, 0>; 238def : ReadAdvance<ReadDecompress32, 0>; 239def : ReadAdvance<ReadCompress32, 0>; 240} 241} 242 243multiclass UnsupportedSchedZbf { 244let Unsupported = true in { 245def : WriteRes<WriteBFP, []>; 246def : WriteRes<WriteBFP32, []>; 247 248def : ReadAdvance<ReadBFP, 0>; 249def : ReadAdvance<ReadBFP32, 0>; 250} 251} 252 253multiclass UnsupportedSchedZbm { 254let Unsupported = true in { 255def : WriteRes<WriteBMatrix, []>; 256 257def : ReadAdvance<ReadBMatrix, 0>; 258} 259} 260 261multiclass UnsupportedSchedZbp { 262let Unsupported = true in { 263def : WriteRes<WriteORC, []>; 264def : WriteRes<WriteREV, []>; 265def : WriteRes<WriteORC32, []>; 266def : WriteRes<WriteREV32, []>; 267def : WriteRes<WriteREVImm, []>; 268def : WriteRes<WriteORCImm, []>; 269def : WriteRes<WriteREVImm32, []>; 270def : WriteRes<WriteORCImm32, []>; 271def : WriteRes<WriteSHFL, []>; 272def : WriteRes<WriteUNSHFL, []>; 273def : WriteRes<WriteSHFL32, []>; 274def : WriteRes<WriteUNSHFL32, []>; 275def : WriteRes<WriteSHFLImm, []>; 276def : WriteRes<WriteUNSHFLImm, []>; 277def : WriteRes<WriteXPERMH, []>; 278def : WriteRes<WriteXPERMW, []>; 279def : WriteRes<WritePACK, []>; 280def : WriteRes<WritePACK32, []>; 281def : WriteRes<WritePACKU, []>; 282def : WriteRes<WritePACKU32, []>; 283 284def : ReadAdvance<ReadORC, 0>; 285def : ReadAdvance<ReadREV, 0>; 286def : ReadAdvance<ReadORC32, 0>; 287def : ReadAdvance<ReadREV32, 0>; 288def : ReadAdvance<ReadREVImm, 0>; 289def : ReadAdvance<ReadORCImm, 0>; 290def : ReadAdvance<ReadREVImm32, 0>; 291def : ReadAdvance<ReadORCImm32, 0>; 292def : ReadAdvance<ReadSHFL, 0>; 293def : ReadAdvance<ReadUNSHFL, 0>; 294def : ReadAdvance<ReadSHFL32, 0>; 295def : ReadAdvance<ReadUNSHFL32, 0>; 296def : ReadAdvance<ReadSHFLImm, 0>; 297def : ReadAdvance<ReadUNSHFLImm, 0>; 298def : ReadAdvance<ReadXPERMH, 0>; 299def : ReadAdvance<ReadXPERMW, 0>; 300def : ReadAdvance<ReadPACK, 0>; 301def : ReadAdvance<ReadPACK32, 0>; 302def : ReadAdvance<ReadPACKU, 0>; 303def : ReadAdvance<ReadPACKU32, 0>; 304} 305} 306 307multiclass UnsupportedSchedZbr { 308let Unsupported = true in { 309def : WriteRes<WriteCRCB, []>; 310def : WriteRes<WriteCRCH, []>; 311def : WriteRes<WriteCRCW, []>; 312def : WriteRes<WriteCRCD, []>; 313def : WriteRes<WriteCRCCB, []>; 314def : WriteRes<WriteCRCCH, []>; 315def : WriteRes<WriteCRCCW, []>; 316def : WriteRes<WriteCRCCD, []>; 317 318def : ReadAdvance<ReadCRCB, 0>; 319def : ReadAdvance<ReadCRCH, 0>; 320def : ReadAdvance<ReadCRCW, 0>; 321def : ReadAdvance<ReadCRCD, 0>; 322def : ReadAdvance<ReadCRCCB, 0>; 323def : ReadAdvance<ReadCRCCH, 0>; 324def : ReadAdvance<ReadCRCCW, 0>; 325def : ReadAdvance<ReadCRCCD, 0>; 326} 327} 328 329multiclass UnsupportedSchedZbt { 330let Unsupported = true in { 331def : WriteRes<WriteCMix, []>; 332def : WriteRes<WriteCMov, []>; 333def : WriteRes<WriteFSReg, []>; 334def : WriteRes<WriteFSRImm, []>; 335def : WriteRes<WriteFSReg32, []>; 336def : WriteRes<WriteFSRImm32, []>; 337 338def : ReadAdvance<ReadCMix, 0>; 339def : ReadAdvance<ReadCMov, 0>; 340def : ReadAdvance<ReadFSReg, 0>; 341def : ReadAdvance<ReadFSRImm, 0>; 342def : ReadAdvance<ReadFSReg32, 0>; 343def : ReadAdvance<ReadFSRImm32, 0>; 344} 345} 346