在 FunctionPass llvm 中获取当前模块

Get current module inside FunctionPass llvm

我正在 LLVM 中编写函数传递,需要调用方法 Module::getOrInsertFunction。我需要访问当前功能的模块。我如何获得它?

您可以使用 getParent() 函数:http://llvm.org/docs/doxygen/html/classllvm_1_1GlobalValue.html#a9e1fc23a17e97d2d1732e753ae9251ac

请参考:http://llvm.org/docs/WritingAnLLVMPass.html 根据这里的文档, 明确地说,FunctionPass 子类不允许: 1. 检查或修改当前正在处理的功能以外的功能。 2。在当前模块中添加或删除功能。 3. 在当前模块中添加或删除全局变量。 4. 跨调用 runOnFunction 维护状态(包括全局数据)。

因此,您不能从 FunctionPass 内部调用 getOrInsertFunction。您将需要一个 ModulePass