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