我正在研究LLVM中针对RISC-V后端的指令调度。我了解有两种调度方式(ScheduleDAGRRList和MachineScheduler)。从调试日志中,我可以RISC-V使用ScheduleDAGRRList方法。
MachineScheduler是否比ScheduleDAGRRList更好?如果是这样,我如何为RISC-V启用MachineScheduler?
我尝试了llc -enable-misched file.ll
,但是没有运气。
答案 0 :(得分:2)
RISC-V后端在LLVM 10.0版中增加了对Machine Scheduler(MISched)的支持。
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;
}
您可以使用以下命令启用rocket-rv64的机器调度:
-O3 -mllvm -enable-misched -mllvm -enable-post-misched -mcpu=rocket-rv64