假设有人想使用 LLVM 静态编译给定语言,最大的区别(优点和缺点)是先将其翻译成 C 然后使用 CLang 而不是处理直接的 IR 翻译。
我想显而易见的答案是,通过使用了解源语言的前端,与期望 CLang 在生成的 C 中表现良好相比,更容易提出优化的 IR 表示。
我在这里遗漏了什么?
使用通用 C 后端的优点:
缺点是:
gcc
.在大多数情况下,优化不是问题。Clang 故意生成一个极其非最优的 LLVM IR。LLVM 应该关注所有优化,而不是前端。当然,除非您可以进行一些高级别的优化,但它们不会取决于您的后端选择。