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

时间:2013-04-27 16:58:19

标签: llvm

我试图理解如何用LLVM替换指令,并确保设置的等于原始指令的引用可以重置为我创建的新指令(对于我的生命,我有导航LLVM文档非常困难)

说我有指令我知道这就是我要替换的东西 - 我正在做这个

    BinaryOperator::Create(Instruction::Add, value, operand, "", i);
    i->eraseFromParent();

要创建我的新指令并将其放在我之前,我正在更换指令。然后我删除了我。

我的问题是旧指令被设置为寄存器,后来%2被重用于商店(例如下面)。

%2 = mul %0, 2

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

1 个答案:

答案 0 :(得分:1)

LLVM中间语言中没有寄存器或变量,也没有任何赋值。困惑?我建议您详细了解SSA form

特别是,我建议不要在名字中思考(%some)。名称仅对中间语言(.ll文件)的文本表示有用,在直接使用LLVM API时它们没有太多用途。

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