我正在研究RISC-V后端中LLVM的指令调度。我了解到有两种调度方式(ScheduleDAGRRList和MachineScheduler)。从调试日志中可以看出,RISC-V使用ScheduleDAGRRList方法。
MachineScheduler比ScheduleDAGRRList更好吗?如果是这样,我该如何在RISC-V上启用MachineScheduler?
我尝试了llc -enable-misched file.ll
,但没有成功。
我正在研究RISC-V后端中LLVM的指令调度。我了解到有两种调度方式(ScheduleDAGRRList和MachineScheduler)。从调试日志中可以看出,RISC-V使用ScheduleDAGRRList方法。
MachineScheduler比ScheduleDAGRRList更好吗?如果是这样,我该如何在RISC-V上启用MachineScheduler?
我尝试了llc -enable-misched file.ll
,但没有成功。
https://releases.llvm.org/10.0.0/docs/ReleaseNotes.html
在RISCVSchedRocket64.td中,TableGen SchedMachineModel的描述表明它是一个顺序执行处理器。// Rocket machine model for scheduling and other instruction cost heuristics.
def Rocket64Model : SchedMachineModel {
let MicroOpBufferSize = 0; // Explicitly set to zero since Rocket is in-order.
let IssueWidth = 1; // 1 micro-ops are dispatched per cycle.
let LoadLatency = 3;
let MispredictPenalty = 3;
}
-O3 -mllvm -enable-misched -mllvm -enable-post-misched -mcpu=rocket-rv64