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// Zbkb extension 37def WriteBREV8 : SchedWrite; // brev8 38def WritePACK : SchedWrite; // pack/packh 39def WritePACK32 : SchedWrite; // packw 40def WriteZIP : SchedWrite; // zip/unzip 41 42// Zbkx extension 43def WriteXPERM : SchedWrite; // xperm4/xperm8 44 45/// Define scheduler resources associated with use operands. 46 47// Zba extension 48def ReadSHXADD : SchedRead; // sh1add/sh2add/sh3add 49def ReadSHXADD32 : SchedRead; // sh1add.uw/sh2add.uw/sh3add.uw 50 51// Zbb extension 52def ReadRotateImm : SchedRead; 53def ReadRotateImm32 : SchedRead; 54def ReadRotateReg : SchedRead; 55def ReadRotateReg32 : SchedRead; 56def ReadCLZ : SchedRead; 57def ReadCLZ32 : SchedRead; 58def ReadCTZ : SchedRead; 59def ReadCTZ32 : SchedRead; 60def ReadCPOP : SchedRead; 61def ReadCPOP32 : SchedRead; 62def ReadREV8 : SchedRead; 63def ReadORCB : SchedRead; 64 65// Zbc extension 66def ReadCLMUL : SchedRead; // CLMUL/CLMULR/CLMULH 67 68// Zbs extension 69def ReadSingleBit : SchedRead; // BCLR/BSET/BINV/BEXT 70def ReadSingleBitImm: SchedRead; // BCLRI/BSETI/BINVI/BEXTI 71 72// Zbkb extension 73def ReadBREV8 : SchedRead; // brev8 74def ReadPACK : SchedRead; // pack/packh 75def ReadPACK32 : SchedRead; // packw 76def ReadZIP : SchedRead; // zip/unzip 77 78// Zbkx extension 79def ReadXPERM : SchedRead; // xperm4/xperm8 80 81/// Define default scheduler resources for B. 82 83multiclass UnsupportedSchedZba { 84let Unsupported = true in { 85def : WriteRes<WriteSHXADD, []>; 86def : WriteRes<WriteSHXADD32, []>; 87 88def : ReadAdvance<ReadSHXADD, 0>; 89def : ReadAdvance<ReadSHXADD32, 0>; 90} 91} 92 93multiclass UnsupportedSchedZbb { 94let Unsupported = true in { 95def : WriteRes<WriteRotateImm, []>; 96def : WriteRes<WriteRotateImm32, []>; 97def : WriteRes<WriteRotateReg, []>; 98def : WriteRes<WriteRotateReg32, []>; 99def : WriteRes<WriteCLZ, []>; 100def : WriteRes<WriteCLZ32, []>; 101def : WriteRes<WriteCTZ, []>; 102def : WriteRes<WriteCTZ32, []>; 103def : WriteRes<WriteCPOP, []>; 104def : WriteRes<WriteCPOP32, []>; 105def : WriteRes<WriteREV8, []>; 106def : WriteRes<WriteORCB, []>; 107 108def : ReadAdvance<ReadRotateImm, 0>; 109def : ReadAdvance<ReadRotateImm32, 0>; 110def : ReadAdvance<ReadRotateReg, 0>; 111def : ReadAdvance<ReadRotateReg32, 0>; 112def : ReadAdvance<ReadCLZ, 0>; 113def : ReadAdvance<ReadCLZ32, 0>; 114def : ReadAdvance<ReadCTZ, 0>; 115def : ReadAdvance<ReadCTZ32, 0>; 116def : ReadAdvance<ReadCPOP, 0>; 117def : ReadAdvance<ReadCPOP32, 0>; 118def : ReadAdvance<ReadREV8, 0>; 119def : ReadAdvance<ReadORCB, 0>; 120} 121} 122 123multiclass UnsupportedSchedZbc { 124let Unsupported = true in { 125def : WriteRes<WriteCLMUL, []>; 126 127def : ReadAdvance<ReadCLMUL, 0>; 128} 129} 130 131multiclass UnsupportedSchedZbs { 132let Unsupported = true in { 133def : WriteRes<WriteSingleBit, []>; 134def : WriteRes<WriteSingleBitImm, []>; 135 136def : ReadAdvance<ReadSingleBit, 0>; 137def : ReadAdvance<ReadSingleBitImm, 0>; 138} 139} 140 141multiclass UnsupportedSchedZbkb { 142let Unsupported = true in { 143def : WriteRes<WriteBREV8, []>; 144def : WriteRes<WritePACK, []>; 145def : WriteRes<WritePACK32, []>; 146def : WriteRes<WriteZIP, []>; 147 148def : ReadAdvance<ReadBREV8, 0>; 149def : ReadAdvance<ReadPACK, 0>; 150def : ReadAdvance<ReadPACK32, 0>; 151def : ReadAdvance<ReadZIP, 0>; 152} 153} 154 155multiclass UnsupportedSchedZbkx { 156let Unsupported = true in { 157def : WriteRes<WriteXPERM, []>; 158 159def : ReadAdvance<ReadXPERM, 0>; 160} 161} 162