Compiler construction 如何在LLVM中保留寄存器?

Compiler construction 如何在LLVM中保留寄存器?,compiler-construction,arm,llvm,code-generation,llvm-ir,Compiler Construction,Arm,Llvm,Code Generation,Llvm Ir,我正在尝试实现一个特殊的编译器级LLVM过程,它必须在ARM micro体系结构中可用的32个GPRs中保留20个寄存器,以便在这些保留寄存器上执行我的实验。我打算在IR级别上这样做。可能吗 您可能想编辑RegisterInfo.td文件。我还没有具体说明您想要做什么,但请查看Target.td以获得一些提示。IsAllocatable看起来很有希望,或者可能会删除您不希望LLVM使用的寄存器 它肯定不会处于IR级别,因为IR寄存器是虚拟的和无限的。您可以使用XXXRegisterInfo::g

我正在尝试实现一个特殊的编译器级LLVM过程,它必须在ARM micro体系结构中可用的32个GPRs中保留20个寄存器,以便在这些保留寄存器上执行我的实验。我打算在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;
}