我正在研究堆棧機器的編譯器(特別是CIL),並將代碼解析爲基本塊的圖形。從這裏我正在尋找SSA的方法,但它不太好。我的第一次嘗試(同時使用平面列表而不是圖)是迭代代碼並保留一堆SSA id(即分配目標),當我產生一個任務時推送它們,當它彈出時彈出他們被使用。這對於單個基本塊來說工作得很好,但我根本無法弄清楚如何處理生成Φ函數。堆棧機器代碼的SSA
我一直在徘徊的想法是將堆棧位置附加到SSA ID,然後在代碼路徑收斂時查看堆棧上仍然存在的內容,但這看起來不像Right Way(TM)做事。
是否有一個簡單的算法來跟蹤跨多個代碼路徑的堆棧操作並確定它們收斂時的衝突?
編譯器曾經有過什麼?我正在考慮做同樣的事情。 – 2014-03-13 21:02:44