Skip to content

Commit 3a910da

Browse files
committed
[RISCV] Support Zfa in SiFive P600's scheduling model
1 parent 7ac78f1 commit 3a910da

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ def : WriteRes<WriteFCvtF64ToI32, [SiFiveP600F2I]>;
283283
def : WriteRes<WriteFCvtF64ToI64, [SiFiveP600F2I]>;
284284
def : WriteRes<WriteFCvtF64ToF16, [SiFiveP600FloatArith]>;
285285
def : WriteRes<WriteFCvtF64ToF32, [SiFiveP600FloatArith]>;
286+
def : WriteRes<WriteFRoundF16, [SiFiveP600FloatArith]>;
287+
def : WriteRes<WriteFRoundF32, [SiFiveP600FloatArith]>;
288+
def : WriteRes<WriteFRoundF64, [SiFiveP600FloatArith]>;
286289

287290
def : WriteRes<WriteFClass16, [SiFiveP600F2I]>;
288291
def : WriteRes<WriteFClass32, [SiFiveP600F2I]>;
@@ -296,6 +299,9 @@ def : WriteRes<WriteFMovI32ToF32, [SiFiveP600MulI2F]>;
296299
def : WriteRes<WriteFMovF32ToI32, [SiFiveP600F2I]>;
297300
def : WriteRes<WriteFMovI64ToF64, [SiFiveP600MulI2F]>;
298301
def : WriteRes<WriteFMovF64ToI64, [SiFiveP600F2I]>;
302+
def : WriteRes<WriteFLI16, [SiFiveP600MulI2F]>;
303+
def : WriteRes<WriteFLI32, [SiFiveP600MulI2F]>;
304+
def : WriteRes<WriteFLI64, [SiFiveP600MulI2F]>;
299305
}
300306

