【问题标题】:Differences between open64 versus llvm compilersopen64 与 llvm 编译器之间的差异
【发布时间】: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


    【解决方案1】:

    问:whirl 也是 SSA 答:没有,但 Open64 有 SSA 管理器 答:不会,但今年 Path64 将采用 SSA Manager 方法或将所有优化转换为 SSA 感知

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

    Q: 有没有像 llvm 这样的模块化设计 答:(根据意见,我有偏见)每个阶段都被清晰地划分,所以它有点模块化,但不像你在 llvm 中找到的那样。请注意,我怀疑此时您是否可以关闭 llvm 中的某些内容而不会产生太大影响。因此,从研究人员的角度来看,隔离测试单一类型的优化可能会/可能不会更容易。

    Q:开发pass并插入工具链是否容易? 答:是/否 - LLVM 在文档方面胜出,但 Path64 正在努力。有些代码比其他代码更容易跳转。如果您对编译器完全陌生,那么可以使用 LLVM 进行前端工作或源代码到源代码。如果你有经验并想开发更高级的优化 Path64 git://github.com/path64/compiler.git 是我推荐的。

    问:open64 是否支持 JITting? A:不,但你为什么要它? Path64 在静态编译方面最强,花费 200k 周期来 JIT 一些字节码几乎没有意义。

    问:前端呢? A: clang 将是 llvm-2.10 中的默认设置,但在此之前它们都使用 gcc 前端。有一个非公开项目采取铿锵发射 WHIRL。这让他们俩又一次平起平坐。

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

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

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

    许多公司内部都有很好的文档,但通常不会根据需要共享或提供。 (我是 irc 的 codestr0m,可能会分享我们在这方面取得的进展)

    编译器前进的一个方向。

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

    在许可方面也存在差异,其中 llvm 更符合 BSD 许可风格,而 open64 基于 GPL。

    抱歉,我不是律师,只要不妨碍我,我也不关心许可。

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2012-02-11
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多