Skip to content

Commit cd02b69

Browse files
[RISCV] Add scheduling information for Zba and Zbb to RISCVSchedSiFive7.td
Based on the following description from Andrew W. - Instructions not mentioned here behave the same as integer ALU ops - rev8 only executes in the late-A and late-B ALUs - shNadd[.uw] only execute on the early-B and late-B ALUs - clz[w], ctz[w], and orc.b and all rotates only execute in the late-B ALU - pcnt[w] looks exactly like integer multiply This patch does not account for early/late ALU in the model. It is coded based on the pipes only. Differential Revision: https://reviews.llvm.org/D149497 Co-Authored-By: topperc <[email protected]>
1 parent 55e196e commit cd02b69

File tree

1 file changed

+208
-2
lines changed

1 file changed

+208
-2
lines changed

llvm/lib/Target/RISCV/RISCVSchedSiFive7.td

Lines changed: 208 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,35 @@ def : WriteRes<WriteIDiv32, [SiFive7PipeB, SiFive7IDiv]> {
7676
let ResourceCycles = [1, 15];
7777
}
7878

79+
// Bitmanip
80+
let Latency = 3 in {
81+
// Rotates are in the late-B ALU.
82+
def : WriteRes<WriteRotateImm, [SiFive7PipeB]>;
83+
def : WriteRes<WriteRotateImm32, [SiFive7PipeB]>;
84+
def : WriteRes<WriteRotateReg, [SiFive7PipeB]>;
85+
def : WriteRes<WriteRotateReg32, [SiFive7PipeB]>;
86+
87+
// clz[w]/ctz[w] are in the late-B ALU.
88+
def : WriteRes<WriteCLZ, [SiFive7PipeB]>;
89+
def : WriteRes<WriteCLZ32, [SiFive7PipeB]>;
90+
def : WriteRes<WriteCTZ, [SiFive7PipeB]>;
91+
def : WriteRes<WriteCTZ32, [SiFive7PipeB]>;
92+
93+
// cpop[w] look exactly like multiply.
94+
def : WriteRes<WriteCPOP, [SiFive7PipeB]>;
95+
def : WriteRes<WriteCPOP32, [SiFive7PipeB]>;
96+
97+
// orc.b is in the late-B ALU.
98+
def : WriteRes<WriteORCB, [SiFive7PipeB]>;
99+
100+
// rev8 is in the late-A and late-B ALUs.
101+
def : WriteRes<WriteREV8, [SiFive7PipeAB]>;
102+
103+
// shNadd[.uw] is on the early-B and late-B ALUs.
104+
def : WriteRes<WriteSHXADD, [SiFive7PipeB]>;
105+
def : WriteRes<WriteSHXADD32, [SiFive7PipeB]>;
106+
}
107+
79108
// Memory
80109
def : WriteRes<WriteSTB, [SiFive7PipeA]>;
81110
def : WriteRes<WriteSTH, [SiFive7PipeA]>;
@@ -230,11 +259,188 @@ def : ReadAdvance<ReadFClass64, 0>;
230259

231260
def : ReadAdvance<ReadSFB, 0>;
232261

