LLVM指令调度在RISC-V中的应用

4

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

MachineScheduler比ScheduleDAGRRList更好吗?如果是这样,我该如何在RISC-V上启用MachineScheduler?

我尝试了llc -enable-misched file.ll,但没有成功。

1个回答

2
RISC-V后端在LLVM 10.0版本中增加了对机器调度器(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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接