Skip to content

Commit a3f901f

Browse files
[RISCV] Update floating point load latency in SiFive7 scheduling model (#159462)
The latency of floating point loads in SiFive7 should be the same as their integer counterparts. Co-authored-by: Michael Maitland <[email protected]>
1 parent 3fe85ca commit a3f901f

File tree

2 files changed

+90
-10
lines changed

2 files changed

+90
-10
lines changed

llvm/lib/Target/RISCV/RISCVSchedSiFive7.td

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,16 +362,14 @@ multiclass SiFive7WriteResBase<int VLEN,
362362
def : WriteRes<WriteFST64, [PipeA]>;
363363

364364
let Latency = 3 in {
365-
def : WriteRes<WriteLDB, [PipeA]>;
366-
def : WriteRes<WriteLDH, [PipeA]>;
367-
def : WriteRes<WriteLDW, [PipeA]>;
368-
def : WriteRes<WriteLDD, [PipeA]>;
369-
}
370-
371-
let Latency = 2 in {
372-
def : WriteRes<WriteFLD16, [PipeA]>;
373-
def : WriteRes<WriteFLD32, [PipeA]>;
374-
def : WriteRes<WriteFLD64, [PipeA]>;
365+
def : WriteRes<WriteLDB, [PipeA]>;
366+
def : WriteRes<WriteLDH, [PipeA]>;
367+
def : WriteRes<WriteLDW, [PipeA]>;
368+
def : WriteRes<WriteLDD, [PipeA]>;
369+
370+
def : WriteRes<WriteFLD16, [PipeA]>;
371+
def : WriteRes<WriteFLD32, [PipeA]>;
372+
def : WriteRes<WriteFLD64, [PipeA]>;
375373
}
376374

377375
// Atomic memory
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-x280 -instruction-tables=full -iterations=1 < %s \
3+
# RUN: | FileCheck %s
4+
5+
lh t0, 0(sp)
6+
flh fa0, 0(sp)
7+
lw t2, 0(sp)
8+
flw fa2, 0(sp)
9+
ld t4, 0(sp)
10+
fld fa4, 0(sp)
11+
12+
sh t1, 0(sp)
13+
fsh fa1, 0(sp)
14+
sw t3, 0(sp)
15+
fsw fa3, 0(sp)
16+
sd t5, 0(sp)
17+
fsd fa5, 0(sp)
18+
19+
# CHECK: Resources:
20+
# CHECK-NEXT: [0] - VLEN512SiFive7FDiv:1
21+
# CHECK-NEXT: [1] - VLEN512SiFive7IDiv:1
22+
# CHECK-NEXT: [2] - VLEN512SiFive7PipeA:1
23+
# CHECK-NEXT: [3] - VLEN512SiFive7PipeAB:2 VLEN512SiFive7PipeA, VLEN512SiFive7PipeB
24+
# CHECK-NEXT: [4] - VLEN512SiFive7PipeB:1
25+
# CHECK-NEXT: [5] - VLEN512SiFive7VA:1
26+
# CHECK-NEXT: [6] - VLEN512SiFive7VCQ:1
27+
# CHECK-NEXT: [7] - VLEN512SiFive7VL:1
28+
# CHECK-NEXT: [8] - VLEN512SiFive7VS:1
29+
30+
# CHECK: Instruction Info:
31+
# CHECK-NEXT: [1]: #uOps
32+
# CHECK-NEXT: [2]: Latency
33+
# CHECK-NEXT: [3]: RThroughput
34+
# CHECK-NEXT: [4]: MayLoad
35+
# CHECK-NEXT: [5]: MayStore
36+
# CHECK-NEXT: [6]: HasSideEffects (U)
37+
# CHECK-NEXT: [7]: Bypass Latency
38+
# CHECK-NEXT: [8]: Resources (<Name> | <Name>[<ReleaseAtCycle>] | <Name>[<AcquireAtCycle>,<ReleaseAtCycle])
39+
# CHECK-NEXT: [9]: LLVM Opcode Name
40+
41+
# CHECK: [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
42+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB LH lh t0, 0(sp)
43+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB FLH flh fa0, 0(sp)
44+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_LWSP lw t2, 0(sp)
45+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB FLW flw fa2, 0(sp)
46+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_LDSP ld t4, 0(sp)
47+
# CHECK-NEXT: 1 3 1.00 * 3 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_FLDSP fld fa4, 0(sp)
48+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB SH sh t1, 0(sp)
49+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB FSH fsh fa1, 0(sp)
50+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_SWSP sw t3, 0(sp)
51+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB FSW fsw fa3, 0(sp)
52+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_SDSP sd t5, 0(sp)
53+
# CHECK-NEXT: 1 1 1.00 * 1 VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB C_FSDSP fsd fa5, 0(sp)
54+
55+
# CHECK: Resources:
56+
# CHECK-NEXT: [0] - VLEN512SiFive7FDiv
57+
# CHECK-NEXT: [1] - VLEN512SiFive7IDiv
58+
# CHECK-NEXT: [2] - VLEN512SiFive7PipeA
59+
# CHECK-NEXT: [3] - VLEN512SiFive7PipeB
60+
# CHECK-NEXT: [4] - VLEN512SiFive7VA
61+
# CHECK-NEXT: [5] - VLEN512SiFive7VCQ
62+
# CHECK-NEXT: [6] - VLEN512SiFive7VL
63+
# CHECK-NEXT: [7] - VLEN512SiFive7VS
64+
65+
# CHECK: Resource pressure per iteration:
66+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7]
67+
# CHECK-NEXT: - - 12.00 - - - - -
68+
69+
# CHECK: Resource pressure by instruction:
70+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions:
71+
# CHECK-NEXT: - - 1.00 - - - - - lh t0, 0(sp)
72+
# CHECK-NEXT: - - 1.00 - - - - - flh fa0, 0(sp)
73+
# CHECK-NEXT: - - 1.00 - - - - - lw t2, 0(sp)
74+
# CHECK-NEXT: - - 1.00 - - - - - flw fa2, 0(sp)
75+
# CHECK-NEXT: - - 1.00 - - - - - ld t4, 0(sp)
76+
# CHECK-NEXT: - - 1.00 - - - - - fld fa4, 0(sp)
77+
# CHECK-NEXT: - - 1.00 - - - - - sh t1, 0(sp)
78+
# CHECK-NEXT: - - 1.00 - - - - - fsh fa1, 0(sp)
79+
# CHECK-NEXT: - - 1.00 - - - - - sw t3, 0(sp)
80+
# CHECK-NEXT: - - 1.00 - - - - - fsw fa3, 0(sp)
81+
# CHECK-NEXT: - - 1.00 - - - - - sd t5, 0(sp)
82+
# CHECK-NEXT: - - 1.00 - - - - - fsd fa5, 0(sp)

0 commit comments

Comments
 (0)