【发布时间】:2011-03-08 19:47:14
【问题描述】:
有人能指出open64和llvm之间的区别吗?
我知道 open64 使用 whirl IR,它有 5 个阶段并且差异很大,因为每个阶段都会显着降低机器的代码,而 llvm 有一个用于中级优化的单个 IR,后来降低为目标独立指令(dags)和依赖的。
1) whirl 也是 SSA,
2) 是否使用虚拟寄存器,
3) 是否 open64有 llvm 之类的模块化设计,
4) 是否易于开发 pass 并将其插入工具链?
两个编译器都擅长中级过程间优化和转换,但
5) open64 是否支持 JITting 或框架中内置的任何类型的动态翻译?
看起来两种情况下CG的质量差不多。
6) 前端呢,是否可以很容易地用pragma扩展或者绑定新的不修改 Whirl IR(这是 SUIF 的问题)?
据我所知,open64 被广泛用于许多商业和学术项目(UPC、AMD、Nvidia、Tensilica),但它看起来有很多分支(2003 年之后增长)并且每个都有自己的功能和限制。此外,没有固定的开发者社区和环境或支持,文档与 llvm 相比几乎不存在,而且编译器的发展方向也没有一个简单的方向。
在许可方面也存在差异,其中 llvm 更符合 BSD 许可风格,而 open64 基于 GPL。
【问题讨论】:
标签: compiler-construction comparison llvm