Skip to content

Commit 84e95be

Browse files
authored
[RISCV] Update SiFive P600's scheduling model on RVV instructions (#115243)
The biggest change is assigning vector crypto instructions to the correct processor resource. The majority of these changes are guided by our RVV-capable llvm-exegesis.
1 parent 7b5e285 commit 84e95be

File tree

9 files changed

+1735
-446
lines changed

9 files changed

+1735
-446
lines changed

llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td

Lines changed: 461 additions & 117 deletions
Large diffs are not rendered by default.
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2+
# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-p670 -iterations=100 < %s | FileCheck %s
3+
4+
vsetvli zero, zero, e32, m1, ta, ma
5+
6+
vmslt.vv v0, v4, v20
7+
vmsle.vv v8, v4, v20
8+
vmsgt.vv v8, v20, v4
9+
vmsge.vv v8, v20, v4
10+
vmseq.vv v8, v4, v20
11+
vmsne.vv v8, v4, v20
12+
vmsltu.vv v8, v4, v20
13+
vmsleu.vv v8, v4, v20
14+
vmsgtu.vv v8, v20, v4
15+
vmsgeu.vv v8, v20, v4
16+
17+
vmflt.vv v0, v4, v20
18+
vmfle.vv v8, v4, v20
19+
vmfgt.vv v8, v20, v4
20+
vmfge.vv v8, v20, v4
21+
vmfeq.vv v8, v4, v20
22+
vmfne.vv v8, v4, v20
23+
24+
vmadc.vv v8, v4, v20
25+
vmsbc.vv v8, v4, v20
26+
27+
vfirst.m a2, v4
28+
vpopc.m a2, v4
29+
30+
viota.m v8, v4
31+
32+
vmsbf.m v8, v4
33+
vmsif.m v8, v4
34+
vmsof.m v8, v4
35+
36+
# CHECK: Iterations: 100
37+
# CHECK-NEXT: Instructions: 2500
38+
# CHECK-NEXT: Total Cycles: 2605
39+
# CHECK-NEXT: Total uOps: 2500
40+
41+
# CHECK: Dispatch Width: 4
42+
# CHECK-NEXT: uOps Per Cycle: 0.96
43+
# CHECK-NEXT: IPC: 0.96
44+
# CHECK-NEXT: Block RThroughput: 26.0
45+
46+
# CHECK: Instruction Info:
47+
# CHECK-NEXT: [1]: #uOps
48+
# CHECK-NEXT: [2]: Latency
49+
# CHECK-NEXT: [3]: RThroughput
50+
# CHECK-NEXT: [4]: MayLoad
51+
# CHECK-NEXT: [5]: MayStore
52+
# CHECK-NEXT: [6]: HasSideEffects (U)
53+
54+
# CHECK: [1] [2] [3] [4] [5] [6] Instructions:
55+
# CHECK-NEXT: 1 1 1.00 U vsetvli zero, zero, e32, m1, ta, ma
56+
# CHECK-NEXT: 1 2 1.00 vmslt.vv v0, v4, v20
57+
# CHECK-NEXT: 1 2 1.00 vmsle.vv v8, v4, v20
58+
# CHECK-NEXT: 1 2 1.00 vmslt.vv v8, v4, v20
59+
# CHECK-NEXT: 1 2 1.00 vmsle.vv v8, v4, v20
60+
# CHECK-NEXT: 1 2 1.00 vmseq.vv v8, v4, v20
61+
# CHECK-NEXT: 1 2 1.00 vmsne.vv v8, v4, v20
62+
# CHECK-NEXT: 1 2 1.00 vmsltu.vv v8, v4, v20
63+
# CHECK-NEXT: 1 2 1.00 vmsleu.vv v8, v4, v20
64+
# CHECK-NEXT: 1 2 1.00 vmsltu.vv v8, v4, v20
65+
# CHECK-NEXT: 1 2 1.00 vmsleu.vv v8, v4, v20
66+
# CHECK-NEXT: 1 2 1.00 vmflt.vv v0, v4, v20
67+
# CHECK-NEXT: 1 2 1.00 vmfle.vv v8, v4, v20
68+
# CHECK-NEXT: 1 2 1.00 vmflt.vv v8, v4, v20
69+
# CHECK-NEXT: 1 2 1.00 vmfle.vv v8, v4, v20
70+
# CHECK-NEXT: 1 2 1.00 vmfeq.vv v8, v4, v20
71+
# CHECK-NEXT: 1 2 1.00 vmfne.vv v8, v4, v20
72+
# CHECK-NEXT: 1 2 1.00 vmadc.vv v8, v4, v20
73+
# CHECK-NEXT: 1 2 1.00 vmsbc.vv v8, v4, v20
74+
# CHECK-NEXT: 1 2 2.00 vfirst.m a2, v4
75+
# CHECK-NEXT: 1 2 2.00 vcpop.m a2, v4
76+
# CHECK-NEXT: 1 2 1.00 viota.m v8, v4
77+
# CHECK-NEXT: 1 2 1.00 vmsbf.m v8, v4
78+
# CHECK-NEXT: 1 2 1.00 vmsif.m v8, v4
79+
# CHECK-NEXT: 1 2 1.00 vmsof.m v8, v4
80+
81+
# CHECK: Resources:
82+
# CHECK-NEXT: [0] - SiFiveP600Div
83+
# CHECK-NEXT: [1] - SiFiveP600FEXQ0
84+
# CHECK-NEXT: [2] - SiFiveP600FEXQ1
85+
# CHECK-NEXT: [3] - SiFiveP600FloatDiv
86+
# CHECK-NEXT: [4] - SiFiveP600IEXQ0
87+
# CHECK-NEXT: [5] - SiFiveP600IEXQ1
88+
# CHECK-NEXT: [6] - SiFiveP600IEXQ2
89+
# CHECK-NEXT: [7] - SiFiveP600IEXQ3
90+
# CHECK-NEXT: [8.0] - SiFiveP600LDST
91+
# CHECK-NEXT: [8.1] - SiFiveP600LDST
92+
# CHECK-NEXT: [9] - SiFiveP600VDiv
93+
# CHECK-NEXT: [10] - SiFiveP600VEXQ0
94+
# CHECK-NEXT: [11] - SiFiveP600VEXQ1
95+
# CHECK-NEXT: [12] - SiFiveP600VFloatDiv
96+
# CHECK-NEXT: [13] - SiFiveP600VLD
97+
# CHECK-NEXT: [14] - SiFiveP600VST
98+
99+
# CHECK: Resource pressure per iteration:
100+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8.0] [8.1] [9] [10] [11] [12] [13] [14]
101+
# CHECK-NEXT: - - - - 1.00 - - - - - - 26.00 - - - -
102+
103+
# CHECK: Resource pressure by instruction:
104+
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8.0] [8.1] [9] [10] [11] [12] [13] [14] Instructions:
105+
# CHECK-NEXT: - - - - 1.00 - - - - - - - - - - - vsetvli zero, zero, e32, m1, ta, ma
106+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmslt.vv v0, v4, v20
107+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsle.vv v8, v4, v20
108+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmslt.vv v8, v4, v20
109+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsle.vv v8, v4, v20
110+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmseq.vv v8, v4, v20
111+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsne.vv v8, v4, v20
112+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsltu.vv v8, v4, v20
113+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsleu.vv v8, v4, v20
114+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsltu.vv v8, v4, v20
115+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsleu.vv v8, v4, v20
116+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmflt.vv v0, v4, v20
117+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmfle.vv v8, v4, v20
118+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmflt.vv v8, v4, v20
119+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmfle.vv v8, v4, v20
120+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmfeq.vv v8, v4, v20
121+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmfne.vv v8, v4, v20
122+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmadc.vv v8, v4, v20
123+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsbc.vv v8, v4, v20
124+
# CHECK-NEXT: - - - - - - - - - - - 2.00 - - - - vfirst.m a2, v4
125+
# CHECK-NEXT: - - - - - - - - - - - 2.00 - - - - vcpop.m a2, v4
126+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - viota.m v8, v4
127+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsbf.m v8, v4
128+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsif.m v8, v4
129+
# CHECK-NEXT: - - - - - - - - - - - 1.00 - - - - vmsof.m v8, v4

0 commit comments

Comments
 (0)