| //===-- RISCVScheduleB.td - RISCV Scheduling Definitions B -*- tablegen -*-===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| /// Define scheduler resources associated with def operands. |
| |
| // Zba extension |
| def WriteSHXADD : SchedWrite; // sh1add/sh2add/sh3add |
| def WriteSHXADD32 : SchedWrite; // sh1add.uw/sh2add.uw/sh3add.uw |
| |
| // Zbb extension |
| def WriteRotateImm : SchedWrite; |
| def WriteRotateImm32 : SchedWrite; |
| def WriteRotateReg : SchedWrite; |
| def WriteRotateReg32 : SchedWrite; |
| def WriteCLZ : SchedWrite; |
| def WriteCLZ32 : SchedWrite; |
| def WriteCTZ : SchedWrite; |
| def WriteCTZ32 : SchedWrite; |
| def WriteCPOP : SchedWrite; |
| def WriteCPOP32 : SchedWrite; |
| def WriteREV8 : SchedWrite; |
| def WriteORCB : SchedWrite; |
| |
| // Zbc extension |
| def WriteCLMUL : SchedWrite; // CLMUL/CLMULR/CLMULH |
| |
| // Zbs extension |
| def WriteSingleBit : SchedWrite; // BCLR/BSET/BINV/BEXT |
| def WriteSingleBitImm: SchedWrite; // BCLRI/BSETI/BINVI/BEXTI |
| |
| // Zbe extension |
| def WriteDecompress : SchedWrite; // bdecompress |
| def WriteCompress : SchedWrite; // bcompress |
| def WriteDecompress32: SchedWrite; // bdecompressw |
| def WriteCompress32 : SchedWrite; // bcompressw |
| |
| // Zbf extension |
| def WriteBFP : SchedWrite; // BFP |
| def WriteBFP32 : SchedWrite; // BFPW |
| |
| // Zbm extension |
| def WriteBMatrix : SchedWrite; // bmator/bmatxor/bmatflip |
| |
| // Zbp extension |
| def WriteORC : SchedWrite; // gorc |
| def WriteREV : SchedWrite; // grev |
| def WriteORC32 : SchedWrite; // gorcw |
| def WriteREV32 : SchedWrite; // grevw |
| def WriteREVImm : SchedWrite; // grevi |
| def WriteORCImm : SchedWrite; // gorci |
| def WriteREVImm32 : SchedWrite; // greviw |
| def WriteORCImm32 : SchedWrite; // gorciw |
| def WriteSHFL : SchedWrite; // shfl |
| def WriteUNSHFL : SchedWrite; // unshfl |
| def WriteSHFL32 : SchedWrite; // shflw |
| def WriteUNSHFL32 : SchedWrite; // unshflw |
| def WriteSHFLImm : SchedWrite; // shfli |
| def WriteUNSHFLImm : SchedWrite; // unshfli |
| def WriteXPERMH : SchedWrite; // xperm.h |
| def WriteXPERMW : SchedWrite; // xperm.w |
| def WritePACK : SchedWrite; // pack/packh |
| def WritePACK32 : SchedWrite; // packw |
| def WritePACKU : SchedWrite; // packu |
| def WritePACKU32 : SchedWrite; // packuw |
| |
| // Zbr extension |
| def WriteCRCB : SchedWrite; // crc32.b |
| def WriteCRCH : SchedWrite; // crc32.h |
| def WriteCRCW : SchedWrite; // crc32.w |
| def WriteCRCD : SchedWrite; // crc32.d |
| def WriteCRCCB : SchedWrite; // crc32c.b |
| def WriteCRCCH : SchedWrite; // crc32c.h |
| def WriteCRCCW : SchedWrite; // crc32c.w |
| def WriteCRCCD : SchedWrite; // crc32c.d |
| |
| // Zbt extension |
| def WriteCMix : SchedWrite; // cmix |
| def WriteCMov : SchedWrite; // cmov |
| def WriteFSReg : SchedWrite; // fsl/fsr |
| def WriteFSRImm : SchedWrite; // fsri |
| def WriteFSReg32 : SchedWrite; // fslw/fsrw |
| def WriteFSRImm32 : SchedWrite; // fsriw |
| |
| /// Define scheduler resources associated with use operands. |
| |
| // Zba extension |
| def ReadSHXADD : SchedRead; // sh1add/sh2add/sh3add |
| def ReadSHXADD32 : SchedRead; // sh1add.uw/sh2add.uw/sh3add.uw |
| |
| // Zbb extension |
| def ReadRotateImm : SchedRead; |
| def ReadRotateImm32 : SchedRead; |
| def ReadRotateReg : SchedRead; |
| def ReadRotateReg32 : SchedRead; |
| def ReadCLZ : SchedRead; |
| def ReadCLZ32 : SchedRead; |
| def ReadCTZ : SchedRead; |
| def ReadCTZ32 : SchedRead; |
| def ReadCPOP : SchedRead; |
| def ReadCPOP32 : SchedRead; |
| def ReadREV8 : SchedRead; |
| def ReadORCB : SchedRead; |
| |
| // Zbc extension |
| def ReadCLMUL : SchedRead; // CLMUL/CLMULR/CLMULH |
| |
| // Zbs extension |
| def ReadSingleBit : SchedRead; // BCLR/BSET/BINV/BEXT |
| def ReadSingleBitImm: SchedRead; // BCLRI/BSETI/BINVI/BEXTI |
| |
| // Zbe extension |
| def ReadDecompress : SchedRead; // bdecompress |
| def ReadCompress : SchedRead; // bcompress |
| def ReadDecompress32: SchedRead; // bdecompressw |
| def ReadCompress32 : SchedRead; // bcompressw |
| |
| // Zbf extension |
| def ReadBFP : SchedRead; // BFP |
| def ReadBFP32 : SchedRead; // BFPW |
| |
| // Zbm extension |
| def ReadBMatrix : SchedRead; // bmator/bmatxor/bmatflip |
| |
| // Zbp extension |
| def ReadORC : SchedRead; // gorc |
| def ReadREV : SchedRead; // grev |
| def ReadORC32 : SchedRead; // gorcw |
| def ReadREV32 : SchedRead; // grevw |
| def ReadREVImm : SchedRead; // grevi |
| def ReadORCImm : SchedRead; // groci |
| def ReadREVImm32 : SchedRead; // greviw |
| def ReadORCImm32 : SchedRead; // gorciw |
| def ReadSHFL : SchedRead; // shfl |
| def ReadUNSHFL : SchedRead; // unshfl |
| def ReadSHFL32 : SchedRead; // shflw |
| def ReadUNSHFL32 : SchedRead; // unshflw |
| def ReadSHFLImm : SchedRead; // shfli |
| def ReadUNSHFLImm : SchedRead; // unshfli |
| def ReadXPERMH : SchedRead; // xperm.h |
| def ReadXPERMW : SchedRead; // xperm.w |
| def ReadPACK : SchedRead; // pack/packh |
| def ReadPACK32 : SchedRead; // packw |
| def ReadPACKU : SchedRead; // packu |
| def ReadPACKU32 : SchedRead; // packuw |
| |
| // Zbr extension |
| def ReadCRCB : SchedRead; // crc32.b |
| def ReadCRCH : SchedRead; // crc32.h |
| def ReadCRCW : SchedRead; // crc32.w |
| def ReadCRCD : SchedRead; // crc32.d |
| def ReadCRCCB : SchedRead; // crc32c.b |
| def ReadCRCCH : SchedRead; // crc32c.h |
| def ReadCRCCW : SchedRead; // crc32c.w |
| def ReadCRCCD : SchedRead; // crc32c.d |
| |
| // Zbt extension |
| def ReadCMix : SchedRead; // cmix |
| def ReadCMov : SchedRead; // cmov |
| def ReadFSReg : SchedRead; // fsl/fsr |
| def ReadFSRImm : SchedRead; // fsri |
| def ReadFSReg32 : SchedRead; // fslw/fsrw |
| def ReadFSRImm32 : SchedRead; // fsriw |
| |
| /// Define default scheduler resources for B. |
| |
| multiclass UnsupportedSchedZba { |
| let Unsupported = true in { |
| def : WriteRes<WriteSHXADD, []>; |
| def : WriteRes<WriteSHXADD32, []>; |
| |
| def : ReadAdvance<ReadSHXADD, 0>; |
| def : ReadAdvance<ReadSHXADD32, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbb { |
| let Unsupported = true in { |
| def : WriteRes<WriteRotateImm, []>; |
| def : WriteRes<WriteRotateImm32, []>; |
| def : WriteRes<WriteRotateReg, []>; |
| def : WriteRes<WriteRotateReg32, []>; |
| def : WriteRes<WriteCLZ, []>; |
| def : WriteRes<WriteCLZ32, []>; |
| def : WriteRes<WriteCTZ, []>; |
| def : WriteRes<WriteCTZ32, []>; |
| def : WriteRes<WriteCPOP, []>; |
| def : WriteRes<WriteCPOP32, []>; |
| def : WriteRes<WriteREV8, []>; |
| def : WriteRes<WriteORCB, []>; |
| |
| def : ReadAdvance<ReadRotateImm, 0>; |
| def : ReadAdvance<ReadRotateImm32, 0>; |
| def : ReadAdvance<ReadRotateReg, 0>; |
| def : ReadAdvance<ReadRotateReg32, 0>; |
| def : ReadAdvance<ReadCLZ, 0>; |
| def : ReadAdvance<ReadCLZ32, 0>; |
| def : ReadAdvance<ReadCTZ, 0>; |
| def : ReadAdvance<ReadCTZ32, 0>; |
| def : ReadAdvance<ReadCPOP, 0>; |
| def : ReadAdvance<ReadCPOP32, 0>; |
| def : ReadAdvance<ReadREV8, 0>; |
| def : ReadAdvance<ReadORCB, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbc { |
| let Unsupported = true in { |
| def : WriteRes<WriteCLMUL, []>; |
| |
| def : ReadAdvance<ReadCLMUL, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbs { |
| let Unsupported = true in { |
| def : WriteRes<WriteSingleBit, []>; |
| def : WriteRes<WriteSingleBitImm, []>; |
| |
| def : ReadAdvance<ReadSingleBit, 0>; |
| def : ReadAdvance<ReadSingleBitImm, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbe { |
| let Unsupported = true in { |
| def : WriteRes<WriteDecompress, []>; |
| def : WriteRes<WriteCompress, []>; |
| def : WriteRes<WriteDecompress32, []>; |
| def : WriteRes<WriteCompress32, []>; |
| |
| def : ReadAdvance<ReadDecompress, 0>; |
| def : ReadAdvance<ReadCompress, 0>; |
| def : ReadAdvance<ReadDecompress32, 0>; |
| def : ReadAdvance<ReadCompress32, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbf { |
| let Unsupported = true in { |
| def : WriteRes<WriteBFP, []>; |
| def : WriteRes<WriteBFP32, []>; |
| |
| def : ReadAdvance<ReadBFP, 0>; |
| def : ReadAdvance<ReadBFP32, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbm { |
| let Unsupported = true in { |
| def : WriteRes<WriteBMatrix, []>; |
| |
| def : ReadAdvance<ReadBMatrix, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbp { |
| let Unsupported = true in { |
| def : WriteRes<WriteORC, []>; |
| def : WriteRes<WriteREV, []>; |
| def : WriteRes<WriteORC32, []>; |
| def : WriteRes<WriteREV32, []>; |
| def : WriteRes<WriteREVImm, []>; |
| def : WriteRes<WriteORCImm, []>; |
| def : WriteRes<WriteREVImm32, []>; |
| def : WriteRes<WriteORCImm32, []>; |
| def : WriteRes<WriteSHFL, []>; |
| def : WriteRes<WriteUNSHFL, []>; |
| def : WriteRes<WriteSHFL32, []>; |
| def : WriteRes<WriteUNSHFL32, []>; |
| def : WriteRes<WriteSHFLImm, []>; |
| def : WriteRes<WriteUNSHFLImm, []>; |
| def : WriteRes<WriteXPERMH, []>; |
| def : WriteRes<WriteXPERMW, []>; |
| def : WriteRes<WritePACK, []>; |
| def : WriteRes<WritePACK32, []>; |
| def : WriteRes<WritePACKU, []>; |
| def : WriteRes<WritePACKU32, []>; |
| |
| def : ReadAdvance<ReadORC, 0>; |
| def : ReadAdvance<ReadREV, 0>; |
| def : ReadAdvance<ReadORC32, 0>; |
| def : ReadAdvance<ReadREV32, 0>; |
| def : ReadAdvance<ReadREVImm, 0>; |
| def : ReadAdvance<ReadORCImm, 0>; |
| def : ReadAdvance<ReadREVImm32, 0>; |
| def : ReadAdvance<ReadORCImm32, 0>; |
| def : ReadAdvance<ReadSHFL, 0>; |
| def : ReadAdvance<ReadUNSHFL, 0>; |
| def : ReadAdvance<ReadSHFL32, 0>; |
| def : ReadAdvance<ReadUNSHFL32, 0>; |
| def : ReadAdvance<ReadSHFLImm, 0>; |
| def : ReadAdvance<ReadUNSHFLImm, 0>; |
| def : ReadAdvance<ReadXPERMH, 0>; |
| def : ReadAdvance<ReadXPERMW, 0>; |
| def : ReadAdvance<ReadPACK, 0>; |
| def : ReadAdvance<ReadPACK32, 0>; |
| def : ReadAdvance<ReadPACKU, 0>; |
| def : ReadAdvance<ReadPACKU32, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbr { |
| let Unsupported = true in { |
| def : WriteRes<WriteCRCB, []>; |
| def : WriteRes<WriteCRCH, []>; |
| def : WriteRes<WriteCRCW, []>; |
| def : WriteRes<WriteCRCD, []>; |
| def : WriteRes<WriteCRCCB, []>; |
| def : WriteRes<WriteCRCCH, []>; |
| def : WriteRes<WriteCRCCW, []>; |
| def : WriteRes<WriteCRCCD, []>; |
| |
| def : ReadAdvance<ReadCRCB, 0>; |
| def : ReadAdvance<ReadCRCH, 0>; |
| def : ReadAdvance<ReadCRCW, 0>; |
| def : ReadAdvance<ReadCRCD, 0>; |
| def : ReadAdvance<ReadCRCCB, 0>; |
| def : ReadAdvance<ReadCRCCH, 0>; |
| def : ReadAdvance<ReadCRCCW, 0>; |
| def : ReadAdvance<ReadCRCCD, 0>; |
| } |
| } |
| |
| multiclass UnsupportedSchedZbt { |
| let Unsupported = true in { |
| def : WriteRes<WriteCMix, []>; |
| def : WriteRes<WriteCMov, []>; |
| def : WriteRes<WriteFSReg, []>; |
| def : WriteRes<WriteFSRImm, []>; |
| def : WriteRes<WriteFSReg32, []>; |
| def : WriteRes<WriteFSRImm32, []>; |
| |
| def : ReadAdvance<ReadCMix, 0>; |
| def : ReadAdvance<ReadCMov, 0>; |
| def : ReadAdvance<ReadFSReg, 0>; |
| def : ReadAdvance<ReadFSRImm, 0>; |
| def : ReadAdvance<ReadFSReg32, 0>; |
| def : ReadAdvance<ReadFSRImm32, 0>; |
| } |
| } |