边缘分割SSA的使用

Usage of edge-split SSA

代码的静态单一赋值 (SSA) 表示几乎但不完全规范;有两种风格,vanilla 和 edge-split,其中根据需要插入额外的节点以使每个循环只有一个后边。理由:添加边缘分割约束使某些优化稍微容易一些。

我真正想知道的是边缘分割约束是否总体上值得拥有,但这是一个判断电话,所以对于一个具体的事实问题:

以下使用 SSA 的知名编译器是否使用边分割约束?

到目前为止的调查:

这表明 LLVM 使用边缘分割:http://llvm.org/doxygen/LoopSimplify_8cpp.html#a209bb6a782608a71aa8ec5075970caa3

同样去: https://golang.org/src/cmd/compile/internal/ssa/critical.go