我正在尝试在llvm中向后端添加日程安排以防止数据危害。后端非常类似于微纤维,但有很多差异,例如多个延迟槽用于分支延迟。目前,每次llvm编译代码时,我总会发现数据危险,尤其是加载和存储指令。 我已经看过PPC和ARM后端调度,但我无法弄清楚如何调整它,所以我想自己制作。 我想知道如何在编译过程中从llvm获取编译指令的列表,以便根据所使用的寄存器对指令进行排序并检查依赖性。
我目前对此毫无头绪,因为我不是一名熟练的C ++程序员。 CPU是流水线的,只有控制危险(分支)和数据危险。 CPU在管道中有5个阶段,但只有阶段3和阶段5中的指令能够使用阶段1中的数据。 我为后端设置了延迟,但它没有改变任何东西。
答案 0 :(得分:0)
我认为你不应该重新发明轮子并编写你的侧面调度程序。您需要在后端添加HazardRecognizer。这样LLVM的调度程序就会知道可能的危险,并会尽量避免它们。 PPC后端可能是此类调度的最佳示例。