【发布时间】:2016-03-28 01:49:51
【问题描述】:
我正在尝试实现一个特殊的编译器级别 LLVM 通道,它必须在 ARM 微架构中可用的 32 个 GPR 中保留 20 个寄存器,以便我将对这些保留的寄存器进行实验。我打算在 IR 级别执行此操作。可能吗?
【问题讨论】:
标签: compiler-construction arm llvm code-generation llvm-ir
我正在尝试实现一个特殊的编译器级别 LLVM 通道,它必须在 ARM 微架构中可用的 32 个 GPR 中保留 20 个寄存器,以便我将对这些保留的寄存器进行实验。我打算在 IR 级别执行此操作。可能吗?
【问题讨论】:
标签: compiler-construction arm llvm code-generation llvm-ir
您可能希望编辑 RegisterInfo.td 文件。我还没有具体完成您想要做的事情,但请查看 Target.td 以获得一些提示。 IsAllocatable 看起来很有希望或可能删除您不希望 LLVM 使用的寄存器。
【讨论】:
它肯定不会在 IR 级别,因为 IR 寄存器是虚拟且无限的。您可以使用 XXXRegisterInfo::getReservedRegs() 将寄存器标记为保留。
BitVector XXXRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
BitVector Reserved(getNumRegs());
Reserved.set(XXX::REGX);
return Reserved;
}
【讨论】: