我试图理解如何用LLVM替换指令,并确保设置的等于原始指令的引用可以重置为我创建的新指令(对于我的生命,我有导航LLVM文档非常困难)
说我有指令我知道这就是我要替换的东西 - 我正在做这个
BinaryOperator::Create(Instruction::Add, value, operand, "", i);
i->eraseFromParent();
要创建我的新指令并将其放在我之前,我正在更换指令。然后我删除了我。
我的问题是旧指令被设置为寄存器,后来%2被重用于商店(例如下面)。
%2 = mul %0, 2
在删除指令时,我删除了整行,包括%2,我假设我的新指令设置为其他寄存器。我怎么处理这个?我已经看到有一个我可以使用的ReplaceInstWithInst调用,但我不知道它是否能解决我的问题/它是如何工作的。
答案 0 :(得分:1)
LLVM中间语言中没有寄存器或变量,也没有任何赋值。困惑?我建议您详细了解SSA form。
特别是,我建议不要在名字中思考(%some)。名称仅对中间语言(.ll文件)的文本表示有用,在直接使用LLVM API时它们没有太多用途。
在任何情况下,replaceinstwithinst都是将一条指令替换为另一条指令的好方法。它实际上做的是用新指令替换旧指令的所有用法。