Open64和LLVM编译器的区别

4
有人能指出open64和llvm之间的区别吗?
我知道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。
1个回答

3

Q: Whirl是否也是SSA? A:不是,但Open64有SSA管理器。 A:不是,但Path64将在今年采用SSA管理器方法或将所有优化转换为SSA感知。

Q: 它使用虚拟寄存器吗? A: 在Path64 / Open64中,直到cg阶段才进行最终寄存器分配。

Q: 它是否像LLVM一样具有模块化设计? A:(受观点影响,而我有偏见)每个阶段都有清晰的划分,因此它在某种程度上是模块化的,但与您在llvm中找到的程度不同。请注意,我怀疑此时您不能关闭llvm中某些东西,否则会有很多后果。因此,从研究人员的角度来看,测试单个优化类型的隔离可能更容易/也可能更困难。

Q: 开发一个pass并将其插入工具链是否容易? A: 是/否 - LLVM在文档方面无人能及,但Path64正在努力改进。有些代码比其他代码更容易理解。如果您完全不了解编译器,并且希望进行前端工作或源到源,请选择LLVM。如果您有经验并希望开发更高级的优化,则推荐使用Path64 git://github.com/path64/compiler.git。

Q: Open64是否支持JIT编译? A: 不支持,但为什么要这样做呢?Path64在静态编译方面最强大,在JIT一些字节码中花费200k周期很少有意义。

Q: 那前端呢? A: 在llvm-2.10中,clang将成为默认设置,但在此之前它们都使用gcc前端。有一个非公开项目,可以采用clang并发出WHIRL。这使它们再次处于同一水平线上。

小修正- LLVM IR更类似于CG IR,而不是中间级别的WHIRL。 看起来CG的质量在两种情况下差不多。 我会说这是完全错误的假设,我不会评论哪个更好,但会说它们存在本质上的不同。

此外,没有固定的开发人员社区、环境或支持。

#pathscale - irc.freenode.net(我们也有邮件列表,您的问题将得到解答)

许多公司内部拥有良好的文档,但通常不会共享或按需提供。(我在irc上的codestr0m,并且可能分享我们在这方面取得的进展)

编译器发展的一个方向。

对我们来说,存在一个方向,我们正在试图围绕它建立一个社区。

还有许可证方面的差异,其中llvm更符合BSD许可证样式,而open64基于GPL。

抱歉,但我不是律师,只要不妨碍我的工作,我就不关心许可证问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接