SSA(静态单赋值)
Last updated
Last updated
Static Single Assignment(SSA)是一种特殊的三地址代码,其所有变量在代码中只被赋值一次。
基本构造思路:
为每个变量维护一个计数器
从函数入口开始遍历函数体
遇到变量赋值时,为其生成新名字,并替换
通常只针对函数内的变量(即局部变量)计算SSA,全局变量的SSA在实际当中难以计算。
在分支汇合处插入φ语句,对于同一个变量x在不同路径中被赋值的情况,使用xi=φ(xj, xk, ...)来合并不同的赋值。
循环被翻译成分支与跳转语句的组合,直接按照相应语句的方式处理。
每个变量只被赋值一次,相当于都变成const变量
简化了数据流分析和某些优化
使得定义-使用链(def-use chain)易于计算,定义-使用链关联每个变量的定义(赋值)及其相应的使用,包含许多分析和优化所需的关键信息,SSA形式中,定义-使用关系非常清晰,且可以线性复杂度进行计算。