我目前正在使用llvm(通过LLVM IR)对c代码进行静态分析。 我首先将c代码转换为.ll文件,然后我用LLVM-Framework解析它。我正在使用的IR是SSA形式的,因此指令的每个结果都是独特的。但问题是,如果它只有一个数字名称,我就无法得到结果的名称或操作数的名称。(例如%1,%2,...)。我尝试下面的代码来获取名称,
Instruction & inst = *inst_it;
std::string name = inst.getOperand(0)->getName().str();
如果名称类似于[%sum.175.unr],变量'name'将具有有效的字符串值,但对于%1,%2,...等名称,代码仅返回空字符串。
示例.ll文件,
%5 = mul nsw i64 %indvars.iv84, %0
%6 = add nsw i64 %1, %indvars.iv84
尝试获取%5或%0的名称将为我提供一个空字符串,但使用indvars.iv84,我将得到正确的结果。阅读文档并没有多大帮助。在这种情况下应该是什么问题?