如何在LLVM机器函数传递中创建新的虚拟寄存器?

时间:2013-09-06 22:25:37

标签: llvm

我正在创建一个LLVM MachineFunctionPass。这是一个预注册分配通行证。我想在某一点添加一个新的MachineInstr(我创建)。我正在使用BuildMI()来创建新指令,然后使用MachineInstr :: addOperand()来填充它。我想添加一个新的虚拟寄存器作为操作数之一。这样做的最佳方式是什么?

我已经读过可以使用MachineRegisterInfo :: createVirtualRegister(),但它需要一个TargetRegisterClass参数,我不知道如何获得它。我没有运气搜索文档。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

有很多方法可以获得。一些最有用的是:

  1. 向您的MachineRegisterInfo询问您已有的现有注册表。您可以通过调用MachineRegisterInfo方法从MRI获取MachineFunctiongetRegInfo)。然后,使用MachineRegisterInfo::getRegClass
  2. 询问您的TargetLowering::getRegClassFor。你可以给它一个MVT。有关详细信息,请参阅include/llvm/Target/TargetLowering.h
  3. 通过LLVM源代码对上述方法进行优化可以为您提供大量的使用示例。