0: 什么是ssaSSA 形式是在 20 世纪 80 年代末提出的。从那时起,它在编译器中被广泛使用,因为它能够简化数据流分析和优化过程。例如,如果中间表示(IR)采用 SSA 形式,那么在循环中识别公共子表达式会变得更加容易。SSA 的一个基本特性是它建立了定义-使用(def-use)链和使用-定义(use-def)链:对于一个定义,你可以知道它的所有使用位置(def-use);对于每一个使用,你可以知道其唯一对应的定义(use-def)。这些信息在很多优化中都会被使用,例如常量传播(constant propagation):如果某个定义被确定为常量,那么该值的所有使用点都可以很容易地替换为该常量。在构造 SSA 形式时,Cytron 等人(1989)提出的算法非常流行,并且也被 LLVM 所采用。当然,也有其他算法被提出。一个早期的观察是:如果源语言中没有goto语句,这些算法会变得更加简单。1. nir_lower_variable_initializers 含义: 把变量“声明时的初始化”拆成显式的赋值指令(store),并移动到函数开头执行。