Skip to content

Commit a191e00

Browse files
committed
[RISCV][Scheduler] Add scheduling definitions for 128-bit Zfa instructions
1 parent 8499904 commit a191e00

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoZfa.td

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,17 +177,24 @@ def FLEQ_H : FPCmp_rr<0b1010010, 0b100, "fleq.h", FPR16>;
177177

178178
let Predicates = [HasStdExtZfa, HasStdExtQ] in {
179179
let isReMaterializable = 1, isAsCheapAsAMove = 1 in
180-
def FLI_Q : FPFLI_r<0b1111011, 0b00001, 0b000, FPR128, "fli.q">;
180+
def FLI_Q : FPFLI_r<0b1111011, 0b00001, 0b000, FPR128, "fli.q">,
181+
Sched<[WriteFLI128]>;
181182

183+
let SchedRW = [WriteFMinMax128, ReadFMinMax128, ReadFMinMax128] in {
182184
def FMINM_Q: FPALU_rr<0b0010111, 0b010, "fminm.q", FPR128, Commutable=1>;
183185
def FMAXM_Q: FPALU_rr<0b0010111, 0b011, "fmaxm.q", FPR128, Commutable=1>;
186+
}
184187

185-
def FROUND_Q : FPUnaryOp_r_frm<0b0100011, 0b00100, FPR128, FPR128, "fround.q">;
188+
def FROUND_Q : FPUnaryOp_r_frm<0b0100011, 0b00100, FPR128, FPR128, "fround.q">,
189+
Sched<[WriteFRoundF128, ReadFRoundF128]>;
186190
def FROUNDNX_Q : FPUnaryOp_r_frm<0b0100011, 0b00101, FPR128, FPR128,
187-
"froundnx.q">;
191+
"froundnx.q">,
192+
Sched<[WriteFRoundF128, ReadFRoundF128]>;
188193

194+
let SchedRW = [WriteFCmp128, ReadFCmp128, ReadFCmp128] in {
189195
def FLTQ_Q : FPCmp_rr<0b1010011, 0b101, "fltq.q", FPR128>;
190196
def FLEQ_Q : FPCmp_rr<0b1010011, 0b100, "fleq.q", FPR128>;
197+
}
191198
} // Predicates = [HasStdExtZfa, HasStdExtQ]
192199

193200
let Predicates = [HasStdExtZfa, HasStdExtQ, IsRV64] in {

llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,14 @@ let Latency = 2 in {
283283
def : WriteRes<WriteFRoundF16, [GenericOOOFPU]>;
284284
def : WriteRes<WriteFRoundF32, [GenericOOOFPU]>;
285285
def : WriteRes<WriteFRoundF64, [GenericOOOFPU]>;
286+
def : WriteRes<WriteFRoundF128, [GenericOOOFPU]>;
286287
}
287288

288289
let Latency = 2 in {
289290
def : WriteRes<WriteFLI16, [GenericOOOFPU]>;
290291
def : WriteRes<WriteFLI32, [GenericOOOFPU]>;
291292
def : WriteRes<WriteFLI64, [GenericOOOFPU]>;
293+
def : WriteRes<WriteFLI128, [GenericOOOFPU]>;
292294
}
293295

294296
//===----------------------------------------------------------------------===//
@@ -465,6 +467,7 @@ def : ReadAdvance<ReadXPERM, 0>;
465467
def : ReadAdvance<ReadFRoundF32, 0>;
466468
def : ReadAdvance<ReadFRoundF64, 0>;
467469
def : ReadAdvance<ReadFRoundF16, 0>;
470+
def : ReadAdvance<ReadFRoundF128, 0>;
468471

469472
// Zfh extension
470473
def : ReadAdvance<ReadFCvtF16ToF64, 0>;

llvm/lib/Target/RISCV/RISCVSchedule.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def WriteFCvtF64ToF128 : SchedWrite;
9797
def WriteFRoundF32 : SchedWrite;
9898
def WriteFRoundF64 : SchedWrite;
9999
def WriteFRoundF16 : SchedWrite;
100+
def WriteFRoundF128 : SchedWrite;
100101

101102
def WriteFClass16 : SchedWrite; // 16-bit floating point classify
102103
def WriteFClass32 : SchedWrite; // 32-bit floating point classify
@@ -125,6 +126,7 @@ def WriteFMovI64ToF64 : SchedWrite; // RV64I only
125126
def WriteFLI16 : SchedWrite; // Floating point constant load
126127
def WriteFLI32 : SchedWrite; // Floating point constant load
127128
def WriteFLI64 : SchedWrite; // Floating point constant load
129+
def WriteFLI128 : SchedWrite; // Floating point constant load
128130

129131
def WriteFLD16 : SchedWrite; // Floating point sp load
130132
def WriteFLD32 : SchedWrite; // Floating point sp load
@@ -244,6 +246,7 @@ def ReadFCvtF64ToF128 : SchedRead;
244246
def ReadFRoundF16 : SchedRead;
245247
def ReadFRoundF32 : SchedRead;
246248
def ReadFRoundF64 : SchedRead;
249+
def ReadFRoundF128 : SchedRead;
247250

248251
def ReadFClass16 : SchedRead;
249252
def ReadFClass32 : SchedRead;
@@ -447,13 +450,16 @@ let Unsupported = true in {
447450
def : WriteRes<WriteFRoundF16, []>;
448451
def : WriteRes<WriteFRoundF32, []>;
449452
def : WriteRes<WriteFRoundF64, []>;
453+
def : WriteRes<WriteFRoundF128, []>;
450454
def : WriteRes<WriteFLI16, []>;
451455
def : WriteRes<WriteFLI32, []>;
452456
def : WriteRes<WriteFLI64, []>;
457+
def : WriteRes<WriteFLI128, []>;
453458

454459
def : ReadAdvance<ReadFRoundF32, 0>;
455460
def : ReadAdvance<ReadFRoundF64, 0>;
456461
def : ReadAdvance<ReadFRoundF16, 0>;
462+
def : ReadAdvance<ReadFRoundF128, 0>;
457463
} // Unsupported = true
458464
}
459465

0 commit comments

Comments
 (0)