我正在執行SSA構建我正在編寫一個編譯器。在SSA算法中有一些我不明白的地方(使用Java編寫的the Cytron paper和現代編譯器實現,A.W.Appel的第二版)。如果一個變量y
是在一個直線控制流路徑中第一次(和使用過)定義的,但從未在另一條平行路徑中定義。我是否必須在連接點處插入PHI函數(定義爲y
的塊的優勢邊界)?靜態單一賦值:並非所有可能的路徑都定義了一個變量 - 如何插入PHI?
x = 1; // A
if (P) // A
y = x + 1; // B
y = y + 1; // B
x = x + 1; // C
return; // C
例如,在塊B中有y
的第一個定義。我需要在程序段C的開始插入一條PHI指令,有兩個操作數(每個輸入控制流程路徑)?然後在SSA重命名:我如何命名來自路徑A -> C
(不是通過B)的操作數,其中y
從未被定義?
Entry --- A --------- C --- Exit
\ /
\-- B --/
沒有,如果變量從未逃脫它定義塊,那麼你並不需要的phi-功能。我不明白你爲什麼認爲你需要一個? –