首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接或通过C/Clang翻译到LLVM IR

直接或通过C/Clang翻译到LLVM IR
EN

Stack Overflow用户
提问于 2013-03-01 03:41:04
回答 1查看 891关注 0票数 3

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

我猜最明显的答案是,通过使用一个了解源语言的前端,想出一个优化的IR表示比期望CLang在生成的C中执行更容易。

我漏掉了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-01 09:25:17

使用通用C后端的优点:

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

不利之处是:

  • 如果您的语言是逐步编译的(例如,没有明显分离的模块,或者复杂的宏系统,或者其他什么),那么通过LLVM IR在一个模块中直接编译JIT比生成数百个微小的C模块更有意义。换句话说,C是在执行单独的编译。
  • 如果您的源语言语义离C太远,那么将其直接编译到一个较低的级别可能会更容易。
  • 并不是所有的LLVM功能都可以直接从C. (例如,本质、替代调用约定、调试元数据以获得更高级别的语言)访问。
  • Clang很大,不包括它会增加您的内存足迹。
  • Clang是不容易维护的,它依赖于头部的存在和准确位置,依赖于gcc的某些部分,等等。没有它,就可以单独使用现有的LLVM,并且依赖关系可以保持自成体系。

在大多数情况下,优化不是问题。Clang有意地产生了一个极不理想的LLVM IR。LLVM应该关注所有的优化,而不是前端。当然,除非您可以进行一些高级别的优化,但是它们将不依赖于您的后端选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15150116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档