【发布时间】:2020-11-09 01:16:18
【问题描述】:
我一直在学习 ssa(静态单一赋值形式),我得到了以下插入了 phi 函数的图表,但该图表尚未重命名:
我不得不重命名变量,这就是我得到的:
我很不确定这是否正确。我是否正确重命名了变量?这是最小的ssa吗?我正在使用here(Cytron 等人的论文)中的这个算法来重命名变量。请帮忙! :)
【问题讨论】:
-
我不明白你得到的图表。为什么标签
L1在基本块的中间?这是否表明goto L1会跳到块的中间(跳过 phi 节点)?来自初始块的 t1 等的值是什么(没有给它们任何值)? -
@sepp2k -- 感谢您的关注 :) -- 不,这些没有任何意义......它们只是帮助我。
-
很抱歉,我不太确定如何接受您的回复。什么没有意义?在我看来,
goto L1是否跳过 phi 节点以及t1到t3的初始值是什么,都非常重要。就像t1_0 <- phi(t1_0, t1_1)行格式错误,因为t1_0没有在循环之前的块中定义,但我不能告诉你正确的版本是什么,因为我什至不明白t1 <- phi(t1, t1)是什么一开始就应该这样做。 -
@sepp2k -- 我的意思是 goto 和标签(
goto L1和标签L1)。 -
另外,
t1_0 <- phi(t1_0, t1_1)不正确吗?
标签: graph compiler-construction compiler-optimization control-flow-graph ssa