Skip to content

Commit 775bd60

Browse files
authored
[RISCV] Add scheduling info for Zcmp (#82719)
The order of the entries in the list is: outs, ins, Defs, Uses, implicit-defs, implicit uses, where the last two are added programatically during codegen depending on the registers saved/restored and are not described in the TD files.
1 parent 3f91bdf commit 775bd60

File tree

2 files changed

+73
-7
lines changed

2 files changed

+73
-7
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoZc.td

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,29 +181,47 @@ def C_SH : CStoreH_rri<0b100011, 0b0, "c.sh">,
181181

182182
// Zcmp
183183
let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp],
184-
Defs = [X10, X11], hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
184+
hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
185+
let Defs = [X10, X11] in
185186
def CM_MVA01S : RVInst16CA<0b101011, 0b11, 0b10, (outs),
186-
(ins SR07:$rs1, SR07:$rs2), "cm.mva01s", "$rs1, $rs2">;
187+
(ins SR07:$rs1, SR07:$rs2), "cm.mva01s", "$rs1, $rs2">,
188+
Sched<[WriteIALU, WriteIALU, ReadIALU, ReadIALU]>;
187189

190+
let Uses = [X10, X11] in
188191
def CM_MVSA01 : RVInst16CA<0b101011, 0b01, 0b10, (outs SR07:$rs1, SR07:$rs2),
189-
(ins), "cm.mvsa01", "$rs1, $rs2">;
192+
(ins), "cm.mvsa01", "$rs1, $rs2">,
193+
Sched<[WriteIALU, WriteIALU, ReadIALU, ReadIALU]>;
190194
} // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]...
191195

192196
let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp] in {
193197
let hasSideEffects = 0, mayLoad = 0, mayStore = 1, Uses = [X2], Defs = [X2] in
194-
def CM_PUSH : RVInstZcCPPP<0b11000, "cm.push">;
198+
def CM_PUSH : RVInstZcCPPP<0b11000, "cm.push">,
199+
Sched<[WriteIALU, ReadIALU, ReadStoreData, ReadStoreData,
200+
ReadStoreData, ReadStoreData, ReadStoreData, ReadStoreData,
201+
ReadStoreData, ReadStoreData, ReadStoreData, ReadStoreData,
202+
ReadStoreData, ReadStoreData, ReadStoreData]>;
195203

196204
let hasSideEffects = 0, mayLoad = 1, mayStore = 0, isReturn = 1,
197205
Uses = [X2], Defs = [X2] in
198-
def CM_POPRET : RVInstZcCPPP<0b11110, "cm.popret">;
206+
def CM_POPRET : RVInstZcCPPP<0b11110, "cm.popret">,
207+
Sched<[WriteIALU, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
208+
WriteLDW, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
209+
WriteLDW, WriteLDW, WriteLDW, WriteLDW, ReadIALU]>;
199210

200211
let hasSideEffects = 0, mayLoad = 1, mayStore = 0, isReturn = 1,
201212
Uses = [X2], Defs = [X2, X10] in
202-
def CM_POPRETZ : RVInstZcCPPP<0b11100, "cm.popretz">;
213+
def CM_POPRETZ : RVInstZcCPPP<0b11100, "cm.popretz">,
214+
Sched<[WriteIALU, WriteIALU, WriteLDW, WriteLDW, WriteLDW,
215+
WriteLDW, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
216+
WriteLDW, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
217+
ReadIALU]>;
203218

204219
let hasSideEffects = 0, mayLoad = 1, mayStore = 0,
205220
Uses = [X2], Defs = [X2] in
206-
def CM_POP : RVInstZcCPPP<0b11010, "cm.pop">;
221+
def CM_POP : RVInstZcCPPP<0b11010, "cm.pop">,
222+
Sched<[WriteIALU, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
223+
WriteLDW, WriteLDW, WriteLDW, WriteLDW, WriteLDW, WriteLDW,
224+
WriteLDW, WriteLDW, WriteLDW, ReadIALU]>;
207225
} // DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp]...
208226

209227
let DecoderNamespace = "RVZcmt", Predicates = [HasStdExtZcmt],
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# RUN: llc -mtriple=riscv32 -verify-machineinstrs -run-pass=riscv-move-merge -simplify-mir -o - %s | FileCheck -check-prefixes=CHECK32I %s
3+
# RUN: llc -mtriple=riscv32 -mattr=+zcmp -verify-machineinstrs -run-pass=riscv-move-merge -simplify-mir -o - %s | FileCheck -check-prefixes=CHECK32ZCMP %s
4+
# RUN: llc -mtriple=riscv64 -verify-machineinstrs -run-pass=riscv-move-merge -simplify-mir -o - %s | FileCheck -check-prefixes=CHECK64I %s
5+
# RUN: llc -mtriple=riscv64 -mattr=+zcmp -verify-machineinstrs -run-pass=riscv-move-merge -simplify-mir -o - %s | FileCheck -check-prefixes=CHECK64ZCMP %s
6+
---
7+
name: zcmp_mv
8+
tracksRegLiveness: true
9+
body: |
10+
bb.0:
11+
liveins: $x11, $x10
12+
; CHECK32I-LABEL: name: zcmp_mv
13+
; CHECK32I: liveins: $x11, $x10
14+
; CHECK32I-NEXT: {{ $}}
15+
; CHECK32I-NEXT: $x8 = ADDI $x11, 0
16+
; CHECK32I-NEXT: $x9 = ADDI $x10, 0
17+
; CHECK32I-NEXT: $x10 = ADDI killed $x9, 0
18+
; CHECK32I-NEXT: $x11 = ADDI $x8, 0
19+
; CHECK32I-NEXT: PseudoRET
20+
;
21+
; CHECK32ZCMP-LABEL: name: zcmp_mv
22+
; CHECK32ZCMP: liveins: $x11, $x10
23+
; CHECK32ZCMP-NEXT: {{ $}}
24+
; CHECK32ZCMP-NEXT: $x9, $x8 = CM_MVSA01 implicit $x10, implicit $x11
25+
; CHECK32ZCMP-NEXT: CM_MVA01S killed $x9, $x8, implicit-def $x10, implicit-def $x11
26+
; CHECK32ZCMP-NEXT: PseudoRET
27+
;
28+
; CHECK64I-LABEL: name: zcmp_mv
29+
; CHECK64I: liveins: $x11, $x10
30+
; CHECK64I-NEXT: {{ $}}
31+
; CHECK64I-NEXT: $x8 = ADDI $x11, 0
32+
; CHECK64I-NEXT: $x9 = ADDI $x10, 0
33+
; CHECK64I-NEXT: $x10 = ADDI killed $x9, 0
34+
; CHECK64I-NEXT: $x11 = ADDI $x8, 0
35+
; CHECK64I-NEXT: PseudoRET
36+
;
37+
; CHECK64ZCMP-LABEL: name: zcmp_mv
38+
; CHECK64ZCMP: liveins: $x11, $x10
39+
; CHECK64ZCMP-NEXT: {{ $}}
40+
; CHECK64ZCMP-NEXT: $x9, $x8 = CM_MVSA01 implicit $x10, implicit $x11
41+
; CHECK64ZCMP-NEXT: CM_MVA01S killed $x9, $x8, implicit-def $x10, implicit-def $x11
42+
; CHECK64ZCMP-NEXT: PseudoRET
43+
$x8 = ADDI $x11, 0
44+
$x9 = ADDI $x10, 0
45+
$x10 = ADDI killed $x9, 0
46+
$x11 = ADDI $x8, 0
47+
PseudoRET
48+
...

0 commit comments

Comments
 (0)