编程语言的中间表示

SSA

  • SSA(Static Single Assignment,静态单一赋值)
    • 静态 –> 只依赖于代码(Code)或文本(Text)
    • 单一 –> 单一名称
    • 赋值 –> 比如y = x + 1
  • SSA的应用
    • GCC、LLVM、Java虚拟机HotSpot、JavaScript V8引擎
    • 即时(Just-In-Time,JIT)编译器,用于Java的字节码、.NET的MSIL、LLVM的bitcode
  • SSA的例子
    • 同一变量的不同赋值,使用不同名称
    • 控制流(Control Flow)使用Phi函数表示
// Non-SSA
x = input()
if (x == 42)
    y = 1
else
    y = x + 2
print(y)

// SSA
x = input()
if (x == 42)
    y1 = 1
else
    y2 = x + 2
y3 = Phi(y1, y2)
print(y3)