我正在尝试在 llvm 中将调度添加到我的后端以防止数据危害。后端与 microblaze 非常相似,但有很多不同之处,例如用于分支延迟的多个延迟槽。目前,每次 llvm 编译代码时,我总是会发现数据危险,尤其是对于加载和存储指令。我查看了 PPC 和 ARM 后端调度,但我不知道如何调整它,所以我想自己制作。我想知道如何在编译过程中从 llvm 获取已编译指令的列表,以对指令进行排序并根据使用的寄存器检查依赖关系。
我目前对此一无所知,因为我不是熟练的 C++ 程序员。CPU 是流水线的,只有控制危险(分支)和数据危险。CPU 有 5 个流水线阶段,但只有第 3 阶段和第 5 阶段的指令能够使用来自第 1 阶段的数据。我为后端设置了延迟,它不会改变任何东西。