262+
// 6. Configuration-Setting Instructions
263+
def : ReadAdvance<ReadVSETVLI, 2>;
264+
def : ReadAdvance<ReadVSETVL, 2>;
265+
266+
// 7. Vector Loads and Stores
267+
def : ReadAdvance<ReadVLDX, 0>;
268+
def : ReadAdvance<ReadVSTX, 0>;
269+
defm "" : LMULReadAdvance<"ReadVSTEV", 0>;
270+
defm "" : LMULReadAdvance<"ReadVSTM", 0>;
271+
def : ReadAdvance<ReadVLDSX, 0>;
272+
def : ReadAdvance<ReadVSTSX, 0>;
273+
defm "" : LMULReadAdvance<"ReadVSTS8V", 0>;
274+
defm "" : LMULReadAdvance<"ReadVSTS16V", 0>;
275+
defm "" : LMULReadAdvance<"ReadVSTS32V", 0>;
276+
defm "" : LMULReadAdvance<"ReadVSTS64V", 0>;
277+
defm "" : LMULReadAdvance<"ReadVLDUXV", 0>;
278+
defm "" : LMULReadAdvance<"ReadVLDOXV", 0>;
279+
defm "" : LMULReadAdvance<"ReadVSTUX8", 0>;
280+
defm "" : LMULReadAdvance<"ReadVSTUX16", 0>;
281+
defm "" : LMULReadAdvance<"ReadVSTUX32", 0>;
282+
defm "" : LMULReadAdvance<"ReadVSTUX64", 0>;
283+
defm "" : LMULReadAdvance<"ReadVSTUXV", 0>;
284+
defm "" : LMULReadAdvance<"ReadVSTUX8V", 0>;
285+
defm "" : LMULReadAdvance<"ReadVSTUX16V", 0>;
286+
defm "" : LMULReadAdvance<"ReadVSTUX32V", 0>;
287+
defm "" : LMULReadAdvance<"ReadVSTUX64V", 0>;
288+
defm "" : LMULReadAdvance<"ReadVSTOX8", 0>;
289+
defm "" : LMULReadAdvance<"ReadVSTOX16", 0>;
290+
defm "" : LMULReadAdvance<"ReadVSTOX32", 0>;
291+
defm "" : LMULReadAdvance<"ReadVSTOX64", 0>;
292+
defm "" : LMULReadAdvance<"ReadVSTOXV", 0>;
293+
defm "" : LMULReadAdvance<"ReadVSTOX8V", 0>;
294+
defm "" : LMULReadAdvance<"ReadVSTOX16V", 0>;
295+
defm "" : LMULReadAdvance<"ReadVSTOX32V", 0>;
296+
defm "" : LMULReadAdvance<"ReadVSTOX64V", 0>;
297+
// LMUL Aware
298+
def : ReadAdvance<ReadVST1R, 0>;
299+
def : ReadAdvance<ReadVST2R, 0>;
300+
def : ReadAdvance<ReadVST4R, 0>;
301+
def : ReadAdvance<ReadVST8R, 0>;
302+
303+
// 12. Vector Integer Arithmetic Instructions
304+
defm : LMULReadAdvance<"ReadVIALUV", 0>;
305+
defm : LMULReadAdvance<"ReadVIALUX", 0>;
306+
defm : LMULReadAdvanceW<"ReadVIWALUV", 0>;
307+
defm : LMULReadAdvanceW<"ReadVIWALUX", 0>;
308+
defm : LMULReadAdvance<"ReadVExtV", 0>;
309+
defm : LMULReadAdvance<"ReadVICALUV", 0>;
310+
defm : LMULReadAdvance<"ReadVICALUX", 0>;
311+
defm : LMULReadAdvance<"ReadVShiftV", 0>;
312+
defm : LMULReadAdvance<"ReadVShiftX", 0>;
313+
defm : LMULReadAdvanceW<"ReadVNShiftV", 0>;
314+
defm : LMULReadAdvanceW<"ReadVNShiftX", 0>;
315+
defm : LMULReadAdvance<"ReadVICmpV", 0>;
316+
defm : LMULReadAdvance<"ReadVICmpX", 0>;
317+
defm : LMULReadAdvance<"ReadVIMulV", 0>;
318+
defm : LMULReadAdvance<"ReadVIMulX", 0>;
319+
defm : LMULSEWReadAdvance<"ReadVIDivV", 0>;
320+
defm : LMULSEWReadAdvance<"ReadVIDivX", 0>;
321+
defm : LMULReadAdvanceW<"ReadVIWMulV", 0>;
322+
defm : LMULReadAdvanceW<"ReadVIWMulX", 0>;
323+
defm : LMULReadAdvance<"ReadVIMulAddV", 0>;
324+
defm : LMULReadAdvance<"ReadVIMulAddX", 0>;
325+
defm : LMULReadAdvanceW<"ReadVIWMulAddV", 0>;
326+
defm : LMULReadAdvanceW<"ReadVIWMulAddX", 0>;
327+
defm : LMULReadAdvance<"ReadVIMergeV", 0>;
328+
defm : LMULReadAdvance<"ReadVIMergeX", 0>;
329+
defm : LMULReadAdvance<"ReadVIMovV", 0>;
330+
defm : LMULReadAdvance<"ReadVIMovX", 0>;
331+
332+
// 13. Vector Fixed-Point Arithmetic Instructions
333+
defm "" : LMULReadAdvance<"ReadVSALUV", 0>;
334+
defm "" : LMULReadAdvance<"ReadVSALUX", 0>;
335+
defm "" : LMULReadAdvance<"ReadVAALUV", 0>;
336+
defm "" : LMULReadAdvance<"ReadVAALUX", 0>;
337+
defm "" : LMULReadAdvance<"ReadVSMulV", 0>;
338+
defm "" : LMULReadAdvance<"ReadVSMulX", 0>;
339+
defm "" : LMULReadAdvance<"ReadVSShiftV", 0>;
340+
defm "" : LMULReadAdvance<"ReadVSShiftX", 0>;
341+
defm "" : LMULReadAdvanceW<"ReadVNClipV", 0>;
342+
defm "" : LMULReadAdvanceW<"ReadVNClipX", 0>;
343+
344+
// 14. Vector Floating-Point Instructions
345+
defm "" : LMULReadAdvance<"ReadVFALUV", 0>;
346+
defm "" : LMULReadAdvance<"ReadVFALUF", 0>;
347+
defm "" : LMULReadAdvanceFW<"ReadVFWALUV", 0>;
348+
defm "" : LMULReadAdvanceFW<"ReadVFWALUF", 0>;
349+
defm "" : LMULReadAdvance<"ReadVFMulV", 0>;
350+
defm "" : LMULReadAdvance<"ReadVFMulF", 0>;
351+
defm "" : LMULSEWReadAdvanceF<"ReadVFDivV", 0>;
352+
defm "" : LMULSEWReadAdvanceF<"ReadVFDivF", 0>;
353+
defm "" : LMULReadAdvanceFW<"ReadVFWMulV", 0>;
354+
defm "" : LMULReadAdvanceFW<"ReadVFWMulF", 0>;
355+
defm "" : LMULReadAdvance<"ReadVFMulAddV", 0>;
356+
defm "" : LMULReadAdvance<"ReadVFMulAddF", 0>;
357+
defm "" : LMULReadAdvanceFW<"ReadVFWMulAddV", 0>;
358+
defm "" : LMULReadAdvanceFW<"ReadVFWMulAddF", 0>;
359+
defm "" : LMULSEWReadAdvanceF<"ReadVFSqrtV", 0>;
360+
defm "" : LMULReadAdvance<"ReadVFRecpV", 0>;
361+
defm "" : LMULReadAdvance<"ReadVFCmpV", 0>;
362+
defm "" : LMULReadAdvance<"ReadVFCmpF", 0>;
363+
defm "" : LMULReadAdvance<"ReadVFSgnjV", 0>;
364+
defm "" : LMULReadAdvance<"ReadVFSgnjF", 0>;
365+
defm "" : LMULReadAdvance<"ReadVFClassV", 0>;
366+
defm "" : LMULReadAdvance<"ReadVFMergeV", 0>;
367+
defm "" : LMULReadAdvance<"ReadVFMergeF", 0>;
368+
defm "" : LMULReadAdvance<"ReadVFMovF", 0>;
369+
defm "" : LMULReadAdvance<"ReadVFCvtIToFV", 0>;
370+
defm "" : LMULReadAdvance<"ReadVFCvtFToIV", 0>;
371+
defm "" : LMULReadAdvanceW<"ReadVFWCvtIToFV", 0>;
372+
defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToIV", 0>;
373+
defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToFV", 0>;
374+
defm "" : LMULReadAdvanceFW<"ReadVFNCvtIToFV", 0>;
375+
defm "" : LMULReadAdvanceW<"ReadVFNCvtFToIV", 0>;
376+
defm "" : LMULReadAdvanceFW<"ReadVFNCvtFToFV", 0>;
377+
378+
// 15. Vector Reduction Operations
379+
def : ReadAdvance<ReadVIRedV, 0>;
380+
def : ReadAdvance<ReadVIRedV0, 0>;
381+
def : ReadAdvance<ReadVIWRedV, 0>;
382+
def : ReadAdvance<ReadVIWRedV0, 0>;
383+
def : ReadAdvance<ReadVFRedV, 0>;
384+
def : ReadAdvance<ReadVFRedV0, 0>;
385+
def : ReadAdvance<ReadVFRedOV, 0>;
386+
def : ReadAdvance<ReadVFRedOV0, 0>;
387+
def : ReadAdvance<ReadVFWRedV, 0>;
388+
def : ReadAdvance<ReadVFWRedV0, 0>;
389+
def : ReadAdvance<ReadVFWRedOV, 0>;
390+
def : ReadAdvance<ReadVFWRedOV0, 0>;
391+
392+
// 16. Vector Mask Instructions
393+
defm "" : LMULReadAdvance<"ReadVMALUV", 0>;
394+
defm "" : LMULReadAdvance<"ReadVMPopV", 0>;
395+
defm "" : LMULReadAdvance<"ReadVMFFSV", 0>;
396+
defm "" : LMULReadAdvance<"ReadVMSFSV", 0>;
397+
defm "" : LMULReadAdvance<"ReadVMIotV", 0>;
398+
399+
// 17. Vector Permutation Instructions
400+
defm "" : LMULReadAdvance<"ReadVIMovVX", 0>;
401+
defm "" : LMULReadAdvance<"ReadVIMovXV", 0>;
402+
defm "" : LMULReadAdvance<"ReadVIMovXX", 0>;
403+
defm "" : LMULReadAdvance<"ReadVFMovVF", 0>;
404+
defm "" : LMULReadAdvance<"ReadVFMovFV", 0>;
405+
defm "" : LMULReadAdvance<"ReadVFMovFX", 0>;
406+
defm "" : LMULReadAdvance<"ReadVISlideV", 0>;
407+
defm "" : LMULReadAdvance<"ReadVISlideX", 0>;
408+
defm "" : LMULReadAdvance<"ReadVFSlideV", 0>;
409+
defm "" : LMULReadAdvance<"ReadVFSlideF", 0>;
410+
defm "" : LMULSEWReadAdvance<"ReadVRGatherVV_data", 0>;
411+
defm "" : LMULSEWReadAdvance<"ReadVRGatherVV_index", 0>;
412+
defm "" : LMULReadAdvance<"ReadVRGatherVX_data", 0>;
413+
defm "" : LMULReadAdvance<"ReadVRGatherVX_index", 0>;
414+
defm "" : LMULReadAdvance<"ReadVRGatherVI_data", 0>;
415+
defm "" : LMULSEWReadAdvance<"ReadVCompressV", 0>;
416+
// LMUL Aware
417+
def : ReadAdvance<ReadVMov1V, 0>;
418+
def : ReadAdvance<ReadVMov2V, 0>;
419+
def : ReadAdvance<ReadVMov4V, 0>;
420+
def : ReadAdvance<ReadVMov8V, 0>;
421+
422+
// Others
423+
def : ReadAdvance<ReadVMask, 0>;
424+
425+
// Bitmanip
426+
def : ReadAdvance<ReadRotateImm, 0>;
427+
def : ReadAdvance<ReadRotateImm32, 0>;
428+
def : ReadAdvance<ReadRotateReg, 0>;
429+
def : ReadAdvance<ReadRotateReg32, 0>;
430+
def : ReadAdvance<ReadCLZ, 0>;
431+
def : ReadAdvance<ReadCLZ32, 0>;
432+
def : ReadAdvance<ReadCTZ, 0>;
433+
def : ReadAdvance<ReadCTZ32, 0>;
434+
def : ReadAdvance<ReadCPOP, 0>;
435+
def : ReadAdvance<ReadCPOP32, 0>;
436+
def : ReadAdvance<ReadORCB, 0>;
437+
def : ReadAdvance<ReadREV8, 0>;
438+
def : ReadAdvance<ReadSHXADD, 0>;
439+
def : ReadAdvance<ReadSHXADD32, 0>;
440+
233441
//===----------------------------------------------------------------------===//
234442
// Unsupported extensions
235443
defm : UnsupportedSchedV;
236-
defm : UnsupportedSchedZba;
237-
defm : UnsupportedSchedZbb;
238444
defm : UnsupportedSchedZbc;
239445
defm : UnsupportedSchedZbs;
240446
defm : UnsupportedSchedZbkb;

0 commit comments

Comments
 (0)