Skip to content

Commit b77d6f5

Browse files
[RISCV] Add Scheduling information for Zfh to SiFive7 model
Everything is the same as F extension, except sqrt and div are 13 cycles faster. Differential Revision: https://reviews.llvm.org/D149498
1 parent cd02b69 commit b77d6f5

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

llvm/lib/Target/RISCV/RISCVSchedSiFive7.td

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ def : WriteRes<WriteSTB, [SiFive7PipeA]>;
110110
def : WriteRes<WriteSTH, [SiFive7PipeA]>;
111111
def : WriteRes<WriteSTW, [SiFive7PipeA]>;
112112
def : WriteRes<WriteSTD, [SiFive7PipeA]>;
113+
def : WriteRes<WriteFST16, [SiFive7PipeA]>;
113114
def : WriteRes<WriteFST32, [SiFive7PipeA]>;
114115
def : WriteRes<WriteFST64, [SiFive7PipeA]>;
115116

@@ -121,6 +122,7 @@ def : WriteRes<WriteLDD, [SiFive7PipeA]>;
121122
}
122123

123124
let Latency = 2 in {
125+
def : WriteRes<WriteFLD16, [SiFive7PipeA]>;
124126
def : WriteRes<WriteFLD32, [SiFive7PipeA]>;
125127
def : WriteRes<WriteFLD64, [SiFive7PipeA]>;
126128
}
@@ -136,6 +138,22 @@ def : WriteRes<WriteAtomicLDW, [SiFive7PipeA]>;
136138
def : WriteRes<WriteAtomicLDD, [SiFive7PipeA]>;
137139
}
138140

