open64与llvm编译器之间的差异

时间:2011-03-08 19:47:15

标签: compiler-construction comparison llvm

有人能指出open64和llvm之间的区别吗?

我知道open64使用旋转IR,它有5个阶段并且差别很大,因为每个阶段显着降低了机器的代码,而llvm有一个IR用于中级优化,后来降低到目标独立指令(dags)和依赖的。

1)旋转也是SSA,
2)并使用虚拟寄存器,
3) open64的模块化设计如llvm,
4)是否可以轻松开发并将其插入工具链?

两个编译器都擅长中级过程间优化和转换,但是 5) open64是否支持JITting或本机构建在框架中的任何类型的动态翻译?

在两种情况下,CG的质量或多或少都相似 6)前端怎么样,是否可以在不修改Whirl IR的情况下轻松扩展pragma或绑定新的那些(这是SUIF的问题)?

据我所知,open64在许多商业和大学项目(UPC,AMD,Nvidia,Tensilica)中被广泛使用,但它看起来有很多分支(2003年以后增长)并且每个都有它自己的功能和限制。此外,没有固定的开发人员社区和环境或支持,与llvm相比,文档几乎不存在,并且简单地说,编译器没有简单的方向。

在llvm与BSD许可方式匹配更多且open64基于GPL的许可方面也存在差异。

1 个答案:

答案 0 :(得分:3)

问:旋转也是SSA 答:不,但Open64有SSA Manager 答:不,但Path64将采用SSA Manager方法或将所有优化转换为SSA意识到今年

问:它是否使用虚拟寄存器 答:在Path64 / Open64中,在cg阶段之前不进行最终的寄存器分配

问:它是否具有像llvm这样的模块化设计 答:(取决于意见而且我有偏见)每个阶段都是干净利落的,所以它有些模块化,但与llvm中找不到相同的程度。请注意,我怀疑在这一点上你可以关闭llvm中的某些事情而不会产生太多影响。因此,从研究人员的角度来看,测试单一类型优化的隔离可能/可能并不容易。

问:开发并将其插入工具链是否容易? 答:是/否 - LLVM赢得了文档,但Path64正在努力。有些代码比其他代码更容易进入。如果您对编译器完全不熟悉,那么从事前端工作或源到源与LLVM一起使用。如果您有经验并希望开发更高级的优化Path64 git://github.com/path64/compiler.git是我推荐的。

问:open64是否支持JITting? 答:不,但你为什么要这样呢? Path64在静态编译方面最强,在JIT上花费200k个周期,一些字节代码很少有意义。

问:前端怎么样? 答:clang将是llvm-2.10中的默认值,但在此之前它们都使用gcc前端。有一个非公开的项目可以让铿锵声发出WHIRL。这使他们再次处于平衡状态。

  
    

小修正 - LLVM IR与CG IR更具可比性,而不是真正的中级WHIRL。     在两种情况下,看起来CG的质量或多或少都相似。     我会说这是一个完全错误的假设,我不会评论哪个更好,但会说它们大不相同

  

此外,没有固定的开发者社区和环境或支持

  
    

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

         

在许多公司内部都有很好的文档,但通常不会根据需要共享或提供。 (我是irc上的代码,可能会分享我们对此做出的进展)

  

编译器前进的一个方向。

  
    

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

在llvm与BSD许可方式匹配更多且open64基于GPL的许可方面也存在差异。

  
    

很抱歉,但我不是律师,只要它不妨碍我就不关心许可..