我需要检查我的文件中的函数A是否正在调用函数B.我当前的方法是查看函数A中的所有指令并查看是否有任何调用/调用指令正在调用B.可以有人建议更好进场?
答案 0 :(得分:1)
LLVM提供易于使用的方法,使用用户/使用来遍历内存中IR的use-def / def-use链。
您可以遍历B的使用,然后检查其父功能是否为A.
for(Value::Use_iterator ui = B.Use_Begin(); ui != B.Use_end(); ++ui) {
if(instruction* call = dyn_cast<Instruction>(ui->getUser())) {
Function* caller = call->getParent()->getParent();
// check if caller is A or not
}
}
上面的代码段可能只需要很少的修改。 有关详细信息,请参阅:LLVM Use Ref。