gpt4 book ai didi

clang - LLVM jit 和 native

转载 作者:行者123 更新时间:2023-12-01 22:18:10 25 4
gpt4 key购买 nike

我不明白 LLVM JIT 与正常的无 JIT 编译有何关系,而且文档也不好。

例如,假设我使用 clang 前端:

  1. 案例 1:我使用 clang/llvm 将 C 文件编译为 native 。我理解的这个流程就像 gcc 流程 - 我得到了 x86 可执行文件并运行。
  2. 案例 2:我编译成某种在 LLVM JIT 上运行的 LLVM IR。在这种情况下,可执行文件包含 LLVM 运行时以在 JIT 上执行 IR,或者它是如何工作的?

这两者有什么区别,它们是否正确? LLVM 流程是否同时支持 JIT 和非 JIT?我什么时候想使用 JIT - 对于像 C 这样的语言有意义吗?

最佳答案

您必须了解 LLVM 是一个帮助您构建编译器的库。 Clang 只是这个库的前端。

Clang 将 C/C++ 代码翻译为 LLVM IR,并将其交给 LLVM,LLVM 将其编译为 native 代码。

LLVM 还能够直接在内存中生成 native 代码,然后可以将其作为普通函数进行调用。所以案例1.和案例2.共享LLVM的优化和代码生成。

那么如何使用 LLVM 作为 JIT 编译器呢?您构建一个生成一些 LLVM IR(在内存中)的应用程序,然后使用 LLVM 库生成 native 代码(仍在内存中)。 LLVM 会返回一个指针,您可以稍后调用该指针。不涉及 clang 。

但是,您可以使用 clang 将一些 C 代码转换为 LLVM IR 并将其加载到您的 JIT 上下文中以使用这些函数。

现实世界的例子:

还有Kaleidoscope教程展示了如何使用 JIT 编译器实现简单的语言。

关于clang - LLVM jit 和 native ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com