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

llvm-检查函数A是否调用函数B的最快方法,llvm,llvm-clang,llvm-ir,llvm-gcc,llvm-c++-api,Llvm,Llvm Clang,Llvm Ir,Llvm Gcc,Llvm C++ Api,我需要检查文件中的函数A是否正在调用函数B。我当前的方法是浏览函数A中的所有指令,看看是否有任何调用/调用指令正在调用函数B。有人能建议更好的方法吗 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_c

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

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
    }
}
for(Value::Use_iterator ui=B.Use_Begin();ui!=B.Use_end();++ui){
if(指令*call=dyn\u cast(ui->getUser()){
函数*caller=call->getParent()->getParent();
//检查呼叫者是否是一个
}
}
上面的代码片段只需稍加修改即可工作。 请参阅:了解更多信息