Skip to content

Commit 9fa5172

Browse files
authored
[RISCV] Use inheritance to simplify usage of the UnsupportedSched* multiclasses. NFC (#120329)
Split UnsupportedSchedZfhmin from UnsupportedSchedZfh. UnsupportedSchedZfhmin inherits from UnsupportedSchedZfh and should be used when no F16 is supported. UnsupportedSchedZfh can be used direclty for CPUs that support Zfhmin but not Zfh. Make UnsupportedSchedF inherit from both UnsupportedSchedD and UnsupportedSchedZfhmin so that CPUs with no FP only need to include UnsupportedSchedF. This required some minor refactorings to RISCVSchedSyntacoreSCR345.td. I've also switched to inheritance instead of using defm.
1 parent 6fbfbd7 commit 9fa5172

File tree

5 files changed

+88
-80
lines changed

5 files changed

+88
-80
lines changed

llvm/lib/Target/RISCV/RISCVSchedRocket.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ defm : UnsupportedSchedZbs;
259259
defm : UnsupportedSchedZbkb;
260260
defm : UnsupportedSchedZbkx;
261261
defm : UnsupportedSchedZfa;
262-
defm : UnsupportedSchedZfh;
262+
defm : UnsupportedSchedZfhmin;
263263
defm : UnsupportedSchedSFB;
264264
defm : UnsupportedSchedXsfvcp;
265265
defm : UnsupportedSchedZvk;

llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -179,27 +179,27 @@ multiclass SCR_Other {
179179
}
180180

181181
// Unsupported scheduling classes for SCR3-5.
182-
multiclass SCR_Unsupported {
183-
defm : UnsupportedSchedSFB;
184-
defm : UnsupportedSchedV;
185-
defm : UnsupportedSchedXsfvcp;
186-
defm : UnsupportedSchedZabha;
187-
defm : UnsupportedSchedZba;
188-
defm : UnsupportedSchedZbb;
189-
defm : UnsupportedSchedZbc;
190-
defm : UnsupportedSchedZbs;
191-
defm : UnsupportedSchedZbkb;
192-
defm : UnsupportedSchedZbkx;
193-
defm : UnsupportedSchedZfa;
194-
defm : UnsupportedSchedZfh;
195-
defm : UnsupportedSchedZvk;
196-
}
197-
198-
multiclass SCR3_Unsupported {
199-
defm : SCR_Unsupported;
200-
defm : UnsupportedSchedD;
201-
defm : UnsupportedSchedF;
202-
}
182+
multiclass SCR_Unsupported :
183+
UnsupportedSchedSFB,
184+
UnsupportedSchedV,
185+
UnsupportedSchedXsfvcp,
186+
UnsupportedSchedZabha,
187+
UnsupportedSchedZba,
188+
UnsupportedSchedZbb,
189+
UnsupportedSchedZbc,
190+
UnsupportedSchedZbs,
191+
UnsupportedSchedZbkb,
192+
UnsupportedSchedZbkx,
193+
UnsupportedSchedZfa,
194+
UnsupportedSchedZvk;
195+
196+
multiclass SCR3_Unsupported :
197+
SCR_Unsupported,
198+
UnsupportedSchedF;
199+
200+
multiclass SCR4_SCR5_Unsupported :
201+
SCR_Unsupported,
202+
UnsupportedSchedZfhmin;
203203

204204
// Bypasses (none)
205205
multiclass SCR_NoReadAdvances {
@@ -231,8 +231,7 @@ multiclass SCR_NoReadAdvances {
231231
}
232232

233233
// Floating-point bypasses (none)
234-
multiclass SCR4_SCR5_NoReadAdvances {
235-
defm : SCR_NoReadAdvances;
234+
multiclass SCR4_SCR5_NoReadAdvances : SCR_NoReadAdvances {
236235
def : ReadAdvance<ReadFStoreData, 0>;
237236
def : ReadAdvance<ReadFMemBase, 0>;
238237
def : ReadAdvance<ReadFAdd32, 0>;
@@ -353,7 +352,7 @@ let SchedModel = SyntacoreSCR4RV32Model in {
353352
defm : SCR_FDU<SCR4RV32_FDU>;
354353
defm : SCR_Other;
355354

356-
defm : SCR_Unsupported;
355+
defm : SCR4_SCR5_Unsupported;
357356
defm : SCR4_SCR5_NoReadAdvances;
358357
}
359358

@@ -383,7 +382,7 @@ let SchedModel = SyntacoreSCR4RV64Model in {
383382
defm : SCR_FDU<SCR4RV64_FDU>;
384383
defm : SCR_Other;
385384

386-
defm : SCR_Unsupported;
385+
defm : SCR4_SCR5_Unsupported;
387386
defm : SCR4_SCR5_NoReadAdvances;
388387
}
389388

@@ -416,7 +415,7 @@ let SchedModel = SyntacoreSCR5RV32Model in {
416415
defm : SCR_FDU<SCR5RV32_FDU>;
417416
defm : SCR_Other;
418417

419-
defm : SCR_Unsupported;
418+
defm : SCR4_SCR5_Unsupported;
420419
defm : SCR4_SCR5_NoReadAdvances;
421420
}
422421

@@ -446,6 +445,6 @@ let SchedModel = SyntacoreSCR5RV64Model in {
446445
defm : SCR_FDU<SCR5RV64_FDU>;
447446
defm : SCR_Other;
448447

449-
defm : SCR_Unsupported;
448+
defm : SCR4_SCR5_Unsupported;
450449
defm : SCR4_SCR5_NoReadAdvances;
451450
}

llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ multiclass SCR7_Unsupported {
246246
defm : UnsupportedSchedXsfvcp;
247247
defm : UnsupportedSchedZabha;
248248
defm : UnsupportedSchedZfa;
249-
defm : UnsupportedSchedZfh;
249+
defm : UnsupportedSchedZfhmin;
250250
defm : UnsupportedSchedZvk;
251251
}
252252

llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ def : ReadAdvance<ReadXPERM, 0>;
308308
// Unsupported extensions
309309
defm : UnsupportedSchedV;
310310
defm : UnsupportedSchedZfa;
311-
defm : UnsupportedSchedZfh;
311+
defm : UnsupportedSchedZfhmin;
312312
defm : UnsupportedSchedSFB;
313313
defm : UnsupportedSchedZabha;
314314
defm : UnsupportedSchedXsfvcp;

llvm/lib/Target/RISCV/RISCVSchedule.td

Lines changed: 59 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -211,90 +211,57 @@ def ReadFClass16 : SchedRead;
211211
def ReadFClass32 : SchedRead;
212212
def ReadFClass64 : SchedRead;
213213

214+
// For CPUs that support Zfhmin, but not Zfh.
214215
multiclass UnsupportedSchedZfh {
215216
let Unsupported = true in {
216217
def : WriteRes<WriteFAdd16, []>;
217218
def : WriteRes<WriteFClass16, []>;
218-
def : WriteRes<WriteFCvtF16ToF64, []>;
219-
def : WriteRes<WriteFCvtF64ToF16, []>;
220219
def : WriteRes<WriteFCvtI64ToF16, []>;
221-
def : WriteRes<WriteFCvtF32ToF16, []>;
222220
def : WriteRes<WriteFCvtI32ToF16, []>;
223221
def : WriteRes<WriteFCvtF16ToI64, []>;
224-
def : WriteRes<WriteFCvtF16ToF32, []>;
225222
def : WriteRes<WriteFCvtF16ToI32, []>;
226223
def : WriteRes<WriteFDiv16, []>;
227224
def : WriteRes<WriteFCmp16, []>;
228-
def : WriteRes<WriteFLD16, []>;
229225
def : WriteRes<WriteFMA16, []>;
230226
def : WriteRes<WriteFMinMax16, []>;
231227
def : WriteRes<WriteFMul16, []>;
232-
def : WriteRes<WriteFMovI16ToF16, []>;
233-
def : WriteRes<WriteFMovF16ToI16, []>;
234228
def : WriteRes<WriteFSGNJ16, []>;
235-
def : WriteRes<WriteFST16, []>;
236229
def : WriteRes<WriteFSqrt16, []>;
237230

238231
def : ReadAdvance<ReadFAdd16, 0>;
239232
def : ReadAdvance<ReadFClass16, 0>;
240-
def : ReadAdvance<ReadFCvtF16ToF64, 0>;
241-
def : ReadAdvance<ReadFCvtF64ToF16, 0>;
242233
def : ReadAdvance<ReadFCvtI64ToF16, 0>;
243-
def : ReadAdvance<ReadFCvtF32ToF16, 0>;
244234
def : ReadAdvance<ReadFCvtI32ToF16, 0>;
245235
def : ReadAdvance<ReadFCvtF16ToI64, 0>;
246-
def : ReadAdvance<ReadFCvtF16ToF32, 0>;
247236
def : ReadAdvance<ReadFCvtF16ToI32, 0>;
248237
def : ReadAdvance<ReadFDiv16, 0>;
249238
def : ReadAdvance<ReadFCmp16, 0>;
250239
def : ReadAdvance<ReadFMA16, 0>;
251240
def : ReadAdvance<ReadFMinMax16, 0>;
252241
def : ReadAdvance<ReadFMul16, 0>;
253-
def : ReadAdvance<ReadFMovI16ToF16, 0>;
254-
def : ReadAdvance<ReadFMovF16ToI16, 0>;
255242
def : ReadAdvance<ReadFSGNJ16, 0>;
256243
def : ReadAdvance<ReadFSqrt16, 0>;
257244
} // Unsupported = true
258245
}
259246

260-
multiclass UnsupportedSchedF {
247+
// For CPUs that support neither Zfhmin or Zfh.
248+
multiclass UnsupportedSchedZfhmin : UnsupportedSchedZfh {
261249
let Unsupported = true in {
262-
def : WriteRes<WriteFST32, []>;
263-
def : WriteRes<WriteFLD32, []>;
264-
def : WriteRes<WriteFAdd32, []>;
265-
def : WriteRes<WriteFSGNJ32, []>;
266-
def : WriteRes<WriteFMinMax32, []>;
267-
def : WriteRes<WriteFCvtI32ToF32, []>;
268-
def : WriteRes<WriteFCvtI64ToF32, []>;
269-
def : WriteRes<WriteFCvtF32ToI32, []>;
270-
def : WriteRes<WriteFCvtF32ToI64, []>;
271-
def : WriteRes<WriteFClass32, []>;
272-
def : WriteRes<WriteFCmp32, []>;
273-
def : WriteRes<WriteFMovF32ToI32, []>;
274-
def : WriteRes<WriteFMovI32ToF32, []>;
275-
def : WriteRes<WriteFMul32, []>;
276-
def : WriteRes<WriteFMA32, []>;
277-
def : WriteRes<WriteFDiv32, []>;
278-
def : WriteRes<WriteFSqrt32, []>;
250+
def : WriteRes<WriteFCvtF16ToF64, []>;
251+
def : WriteRes<WriteFCvtF64ToF16, []>;
252+
def : WriteRes<WriteFCvtF16ToF32, []>;
253+
def : WriteRes<WriteFCvtF32ToF16, []>;
254+
def : WriteRes<WriteFLD16, []>;
255+
def : WriteRes<WriteFMovI16ToF16, []>;
256+
def : WriteRes<WriteFMovF16ToI16, []>;
257+
def : WriteRes<WriteFST16, []>;
279258

280-
def : ReadAdvance<ReadFAdd32, 0>;
281-
def : ReadAdvance<ReadFMul32, 0>;
282-
def : ReadAdvance<ReadFMA32, 0>;
283-
def : ReadAdvance<ReadFMA32Addend, 0>;
284-
def : ReadAdvance<ReadFDiv32, 0>;
285-
def : ReadAdvance<ReadFSqrt32, 0>;
286-
def : ReadAdvance<ReadFCmp32, 0>;
287-
def : ReadAdvance<ReadFSGNJ32, 0>;
288-
def : ReadAdvance<ReadFMinMax32, 0>;
289-
def : ReadAdvance<ReadFCvtF32ToI32, 0>;
290-
def : ReadAdvance<ReadFCvtF32ToI64, 0>;
291-
def : ReadAdvance<ReadFCvtI32ToF32, 0>;
292-
def : ReadAdvance<ReadFCvtI64ToF32, 0>;
293-
def : ReadAdvance<ReadFMovF32ToI32, 0>;
294-
def : ReadAdvance<ReadFMovI32ToF32, 0>;
295-
def : ReadAdvance<ReadFClass32, 0>;
296-
def : ReadAdvance<ReadFStoreData, 0>;
297-
def : ReadAdvance<ReadFMemBase, 0>;
259+
def : ReadAdvance<ReadFCvtF16ToF64, 0>;
260+
def : ReadAdvance<ReadFCvtF64ToF16, 0>;
261+
def : ReadAdvance<ReadFCvtF16ToF32, 0>;
262+
def : ReadAdvance<ReadFCvtF32ToF16, 0>;
263+
def : ReadAdvance<ReadFMovI16ToF16, 0>;
264+
def : ReadAdvance<ReadFMovF16ToI16, 0>;
298265
} // Unsupported = true
299266
}
300267

@@ -341,6 +308,48 @@ def : ReadAdvance<ReadFClass64, 0>;
341308
} // Unsupported = true
342309
}
343310

311+
// For CPUs with no floating point.
312+
multiclass UnsupportedSchedF : UnsupportedSchedD, UnsupportedSchedZfhmin {
313+
let Unsupported = true in {
314+
def : WriteRes<WriteFST32, []>;
315+
def : WriteRes<WriteFLD32, []>;
316+
def : WriteRes<WriteFAdd32, []>;
317+
def : WriteRes<WriteFSGNJ32, []>;
318+
def : WriteRes<WriteFMinMax32, []>;
319+
def : WriteRes<WriteFCvtI32ToF32, []>;
320+
def : WriteRes<WriteFCvtI64ToF32, []>;
321+
def : WriteRes<WriteFCvtF32ToI32, []>;
322+
def : WriteRes<WriteFCvtF32ToI64, []>;
323+
def : WriteRes<WriteFClass32, []>;
324+
def : WriteRes<WriteFCmp32, []>;
325+
def : WriteRes<WriteFMovF32ToI32, []>;
326+
def : WriteRes<WriteFMovI32ToF32, []>;
327+
def : WriteRes<WriteFMul32, []>;
328+
def : WriteRes<WriteFMA32, []>;
329+
def : WriteRes<WriteFDiv32, []>;
330+
def : WriteRes<WriteFSqrt32, []>;
331+
332+
def : ReadAdvance<ReadFAdd32, 0>;
333+
def : ReadAdvance<ReadFMul32, 0>;
334+
def : ReadAdvance<ReadFMA32, 0>;
335+
def : ReadAdvance<ReadFMA32Addend, 0>;
336+
def : ReadAdvance<ReadFDiv32, 0>;
337+
def : ReadAdvance<ReadFSqrt32, 0>;
338+
def : ReadAdvance<ReadFCmp32, 0>;
339+
def : ReadAdvance<ReadFSGNJ32, 0>;
340+
def : ReadAdvance<ReadFMinMax32, 0>;
341+
def : ReadAdvance<ReadFCvtF32ToI32, 0>;
342+
def : ReadAdvance<ReadFCvtF32ToI64, 0>;
343+
def : ReadAdvance<ReadFCvtI32ToF32, 0>;
344+
def : ReadAdvance<ReadFCvtI64ToF32, 0>;
345+
def : ReadAdvance<ReadFMovF32ToI32, 0>;
346+
def : ReadAdvance<ReadFMovI32ToF32, 0>;
347+
def : ReadAdvance<ReadFClass32, 0>;
348+
def : ReadAdvance<ReadFStoreData, 0>;
349+
def : ReadAdvance<ReadFMemBase, 0>;
350+
} // Unsupported = true
351+
}
352+
344353
multiclass UnsupportedSchedSFB {
345354
let Unsupported = true in {
346355
def : WriteRes<WriteSFB, []>;

0 commit comments

Comments
 (0)