【问题标题】:How can I reserve registers in LLVM?如何在 LLVM 中保留寄存器?
【发布时间】:2016-03-28 01:49:51
【问题描述】:

我正在尝试实现一个特殊的编译器级别 LLVM 通道,它必须在 ARM 微架构中可用的 32 个 GPR 中保留 20 个寄存器,以便我将对这些保留的寄存器进行实验。我打算在 IR 级别执行此操作。可能吗?

【问题讨论】:

    标签: compiler-construction arm llvm code-generation llvm-ir


    【解决方案1】:

    您可能希望编辑 RegisterInfo.td 文件。我还没有具体完成您想要做的事情,但请查看 Target.td 以获得一些提示。 IsAllocatable 看起来很有希望或可能删除您不希望 LLVM 使用的寄存器。

    【讨论】:

      【解决方案2】:

      它肯定不会在 IR 级别,因为 IR 寄存器是虚拟且无限的。您可以使用 XXXRegisterInfo::getReservedRegs() 将寄存器标记为保留。

      BitVector XXXRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
        BitVector Reserved(getNumRegs());
      
        Reserved.set(XXX::REGX);
      
        return Reserved;
      }
      

      【讨论】:

        猜你喜欢
        • 2015-03-27
        • 1970-01-01
        • 2021-11-23
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多