0

我希望我的语言后端以增量方式构建函数和类型,但当函数和类型未能成功构建(由于用户输入问题)时,不要污染主模块和上下文。

关于这个,我问了一个较早的问题。我可以看到的一种策略是在 temp 模块中构建所有内容,并且LLVMContext仅在成功后迁移到主上下文,但我不确定当前 API 是否可行。例如,我不知道要在不同的上下文之间迁移该内容,因为它们应该代表 LLVM 功能的孤立岛屿,但也许总有另一种方法可以将所有内容保存到 .bc 并加载到其他地方?

你会建议什么其他策略来实现这一目标?

4

1 回答 1

2

假设您有两个模块 - 源和目标,可以将函数从源复制到目标。您可以用作示例的 LLVM 中的代码是 LLVM 链接器的主体,位于lib/linker/LinkModules.cpp.

特别是,查看该文件中的linkFunctionProtolinkFunctionBody方法。linkFunctionBody复制函数定义,并使用该llvm::CloneFunctionInto实用程序进行繁重的工作。


至于LLVMContext,除非您特别需要在不同的线程中同时运行多个 LLVM 实例,否则不要太担心它,只需getGlobalContext()在需要上下文的任何地方使用即可。阅读此文档页面以获取更多信息。

于 2012-02-06T08:51:02.450 回答