代码的静态单一分配 (SSA) 表示几乎但不完全规范;有两种风格,vanilla 和edge-split,其中根据需要插入额外的节点,以使每个循环只有一个后边缘。基本原理:添加边缘分割约束使某些优化更容易一些。
我真正想知道的是边缘分割约束是否总体上值得拥有,但这是一个判断要求,所以对于一个具体的事实问题:
以下使用 SSA 的知名编译器是否使用边缘分割约束?
- 海合会
- 去
- LLVM
- 蜘蛛猴
- V8
代码的静态单一分配 (SSA) 表示几乎但不完全规范;有两种风格,vanilla 和edge-split,其中根据需要插入额外的节点,以使每个循环只有一个后边缘。基本原理:添加边缘分割约束使某些优化更容易一些。
我真正想知道的是边缘分割约束是否总体上值得拥有,但这是一个判断要求,所以对于一个具体的事实问题:
以下使用 SSA 的知名编译器是否使用边缘分割约束?
从目前的调查来看:
这表明 LLVM 使用边缘分割: http: //llvm.org/doxygen/LoopSimplify_8cpp.html#a209bb6a782608a71aa8ec5075970caa3
同样去: https ://golang.org/src/cmd/compile/internal/ssa/critical.go