0

我试图了解如何用 LLVM 替换指令并确保设置为等于原始指令的引用可以重置为我创建的新指令(对于我的一生,我真的很难浏览 LLVM 文档的时间)

假设我有指令 i 并且我知道这是我想要替换的 - 我正在这样做

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

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

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

%2 = mul %0, 2

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

4

1 回答 1

1

LLVM 中间语言中没有寄存器或变量,也没有任何赋值。使困惑?我建议阅读有关SSA 表格的更多信息。

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

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

于 2013-04-27T19:56:10.277 回答