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

Ere*_*555 3 llvm llvm-gcc llvm-clang llvm-ir llvm-c++-api

我需要检查我的文件中的函数 A 是否正在调用函数 B。我当前的方法是遍历函数 A 中的所有指令,看看是否有任何调用/调用指令正在调用 B。有人能建议更好的方法吗?

Chi*_*tel 5

LLVM 提供易于使用的方法来使用 Users/Uses 遍历内存 IR 的 use-def/def-use 链。

你可以遍历B的Uses,然后检查它的父函数是否是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
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段只需稍加修改即可工作。请参阅:LLVM 使用参考以获取更多信息。