xref: /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVScheduleZb.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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