llvm - 检查函数A是否正在调用函数B的最快方法

时间:2018-04-16 18:50:57

标签: llvm llvm-clang llvm-ir llvm-gcc llvm-c++-api

我需要检查我的文件中的函数A是否正在调用函数B.我当前的方法是查看函数A中的所有指令并查看是否有任何调用/调用指令正在调用B.可以有人建议更好进场?

1 个答案:

答案 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