llvm:逐步构建JIT内容的策略

时间:2012-02-05 14:55:03

标签: llvm llvm-3.0 incremental-compiler

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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


对于LLVMContext,除非您特别需要在不同的线程中同时运行多个LLVM实例,否则不要过于担心,只需在需要上下文的地方使用getGlobalContext()。请阅读this doc page以获取更多信息。