如何通过LLVM获取phi指令的内容

在使用llvm时,对于生成的如下.ll文件的一段文字:

while.cond:                                       ; preds = %while.body, %entry
  %k.0 = phi i32 [ %call1, %entry ], [ %dec, %while.body ]
  ...

我想要获取phi指令后两个方括号内的内容,该如何获取呢?我目前写的相关代码如下,其中I为Instruction

if(I->getOpcode()==Instruction::PHI){
    ...
}

要获取LLVM生成的.ll文件中phi指令后方括号内的内容,你可以使用LLVM提供的API来访问phi指令的操作数。在你的代码中,你可以使用PHINode类来检查当前指令是否为phi指令,并且可以使用PHINode的getNumIncomingValues()和getIncomingValue()方法来获取phi指令的操作数数量和具体的操作数。

以下是修改后的代码示例:

if (PHINode *phi = dyn_cast<PHINode>(I)) {
    // 获取phi指令的操作数数量
    unsigned numOperands = phi->getNumIncomingValues();
    
    // 遍历phi指令的操作数
    for (unsigned i = 0; i < numOperands; i++) {
        Value *operand = phi->getIncomingValue(i);
        
        // 操作数可以是常数、指针或其他指令
        // 如果你只关心具体的常数值或指令,请使用对应的方法来提取
        if (ConstantInt *constInt = dyn_cast<ConstantInt>(operand)) {
            // 操作数是常数值
            uint64_t value = constInt->getZExtValue();
            // 处理操作数的值
        } else if (Instruction *inst = dyn_cast<Instruction>(operand)) {
            // 操作数是其他指令
            // 处理操作数的指令
        }
    }
}