如何在LLVM中保留寄存器?

时间:2015-12-21 21:53:49

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

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

2 个答案:

答案 0 :(得分:2)

您可能希望编辑RegisterInfo.td文件。我没有专门完成你想要做的事情,但是看一下Target.td的一些提示。 IsAllocatable看起来很有希望或者可能删除了您不希望LLVM使用的寄存器。

答案 1 :(得分:0)

由于IR寄存器是虚拟且无限的,因此绝对不会处于IR级别。您可以使用 XXXRegisterInfo :: getReservedRegs()将寄存器标记为保留。

List<MyClass> Migrated = File.Exists(MigratedPath) ? (JsonConvert.DeserializeObject<List<MyClass>>(File.ReadAllText(MigratedPath))) : new List<MyClass>();