对于像这样的 IR
%.0 = phi i32* [ @y, %bb2 ], [ @z, %bb3 ]
%.1 = phi i32* [ %.0, %bb4 ], [ %.x, %bb19 ]
store i32* %.1, i32** @x, align 8
因此,如果我在我的 llvm-pass 中进行迭代并在第三条指令中遇到使用 0.1。我将它存储在值类中(使用 Instruction->getOperand(0)),比如说名称 v1。现在我如何遍历 0.1 可能包含的 y、z 和 x 变量。在 v1 上调用什么。
我已尝试阅读 llvm 文档和以下链接,但没有为 llvm-passes 提供语法
https://llvm.org/docs/MemorySSA.html 我正在尝试以下代码
for (auto &I : BB) {//over basic blocks
Instruction *Inst=&I;
if(Inst->getOpcode()==31){
Value *v=Inst->getOperand(0);
//now use what to get x,y,z as through 0.1
}
}