是否可以通过LLVM IR知道哪些调用是C / C ++标准库调用(printf,scanf,atan2)?

时间:2020-11-04 17:37:20

标签: llvm

请参阅下面的llvm IR

%call = call double @atan2(double %19, double %21) #3  //library call
%21 = call float @llvm.fabs.f32(float %sub) //llvm intrinsic 
%22 = call float @foo(float %sub) //not intrinsic nor library

我发现@ llvm.fabs.f32是对llvm的固有调用,因为我可以获取参数名称和类型,所以foo既不是固有的,也不是库。但是如何知道atan2是c / c ++标准库调用?

1 个答案:

答案 0 :(得分:0)

TargetLibraryInfo类(https://llvm.org/doxygen/classllvm_1_1TargetLibraryInfo.html#details)的getLibFunc可以在LLVM中用于此目的。首先需要通过将TargetLibraryInfoWrapperPass添加到getAnalysisUsage函数中来执行。完成传递之后,可以通过创建TargetLibraryInfo类型的对象来使用getLibFunc()。

相关问题