301307
// 6. Configuration-Setting Instructions
@@ -893,6 +899,9 @@ def : ReadAdvance<ReadFCvtF16ToF32, 0>;
893899
def : ReadAdvance<ReadFCvtF32ToF16, 0>;
894900
def : ReadAdvance<ReadFCvtF16ToF64, 0>;
895901
def : ReadAdvance<ReadFCvtF64ToF16, 0>;
902+
def : ReadAdvance<ReadFRoundF16, 0>;
903+
def : ReadAdvance<ReadFRoundF32, 0>;
904+
def : ReadAdvance<ReadFRoundF64, 0>;
896905
def : ReadAdvance<ReadFMovF16ToI16, 0>;
897906
def : ReadAdvance<ReadFMovI16ToF16, 0>;
898907
def : ReadAdvance<ReadFMovF32ToI32, 0>;
@@ -1140,6 +1149,5 @@ defm : UnsupportedSchedZbc;
11401149
defm : UnsupportedSchedZbkb;
11411150
defm : UnsupportedSchedZbkx;
11421151
defm : UnsupportedSchedSFB;
1143-
defm : UnsupportedSchedZfa;
11441152
defm : UnsupportedSchedXsfvcp;
11451153
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-p670 -mattr=+zfa,+zfh -iterations=1 < %s | FileCheck %s
3+
4+
fli.h fa5, nan
5+
fli.s fa5, nan
6+
fli.d fa5, nan
7+
8+
fround.h fa0, fa0, rdn
9+
froundnx.h fa0, fa0, rdn
10+
fround.s fa0, fa0, rdn
11+
froundnx.s fa0, fa0, rdn
12+
fround.d fa0, fa0, rdn
13+
froundnx.d fa0, fa0, rdn
14+
15+
# CHECK: Iterations: 1
16+
# CHECK-NEXT: Instructions: 9
17+
# CHECK-NEXT: Total Cycles: 15
18+
# CHECK-NEXT: Total uOps: 9
19+
20+
# CHECK: Dispatch Width: 4
21+
# CHECK-NEXT: uOps Per Cycle: 0.60
22+
# CHECK-NEXT: IPC: 0.60
23+
# CHECK-NEXT: Block RThroughput: 3.0
24+
25+
# CHECK: Instruction Info:
26+
# CHECK-NEXT: [1]: #uOps
27+
# CHECK-NEXT: [2]: Latency
28+
# CHECK-NEXT: [3]: RThroughput
29+
# CHECK-NEXT: [4]: MayLoad
30+
# CHECK-NEXT: [5]: MayStore
31+
# CHECK-NEXT: [6]: HasSideEffects (U)
32+
33+
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
34+
# CHECK-NEXT: 1 2 1.00 fli.h fa5, nan
35+
# CHECK-NEXT: 1 2 1.00 fli.s fa5, nan
36+
# CHECK-NEXT: 1 2 1.00 fli.d fa5, nan
37+
# CHECK-NEXT: 1 2 0.50 fround.h fa0, fa0, rdn
38+
# CHECK-NEXT: 1 2 0.50 froundnx.h fa0, fa0, rdn
39+
# CHECK-NEXT: 1 2 0.50 fround.s fa0, fa0, rdn
40+
# CHECK-NEXT: 1 2 0.50 froundnx.s fa0, fa0, rdn
41+
# CHECK-NEXT: 1 2 0.50 fround.d fa0, fa0, rdn
42+
# CHECK-NEXT: 1 2 0.50 froundnx.d fa0, fa0, rdn
43+
44+
# CHECK: Resources:
45+
# CHECK-NEXT: [0] - SiFiveP600Div
46+
# CHECK-NEXT: [1] - SiFiveP600FEXQ0
47+
# CHECK-NEXT: [2] - SiFiveP600FEXQ1
48+
# CHECK-NEXT: [3] - SiFiveP600FloatDiv
49+
# CHECK-NEXT: [4] - SiFiveP600IEXQ0
50+
# CHECK-NEXT: [5] - SiFiveP600IEXQ1
51+
# CHECK-NEXT: [6] - SiFiveP600IEXQ2
52+
# CHECK-NEXT: [7] - SiFiveP600IEXQ3
53+
# CHECK-NEXT: [8.0] - SiFiveP600LDST
54+
# CHECK-NEXT: [8.1] - SiFiveP600LDST
55+
# CHECK-NEXT: [9] - SiFiveP600VDiv
56+
# CHECK-NEXT: [10] - SiFiveP600VEXQ0
57+
# CHECK-NEXT: [11] - SiFiveP600VEXQ1
58+
# CHECK-NEXT: [12] - SiFiveP600VFloatDiv
59+
# CHECK-NEXT: [13] - SiFiveP600VLD
60+
# CHECK-NEXT: [14] - SiFiveP600VST
61+
62+
# CHECK: Resource pressure per iteration:
63+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8.0] [8.1] [9] [10] [11] [12] [13] [14]
64+
# CHECK-NEXT: - 3.00 3.00 - - 3.00 - - - - - - - - - -
65+
66+
# CHECK: Resource pressure by instruction:
67+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8.0] [8.1] [9] [10] [11] [12] [13] [14] Instructions:
68+
# CHECK-NEXT: - - - - - 1.00 - - - - - - - - - - fli.h fa5, nan
69+
# CHECK-NEXT: - - - - - 1.00 - - - - - - - - - - fli.s fa5, nan
70+
# CHECK-NEXT: - - - - - 1.00 - - - - - - - - - - fli.d fa5, nan
71+
# CHECK-NEXT: - - 1.00 - - - - - - - - - - - - - fround.h fa0, fa0, rdn
72+
# CHECK-NEXT: - 1.00 - - - - - - - - - - - - - - froundnx.h fa0, fa0, rdn
73+
# CHECK-NEXT: - - 1.00 - - - - - - - - - - - - - fround.s fa0, fa0, rdn
74+
# CHECK-NEXT: - 1.00 - - - - - - - - - - - - - - froundnx.s fa0, fa0, rdn
75+
# CHECK-NEXT: - - 1.00 - - - - - - - - - - - - - fround.d fa0, fa0, rdn
76+
# CHECK-NEXT: - 1.00 - - - - - - - - - - - - - - froundnx.d fa0, fa0, rdn

0 commit comments

Comments
 (0)