我正在创建一个LLVM MachineFunctionPass。这是一个预注册分配通行证。我想在某一点添加一个新的MachineInstr(我创建)。我正在使用BuildMI()来创建新指令,然后使用MachineInstr :: addOperand()来填充它。我想添加一个新的虚拟寄存器作为操作数之一。这样做的最佳方式是什么?
我已经读过可以使用MachineRegisterInfo :: createVirtualRegister(),但它需要一个TargetRegisterClass参数,我不知道如何获得它。我没有运气搜索文档。任何帮助将不胜感激!
答案 0 :(得分:2)
有很多方法可以获得。一些最有用的是:
MachineRegisterInfo
询问您已有的现有注册表。您可以通过调用MachineRegisterInfo
方法从MRI
获取MachineFunction
(getRegInfo
)。然后,使用MachineRegisterInfo::getRegClass
。TargetLowering::getRegClassFor
。你可以给它一个MVT
。有关详细信息,请参阅include/llvm/Target/TargetLowering.h
。通过LLVM源代码对上述方法进行优化可以为您提供大量的使用示例。