106c3fb27SDimitry Andric//===- RISCVScheduleB.td - RISC-V Scheduling Definitions B -*- tablegen -*-===// 2bdd1243dSDimitry Andric// 3bdd1243dSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bdd1243dSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5bdd1243dSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bdd1243dSDimitry Andric// 7bdd1243dSDimitry Andric//===----------------------------------------------------------------------===// 8bdd1243dSDimitry Andric 9bdd1243dSDimitry Andric/// Define scheduler resources associated with def operands. 10bdd1243dSDimitry Andric 11bdd1243dSDimitry Andric// Zba extension 12bdd1243dSDimitry Andricdef WriteSHXADD : SchedWrite; // sh1add/sh2add/sh3add 13bdd1243dSDimitry Andricdef WriteSHXADD32 : SchedWrite; // sh1add.uw/sh2add.uw/sh3add.uw 14bdd1243dSDimitry Andric 15bdd1243dSDimitry Andric// Zbb extension 16bdd1243dSDimitry Andricdef WriteRotateImm : SchedWrite; 17bdd1243dSDimitry Andricdef WriteRotateImm32 : SchedWrite; 18bdd1243dSDimitry Andricdef WriteRotateReg : SchedWrite; 19bdd1243dSDimitry Andricdef WriteRotateReg32 : SchedWrite; 20bdd1243dSDimitry Andricdef WriteCLZ : SchedWrite; 21bdd1243dSDimitry Andricdef WriteCLZ32 : SchedWrite; 22bdd1243dSDimitry Andricdef WriteCTZ : SchedWrite; 23bdd1243dSDimitry Andricdef WriteCTZ32 : SchedWrite; 24bdd1243dSDimitry Andricdef WriteCPOP : SchedWrite; 25bdd1243dSDimitry Andricdef WriteCPOP32 : SchedWrite; 26bdd1243dSDimitry Andricdef WriteREV8 : SchedWrite; 27bdd1243dSDimitry Andricdef WriteORCB : SchedWrite; 28*0fca6ea1SDimitry Andricdef WriteIMinMax : SchedWrite; 29bdd1243dSDimitry Andric 30bdd1243dSDimitry Andric// Zbc extension 31bdd1243dSDimitry Andricdef WriteCLMUL : SchedWrite; // CLMUL/CLMULR/CLMULH 32bdd1243dSDimitry Andric 33bdd1243dSDimitry Andric// Zbs extension 3406c3fb27SDimitry Andricdef WriteSingleBit : SchedWrite; // BCLR/BSET/BINV 3506c3fb27SDimitry Andricdef WriteSingleBitImm: SchedWrite; // BCLRI/BSETI/BINVI 3606c3fb27SDimitry Andricdef WriteBEXT : SchedWrite; // BEXT 3706c3fb27SDimitry Andricdef WriteBEXTI : SchedWrite; // BEXTI 38bdd1243dSDimitry Andric 39bdd1243dSDimitry Andric// Zbkb extension 40bdd1243dSDimitry Andricdef WriteBREV8 : SchedWrite; // brev8 41bdd1243dSDimitry Andricdef WritePACK : SchedWrite; // pack/packh 42bdd1243dSDimitry Andricdef WritePACK32 : SchedWrite; // packw 43bdd1243dSDimitry Andricdef WriteZIP : SchedWrite; // zip/unzip 44bdd1243dSDimitry Andric 45bdd1243dSDimitry Andric// Zbkx extension 46bdd1243dSDimitry Andricdef WriteXPERM : SchedWrite; // xperm4/xperm8 47bdd1243dSDimitry Andric 48bdd1243dSDimitry Andric/// Define scheduler resources associated with use operands. 49bdd1243dSDimitry Andric 50bdd1243dSDimitry Andric// Zba extension 51bdd1243dSDimitry Andricdef ReadSHXADD : SchedRead; // sh1add/sh2add/sh3add 52bdd1243dSDimitry Andricdef ReadSHXADD32 : SchedRead; // sh1add.uw/sh2add.uw/sh3add.uw 53bdd1243dSDimitry Andric 54bdd1243dSDimitry Andric// Zbb extension 55bdd1243dSDimitry Andricdef ReadRotateImm : SchedRead; 56bdd1243dSDimitry Andricdef ReadRotateImm32 : SchedRead; 57bdd1243dSDimitry Andricdef ReadRotateReg : SchedRead; 58bdd1243dSDimitry Andricdef ReadRotateReg32 : SchedRead; 59bdd1243dSDimitry Andricdef ReadCLZ : SchedRead; 60bdd1243dSDimitry Andricdef ReadCLZ32 : SchedRead; 61bdd1243dSDimitry Andricdef ReadCTZ : SchedRead; 62bdd1243dSDimitry Andricdef ReadCTZ32 : SchedRead; 63bdd1243dSDimitry Andricdef ReadCPOP : SchedRead; 64bdd1243dSDimitry Andricdef ReadCPOP32 : SchedRead; 65bdd1243dSDimitry Andricdef ReadREV8 : SchedRead; 66bdd1243dSDimitry Andricdef ReadORCB : SchedRead; 67*0fca6ea1SDimitry Andricdef ReadIMinMax : SchedRead; 68bdd1243dSDimitry Andric 69bdd1243dSDimitry Andric// Zbc extension 70bdd1243dSDimitry Andricdef ReadCLMUL : SchedRead; // CLMUL/CLMULR/CLMULH 71bdd1243dSDimitry Andric 72bdd1243dSDimitry Andric// Zbs extension 73bdd1243dSDimitry Andricdef ReadSingleBit : SchedRead; // BCLR/BSET/BINV/BEXT 74bdd1243dSDimitry Andricdef ReadSingleBitImm: SchedRead; // BCLRI/BSETI/BINVI/BEXTI 75bdd1243dSDimitry Andric 76bdd1243dSDimitry Andric// Zbkb extension 77bdd1243dSDimitry Andricdef ReadBREV8 : SchedRead; // brev8 78bdd1243dSDimitry Andricdef ReadPACK : SchedRead; // pack/packh 79bdd1243dSDimitry Andricdef ReadPACK32 : SchedRead; // packw 80bdd1243dSDimitry Andricdef ReadZIP : SchedRead; // zip/unzip 81bdd1243dSDimitry Andric 82bdd1243dSDimitry Andric// Zbkx extension 83bdd1243dSDimitry Andricdef ReadXPERM : SchedRead; // xperm4/xperm8 84bdd1243dSDimitry Andric 85bdd1243dSDimitry Andric/// Define default scheduler resources for B. 86bdd1243dSDimitry Andric 87bdd1243dSDimitry Andricmulticlass UnsupportedSchedZba { 88bdd1243dSDimitry Andriclet Unsupported = true in { 89bdd1243dSDimitry Andricdef : WriteRes<WriteSHXADD, []>; 90bdd1243dSDimitry Andricdef : WriteRes<WriteSHXADD32, []>; 91bdd1243dSDimitry Andric 92bdd1243dSDimitry Andricdef : ReadAdvance<ReadSHXADD, 0>; 93bdd1243dSDimitry Andricdef : ReadAdvance<ReadSHXADD32, 0>; 94bdd1243dSDimitry Andric} 95bdd1243dSDimitry Andric} 96bdd1243dSDimitry Andric 97bdd1243dSDimitry Andricmulticlass UnsupportedSchedZbb { 98bdd1243dSDimitry Andriclet Unsupported = true in { 99bdd1243dSDimitry Andricdef : WriteRes<WriteRotateImm, []>; 100bdd1243dSDimitry Andricdef : WriteRes<WriteRotateImm32, []>; 101bdd1243dSDimitry Andricdef : WriteRes<WriteRotateReg, []>; 102bdd1243dSDimitry Andricdef : WriteRes<WriteRotateReg32, []>; 103bdd1243dSDimitry Andricdef : WriteRes<WriteCLZ, []>; 104bdd1243dSDimitry Andricdef : WriteRes<WriteCLZ32, []>; 105bdd1243dSDimitry Andricdef : WriteRes<WriteCTZ, []>; 106bdd1243dSDimitry Andricdef : WriteRes<WriteCTZ32, []>; 107bdd1243dSDimitry Andricdef : WriteRes<WriteCPOP, []>; 108bdd1243dSDimitry Andricdef : WriteRes<WriteCPOP32, []>; 109bdd1243dSDimitry Andricdef : WriteRes<WriteREV8, []>; 110bdd1243dSDimitry Andricdef : WriteRes<WriteORCB, []>; 111*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMinMax, []>; 112bdd1243dSDimitry Andric 113bdd1243dSDimitry Andricdef : ReadAdvance<ReadRotateImm, 0>; 114bdd1243dSDimitry Andricdef : ReadAdvance<ReadRotateImm32, 0>; 115bdd1243dSDimitry Andricdef : ReadAdvance<ReadRotateReg, 0>; 116bdd1243dSDimitry Andricdef : ReadAdvance<ReadRotateReg32, 0>; 117bdd1243dSDimitry Andricdef : ReadAdvance<ReadCLZ, 0>; 118bdd1243dSDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>; 119bdd1243dSDimitry Andricdef : ReadAdvance<ReadCTZ, 0>; 120bdd1243dSDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>; 121bdd1243dSDimitry Andricdef : ReadAdvance<ReadCPOP, 0>; 122bdd1243dSDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>; 123bdd1243dSDimitry Andricdef : ReadAdvance<ReadREV8, 0>; 124bdd1243dSDimitry Andricdef : ReadAdvance<ReadORCB, 0>; 125*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMinMax, 0>; 126bdd1243dSDimitry Andric} 127bdd1243dSDimitry Andric} 128bdd1243dSDimitry Andric 129bdd1243dSDimitry Andricmulticlass UnsupportedSchedZbc { 130bdd1243dSDimitry Andriclet Unsupported = true in { 131bdd1243dSDimitry Andricdef : WriteRes<WriteCLMUL, []>; 132bdd1243dSDimitry Andric 133bdd1243dSDimitry Andricdef : ReadAdvance<ReadCLMUL, 0>; 134bdd1243dSDimitry Andric} 135bdd1243dSDimitry Andric} 136bdd1243dSDimitry Andric 137bdd1243dSDimitry Andricmulticlass UnsupportedSchedZbs { 138bdd1243dSDimitry Andriclet Unsupported = true in { 139bdd1243dSDimitry Andricdef : WriteRes<WriteSingleBit, []>; 140bdd1243dSDimitry Andricdef : WriteRes<WriteSingleBitImm, []>; 14106c3fb27SDimitry Andricdef : WriteRes<WriteBEXT, []>; 14206c3fb27SDimitry Andricdef : WriteRes<WriteBEXTI, []>; 143bdd1243dSDimitry Andric 144bdd1243dSDimitry Andricdef : ReadAdvance<ReadSingleBit, 0>; 145bdd1243dSDimitry Andricdef : ReadAdvance<ReadSingleBitImm, 0>; 146bdd1243dSDimitry Andric} 147bdd1243dSDimitry Andric} 148bdd1243dSDimitry Andric 149bdd1243dSDimitry Andricmulticlass UnsupportedSchedZbkb { 150bdd1243dSDimitry Andriclet Unsupported = true in { 151bdd1243dSDimitry Andricdef : WriteRes<WriteBREV8, []>; 152bdd1243dSDimitry Andricdef : WriteRes<WritePACK, []>; 153bdd1243dSDimitry Andricdef : WriteRes<WritePACK32, []>; 154bdd1243dSDimitry Andricdef : WriteRes<WriteZIP, []>; 155bdd1243dSDimitry Andric 156bdd1243dSDimitry Andricdef : ReadAdvance<ReadBREV8, 0>; 157bdd1243dSDimitry Andricdef : ReadAdvance<ReadPACK, 0>; 158bdd1243dSDimitry Andricdef : ReadAdvance<ReadPACK32, 0>; 159bdd1243dSDimitry Andricdef : ReadAdvance<ReadZIP, 0>; 160bdd1243dSDimitry Andric} 161bdd1243dSDimitry Andric} 162bdd1243dSDimitry Andric 163bdd1243dSDimitry Andricmulticlass UnsupportedSchedZbkx { 164bdd1243dSDimitry Andriclet Unsupported = true in { 165bdd1243dSDimitry Andricdef : WriteRes<WriteXPERM, []>; 166bdd1243dSDimitry Andric 167bdd1243dSDimitry Andricdef : ReadAdvance<ReadXPERM, 0>; 168bdd1243dSDimitry Andric} 169bdd1243dSDimitry Andric} 170