将抽象语法树表达式转换为 SSA 基本块需要以线性顺序写出表达式中的所有操作,例如x * y + 1
转换为包含*
and的操作列表+
。
通常在操作列表中包含变量和文字提取吗?即上面应该产生一个长度为2或5的列表吗?
一方面,将全局变量或常量的值加载到寄存器中是最终必须安排好的操作。
另一方面,决定哪些值将存在于寄存器中通常是在从 SSA 形式转换期间或之后完成的。
另一方面,在线性序列中包含原子值意味着您可以通过遍历基本块和操作来回答诸如“此函数访问哪些全局变量”之类的问题,而不必遍历每个操作的参数。
还有其他我遗漏的注意事项吗?
澄清一下:局部变量名称通常在 SSA 中消失(不需要它们,您可以直接使用指向生成值的操作的指针)。我正在考虑仍然需要名称的东西 - 常量、全局变量名称、地址已被占用的局部变量等。