llvm使用llvm指令获取被调用的函数名

llvm get called function name using llvm instruction

我想知道 llvm::intruction 是否是函数调用,如果是,它调用的函数名称是什么。

还有办法从 llvm::Instruction 中获取 llvm::CallInst 吗?

Instruction* I = ...
if (isa<CallInst>(I)) {
  StringRef name = cast<CallInst>(I).getCalledFunction().getName();
  ...
}

有关这方面的更多信息,请参阅 the relevant section in LLVM Programmer's Manual。总的来说,我全心全意地向初学者推荐这个指南。

Instruction 是所有 LLVM 指令的公共基础 class。

CallInstInstruction 的子class 调用指令。

如果你有Instruction *inst,你可以通过

获得CallInst
CallInst *ci = cast<CallInst>(inst);