gpt4 book ai didi

compiler-construction - SSA用于堆栈机代码

转载 作者:行者123 更新时间:2023-12-02 07:01:02 25 4
gpt4 key购买 nike

我正在为堆栈机(特别是CIL)编译器,并且已将代码解析为基本块图。从这里开始,我希望将SSA应用于这些方法,但是效果不是很好。我的第一个尝试(使用平面列表而不是图形时)是遍历代码并保留一堆SSA ID(即用于分配目标),在生成任务时将其插入,在生成任务时将其弹出他们被使用了。对于单个基本块来说,这很好用,但是我根本不知道如何处理产生Φ函数。

我一直在提出的想法是将堆栈位置附加到SSA ID,然后查看代码路径收敛时堆栈中仍然存在的内容,但这似乎不像做事的正确方法(TM)。

是否有一种简单的算法来跟踪跨多个代码路径的堆栈操作并确定冲突收敛时的冲突?

最佳答案

您需要查看在一个节点(基本块)上会聚的多个SSA ID 的集。保持中间的基本块结构,这样您就可以轻松使用(例如查询)块中的所有标识符。

我不确定撞车是什么意思,但我想您想解决类似问题

 if (bExp) if (bExp)
x := 1 x1 := 1
else SSA: else
x := 2 x2 := 2
y := x; y := Phi(x1,x2)

也就是说,您想要在这里放置披披。意识到可执行代码中没有Phi!使用y取决于(取决于)x1或x2的信息,可以在下一步中重写它。例如,在以内存为中心的表示中,Phi(x1,x2)告诉您x1和x2应该是同一个内存位置的两个别名,即y的别名。 Phi只是将信息联系在一起。
if (bExp)
stackframe[y_index] = 1 (y_index being some offset)
else
stackframe[y_index] = 2
nop

希望这个对你有帮助!

关于compiler-construction - SSA用于堆栈机代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/593358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com