LLVM-替换分配给引用的指令

LLVM-替换分配给引用的指令,llvm,Llvm,我试图理解如何用LLVM替换指令,并确保设置为与原始指令相同的引用可以重置为我创建的新指令(就我而言,我在浏览LLVM文档时遇到了一段非常困难的时间) 假设我有指令,我知道这是我想要替换的——我正在这样做 BinaryOperator::Create(Instruction::Add, value, operand, "", i); i->eraseFromParent(); 创建我的新指令并将其放在我之前,我要替换的指令。然后我移除I 我的问题是,旧指令被设置为寄存器,

我试图理解如何用LLVM替换指令,并确保设置为与原始指令相同的引用可以重置为我创建的新指令(就我而言,我在浏览LLVM文档时遇到了一段非常困难的时间)

假设我有指令,我知道这是我想要替换的——我正在这样做

    BinaryOperator::Create(Instruction::Add, value, operand, "", i);
    i->eraseFromParent();
创建我的新指令并将其放在我之前,我要替换的指令。然后我移除I

我的问题是,旧指令被设置为寄存器,之后%2被重新用于存储(例如,如下所示)


在删除指令时,我删除了整行,包括%2,并且我假设我的新指令设置为其他寄存器。我该怎么办?我已经看到我可以使用ReplaceInstWithInst调用,但我不知道它是否能解决我的问题/它是如何工作的。

LLVM中间语言中没有寄存器或变量,也没有任何赋值。困惑的我建议你多读一些关于

特别是,我建议避免用名字来思考。名称仅对中间语言(.ll文件)的文本表示有用,当您直接使用LLVMAPI时,它们没有太多用途


在任何情况下,replaceinswithinst都是将一条指令替换为另一条指令的好方法。它实际上是将旧指令的所有用法替换为新指令的用法。

谢谢,这正是我所需要的——我希望替换WithInst做到这一点,但在任何地方都找不到明确的答案
%2 = mul %0, 2