llvm:增量构建 JIT 内容的策略

发布于 2025-01-03 05:13:40 字数 322 浏览 2 评论 0原文

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

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

为了实现这一目标,您还建议采取哪些其他策略?

I want my language backend to build functions and types incrementally but don't pollute the main module and context when functions and types fail to build successfully (due to problems with the user input).

I ask an earlier question regarding this.
One strategy i can see for this would be building everything in temp module and LLVMContext, migrating to main context only after success, but i am not sure if that is possible with the current API. For instance, i wouldn't know know to migrate that content between different contexts, as they are supposed to represent isolated islands of LLVM functionality, but maybe there is always the alternative to save everything to .bc and load somewhere else?

what other strategies would you suggest for achieving this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨笨の傻瓜 2025-01-10 05:13:40

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

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


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

Assuming you have two modules - source and destination, it's possible to copy a function from source to destination. The code in LLVM you can use as an example is the body of the LLVM linker, in lib/linker/LinkModules.cpp.

In particular, look at the linkFunctionProto and linkFunctionBody methods in that file. linkFunctionBody copies the function definition, and uses the llvm::CloneFunctionInto utility for the heavy lifting.


As for LLVMContext, unless you specifically need to run several LLVM instances simultaneously in different threads, don't worry about it too much and just use getGlobalContext() everywhere a context is required. Read this doc page for more information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文