我正在尝试编写一个 LLVM 传递,它将找到直接或间接调用外部函数(即当前编译单元中未定义的函数)的函数
例如,在 C 上运行以下代码时:
void a(string s) {print(s)};
int b(int x) {return 1}
void c(void) {a("hello);b}
它应该标记 a 和 c。
我需要某种方式来判断给定的调用 inst 是否对应于对外部函数的直接调用。我的第一种方法是从调用 inst 中提取函数对象,然后使用从 GlobalValue 类继承的 isDeclaration() 方法。这最终在每个函数调用上都返回 true,这显然是不可取的。
处理这个问题的正确方法是什么?