141+
// Half precision.
142+
let Latency = 5 in {
143+
def : WriteRes<WriteFAdd16, [SiFive7PipeB]>;
144+
def : WriteRes<WriteFMul16, [SiFive7PipeB]>;
145+
def : WriteRes<WriteFMA16, [SiFive7PipeB]>;
146+
}
147+
let Latency = 3 in {
148+
def : WriteRes<WriteFSGNJ16, [SiFive7PipeB]>;
149+
def : WriteRes<WriteFMinMax16, [SiFive7PipeB]>;
150+
}
151+
152+
let Latency = 14, ResourceCycles = [1, 13] in {
153+
def : WriteRes<WriteFDiv16, [SiFive7PipeB, SiFive7FDiv]>;
154+
def : WriteRes<WriteFSqrt16, [SiFive7PipeB, SiFive7FDiv]>;
155+
}
156+
139157
// Single precision.
140158
let Latency = 5 in {
141159
def : WriteRes<WriteFAdd32, [SiFive7PipeB]>;
@@ -170,21 +188,33 @@ def : WriteRes<WriteFSqrt64, [SiFive7PipeB, SiFive7FDiv]> { let Latency = 56;
170188

171189
// Conversions
172190
let Latency = 3 in {
191+
def : WriteRes<WriteFCvtI32ToF16, [SiFive7PipeB]>;
173192
def : WriteRes<WriteFCvtI32ToF32, [SiFive7PipeB]>;
174193
def : WriteRes<WriteFCvtI32ToF64, [SiFive7PipeB]>;
194+
def : WriteRes<WriteFCvtI64ToF16, [SiFive7PipeB]>;
175195
def : WriteRes<WriteFCvtI64ToF32, [SiFive7PipeB]>;
176196
def : WriteRes<WriteFCvtI64ToF64, [SiFive7PipeB]>;
197+
def : WriteRes<WriteFCvtF16ToI32, [SiFive7PipeB]>;
198+
def : WriteRes<WriteFCvtF16ToI64, [SiFive7PipeB]>;
199+
def : WriteRes<WriteFCvtF16ToF32, [SiFive7PipeB]>;
200+
def : WriteRes<WriteFCvtF16ToF64, [SiFive7PipeB]>;
177201
def : WriteRes<WriteFCvtF32ToI32, [SiFive7PipeB]>;
178202
def : WriteRes<WriteFCvtF32ToI64, [SiFive7PipeB]>;
203+
def : WriteRes<WriteFCvtF32ToF16, [SiFive7PipeB]>;
179204
def : WriteRes<WriteFCvtF32ToF64, [SiFive7PipeB]>;
180205
def : WriteRes<WriteFCvtF64ToI32, [SiFive7PipeB]>;
181206
def : WriteRes<WriteFCvtF64ToI64, [SiFive7PipeB]>;
207+
def : WriteRes<WriteFCvtF64ToF16, [SiFive7PipeB]>;
182208
def : WriteRes<WriteFCvtF64ToF32, [SiFive7PipeB]>;
183209

210+
def : WriteRes<WriteFClass16, [SiFive7PipeB]>;
184211
def : WriteRes<WriteFClass32, [SiFive7PipeB]>;
185212
def : WriteRes<WriteFClass64, [SiFive7PipeB]>;
213+
def : WriteRes<WriteFCmp16, [SiFive7PipeB]>;
186214
def : WriteRes<WriteFCmp32, [SiFive7PipeB]>;
187215
def : WriteRes<WriteFCmp64, [SiFive7PipeB]>;
216+
def : WriteRes<WriteFMovI16ToF16, [SiFive7PipeB]>;
217+
def : WriteRes<WriteFMovF16ToI16, [SiFive7PipeB]>;
188218
def : WriteRes<WriteFMovI32ToF32, [SiFive7PipeB]>;
189219
def : WriteRes<WriteFMovF32ToI32, [SiFive7PipeB]>;
190220
def : WriteRes<WriteFMovI64ToF64, [SiFive7PipeB]>;
@@ -224,36 +254,55 @@ def : ReadAdvance<ReadAtomicSTW, 0>;
224254
def : ReadAdvance<ReadAtomicSTD, 0>;
225255
def : ReadAdvance<ReadFStoreData, 0>;
226256
def : ReadAdvance<ReadFMemBase, 0>;
257+
def : ReadAdvance<ReadFAdd16, 0>;
227258
def : ReadAdvance<ReadFAdd32, 0>;
228259
def : ReadAdvance<ReadFAdd64, 0>;
260+
def : ReadAdvance<ReadFMul16, 0>;
261+
def : ReadAdvance<ReadFMA16, 0>;
229262
def : ReadAdvance<ReadFMul32, 0>;
230263
def : ReadAdvance<ReadFMul64, 0>;
231264
def : ReadAdvance<ReadFMA32, 0>;
232265
def : ReadAdvance<ReadFMA64, 0>;
266+
def : ReadAdvance<ReadFDiv16, 0>;
233267
def : ReadAdvance<ReadFDiv32, 0>;
234268
def : ReadAdvance<ReadFDiv64, 0>;
269+
def : ReadAdvance<ReadFSqrt16, 0>;
235270
def : ReadAdvance<ReadFSqrt32, 0>;
236271
def : ReadAdvance<ReadFSqrt64, 0>;
272+
def : ReadAdvance<ReadFCmp16, 0>;
237273
def : ReadAdvance<ReadFCmp32, 0>;
238274
def : ReadAdvance<ReadFCmp64, 0>;
275+
def : ReadAdvance<ReadFSGNJ16, 0>;
239276
def : ReadAdvance<ReadFSGNJ32, 0>;
240277
def : ReadAdvance<ReadFSGNJ64, 0>;
278+
def : ReadAdvance<ReadFMinMax16, 0>;
241279
def : ReadAdvance<ReadFMinMax32, 0>;
242280
def : ReadAdvance<ReadFMinMax64, 0>;
281+
def : ReadAdvance<ReadFCvtF16ToI32, 0>;
282+
def : ReadAdvance<ReadFCvtF16ToI64, 0>;
243283
def : ReadAdvance<ReadFCvtF32ToI32, 0>;
244284
def : ReadAdvance<ReadFCvtF32ToI64, 0>;
245285
def : ReadAdvance<ReadFCvtF64ToI32, 0>;
246286
def : ReadAdvance<ReadFCvtF64ToI64, 0>;
287+
def : ReadAdvance<ReadFCvtI32ToF16, 0>;
247288
def : ReadAdvance<ReadFCvtI32ToF32, 0>;
248289
def : ReadAdvance<ReadFCvtI32ToF64, 0>;
290+
def : ReadAdvance<ReadFCvtI64ToF16, 0>;
249291
def : ReadAdvance<ReadFCvtI64ToF32, 0>;
250292
def : ReadAdvance<ReadFCvtI64ToF64, 0>;
251293
def : ReadAdvance<ReadFCvtF32ToF64, 0>;
252294
def : ReadAdvance<ReadFCvtF64ToF32, 0>;
295+
def : ReadAdvance<ReadFCvtF16ToF32, 0>;
296+
def : ReadAdvance<ReadFCvtF32ToF16, 0>;
297+
def : ReadAdvance<ReadFCvtF16ToF64, 0>;
298+
def : ReadAdvance<ReadFCvtF64ToF16, 0>;
299+
def : ReadAdvance<ReadFMovF16ToI16, 0>;
300+
def : ReadAdvance<ReadFMovI16ToF16, 0>;
253301
def : ReadAdvance<ReadFMovF32ToI32, 0>;
254302
def : ReadAdvance<ReadFMovI32ToF32, 0>;
255303
def : ReadAdvance<ReadFMovF64ToI64, 0>;
256304
def : ReadAdvance<ReadFMovI64ToF64, 0>;
305+
def : ReadAdvance<ReadFClass16, 0>;
257306
def : ReadAdvance<ReadFClass32, 0>;
258307
def : ReadAdvance<ReadFClass64, 0>;
259308

@@ -446,5 +495,4 @@ defm : UnsupportedSchedZbs;
446495
defm : UnsupportedSchedZbkb;
447496
defm : UnsupportedSchedZbkx;
448497
defm : UnsupportedSchedZfa;
449-
defm : UnsupportedSchedZfh;
450498
}

0 commit comments

Comments
 (0)