我知道open64使用whirl IR,它有5个阶段,每个阶段将代码显着降低到机器级别,而llvm只有一个中间表示,用于中级优化,然后转换为目标无关指令(dags)和相关指令。
1) whirl是否也是SSA, 2) 它是否使用虚拟寄存器, 3) open64是否像llvm一样具有模块化设计, 4) 开发pass并将其插入到工具链中容易吗?
两种编译器都擅长中级过程间优化和转换,但 5) open64是否具有本地支持JIT或任何类型的动态翻译的框架? 看起来两种编译器的CG质量更多或少相似。 6) 与前端有什么不同,是否可以轻松扩展带有pragma的前端或绑定新的前端而无需修改Whirl IR(这是SUIF的问题)?
据我所知,open64在许多商业和学术项目中得到广泛应用(UPC、AMD、Nvidia、Tensilica),但看起来有许多分支(2003年后不断增长),每个分支都有其自己的特点和限制。此外,没有固定的开发者社区和环境或支持,与llvm相比,文档几乎不存在,而且编译器的发展方向并不简单。
许可证方面也存在差异,其中llvm更符合BSD许可证样式,而open64基于GPL。