RISC-V中的LLVM指令调度

时间:2018-11-15 07:22:50

标签: clang llvm scheduler riscv llc

我正在研究LLVM中针对RISC-V后端的指令调度。我了解有两种调度方式(ScheduleDAGRRList和MachineScheduler)。从调试日志中,我可以RISC-V使用ScheduleDAGRRList方法。

MachineScheduler是否比ScheduleDAGRRList更好?如果是这样,我如何为RISC-V启用MachineScheduler?

我尝试了llc -enable-misched file.ll,但是没有运气。

1 个答案:

答案 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