Skip to content

Commit e91f684

Browse files
[RISCV] Update SpacemiT-X60 vector fixed-point arithmetic latencies (#150517)
This PR adds hardware-measured latencies for all instructions defined in Section 12 of the RVV specification: "Vector Fixed-Point Arithmetic Instructions" to the SpacemiT-X60 scheduling model.
1 parent 1bc49c0 commit e91f684

File tree

5 files changed

+947
-930
lines changed

5 files changed

+947
-930
lines changed

llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -524,16 +524,33 @@ foreach mx = SchedMxListW in {
524524
foreach mx = SchedMxList in {
525525
defvar IsWorstCase = SMX60IsWorstCaseMX<mx, SchedMxList>.c;
526526

527-
defm "" : LMULWriteResMX<"WriteVSALUV", [SMX60_VIEU], mx, IsWorstCase>;
528-
defm "" : LMULWriteResMX<"WriteVSALUX", [SMX60_VIEU], mx, IsWorstCase>;
529-
defm "" : LMULWriteResMX<"WriteVSALUI", [SMX60_VIEU], mx, IsWorstCase>;
530-
defm "" : LMULWriteResMX<"WriteVAALUV", [SMX60_VIEU], mx, IsWorstCase>;
531-
defm "" : LMULWriteResMX<"WriteVAALUX", [SMX60_VIEU], mx, IsWorstCase>;
532-
defm "" : LMULWriteResMX<"WriteVSMulV", [SMX60_VIEU], mx, IsWorstCase>;
533-
defm "" : LMULWriteResMX<"WriteVSMulX", [SMX60_VIEU], mx, IsWorstCase>;
534-
defm "" : LMULWriteResMX<"WriteVSShiftV", [SMX60_VIEU], mx, IsWorstCase>;
535-
defm "" : LMULWriteResMX<"WriteVSShiftX", [SMX60_VIEU], mx, IsWorstCase>;
536-
defm "" : LMULWriteResMX<"WriteVSShiftI", [SMX60_VIEU], mx, IsWorstCase>;
527+
let Latency = Get4458Latency<mx>.c, ReleaseAtCycles = [ConstOneUntilM1ThenDouble<mx>.c] in {
528+
defm "" : LMULWriteResMX<"WriteVSALUV", [SMX60_VIEU], mx, IsWorstCase>;
529+
defm "" : LMULWriteResMX<"WriteVSALUX", [SMX60_VIEU], mx, IsWorstCase>;
530+
defm "" : LMULWriteResMX<"WriteVSALUI", [SMX60_VIEU], mx, IsWorstCase>;
531+
defm "" : LMULWriteResMX<"WriteVAALUV", [SMX60_VIEU], mx, IsWorstCase>;
532+
defm "" : LMULWriteResMX<"WriteVAALUX", [SMX60_VIEU], mx, IsWorstCase>;
533+
}
534+
535+
// Latency of vsmul: e8/e16 = 4/4/5/8, e32 = 5/5/5/8, e64 = 7/8/16/32
536+
// We use the worst-case until we can split the SEW.
537+
defvar VSMulLat = ConstValueUntilLMULThenDoubleBase<"M2", 7, 8, mx>.c;
538+
// Latency of vsmul: e8/e16/e32 = 1/2/4/8, e64 = 4/8/16/32
539+
// We use the worst-case until we can split the SEW.
540+
defvar VSMulOcc = ConstValueUntilLMULThenDoubleBase<"M1", 1, 4, mx>.c;
541+
// TODO: change WriteVSMulV/X to be defined with LMULSEWSchedWrites
542+
let Latency = VSMulLat, ReleaseAtCycles = [VSMulOcc] in {
543+
defm "" : LMULWriteResMX<"WriteVSMulV", [SMX60_VIEU], mx, IsWorstCase>;
544+
defm "" : LMULWriteResMX<"WriteVSMulX", [SMX60_VIEU], mx, IsWorstCase>;
545+
}
546+
547+
defvar VSShiftLat = ConstValueUntilLMULThenDouble<"M2", 4, mx>.c;
548+
defvar VSShiftOcc = ConstOneUntilMF2ThenDouble<mx>.c;
549+
let Latency = VSShiftLat, ReleaseAtCycles = [VSShiftOcc] in {
550+
defm "" : LMULWriteResMX<"WriteVSShiftV", [SMX60_VIEU], mx, IsWorstCase>;
551+
defm "" : LMULWriteResMX<"WriteVSShiftX", [SMX60_VIEU], mx, IsWorstCase>;
552+
defm "" : LMULWriteResMX<"WriteVSShiftI", [SMX60_VIEU], mx, IsWorstCase>;
553+
}
537554
}
538555

539556
// 13. Vector Floating-Point Instructions

llvm/test/CodeGen/RISCV/rvv/vxrm-insert-out-of-loop.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,8 @@ define void @test1(ptr nocapture noundef writeonly %dst, i32 noundef signext %i_
366366
; RV64X60-NEXT: # => This Inner Loop Header: Depth=2
367367
; RV64X60-NEXT: vl2r.v v8, (s2)
368368
; RV64X60-NEXT: vl2r.v v10, (s3)
369-
; RV64X60-NEXT: sub s1, s1, t3
370369
; RV64X60-NEXT: vaaddu.vv v8, v8, v10
370+
; RV64X60-NEXT: sub s1, s1, t3
371371
; RV64X60-NEXT: vs2r.v v8, (s4)
372372
; RV64X60-NEXT: add s4, s4, t3
373373
; RV64X60-NEXT: add s3, s3, t3

0 commit comments

Comments
 (0)