Aet*_*etX 2 c++ llvm compiler-optimization
我想向每个具有多个前身的基本块添加一个 phi 节点。例如,在store之前添加phi节点。我对 llvm IR 很陌生,我知道有一些函数调用replaceAllUsesWith()可以用来做类似的事情。但我不知道具体如何使用它。非常感谢任何帮助!
<label>:7: ; preds = %6, %0
store i32 999, i32* %3, align 4
ret i32 0
Run Code Online (Sandbox Code Playgroud)
将 phi 节点添加到基本块的开头非常简单:找到第一条指令并在该指令之前创建一个 phi 节点。这会在任何现有 phi 之后、任何“真实”指令之前创建一个新的 phi。它会因基本块为空而失败,我认为您的情况并非如此。您必须根据需要调用addIncomingValue() 。
我想您随后会想要使用该块中的 phi。您可以循环BasicBlock::getInstList()并使用getNumOperands()和getOperand()检查每条指令,并使用setOperand()更改相关指令操作数。这就是replaceAllUsesOf() 所做的,只不过它替换了所有用途,甚至是您的phi 和其他块中的用途。