gpt4 book ai didi

c - 直接或通过 C/Clang 转换为 LLVM IR

转载 作者:行者123 更新时间:2023-12-04 12:15:27 24 4
gpt4 key购买 nike

假设有人想使用 LLVM 静态编译给定的语言,首先将其翻译成 C 然后使用 CLang 而不是处理直接 IR 翻译的最大区别(优点和缺点)是什么。

我猜的明显答案是,通过使用了解源语言的前端,与期望 CLang 在生成的 C 中表现良好相比,更容易提出优化的 IR 表示。

我在这里遗漏了什么?

最佳答案

使用通用 C 后端的优点:

  • 您可以使用任何 C 编译器(不仅仅是 Clang)
  • 如果使用如此高级的语言,则更容易调试中间代码
  • 根据您的源语言语义,通过 C 翻译它可能更容易(但不一定)

缺点是:

  • 如果你的语言是增量编译的(例如,没有明确分离的模块,或复杂的宏系统,或其他任何东西),通过 LLVM IR 在单个模块中编译并立即进行 JIT 编译比生成数百个微型 C 模块更有意义.换句话说,C 强制执行单独编译。
  • 如果您的源语言语义与 C 相去甚远,直接将其编译为较低级别会更容易。
  • 并非所有 LLVM 功能都可以直接从 C 访问。例如,内在函数、替代调用约定、高级语言的调试元数据。
  • Clang 很大,排除它会改善您的内存占用
  • Clang 不容易维护,它依赖于 header 的存在和确切位置,依赖于 gcc 的某些部分,等等。没有它,裸露的 LLVM 可以单独使用和依赖可以保持独立。

在大多数情况下优化不是问题。 Clang 故意生成一个极度非最佳的 LLVM IR。 LLVM 应该关心所有的优化,而不是前端。当然,除非您可以进行一些高级优化,但它们将不取决于您的后端选择。

关于c - 直接或通过 C/Clang 转换为 LLVM IR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150116/

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