編譯器
將上方程式碼轉為SSA形式後,if敘述之後會加入類似「x3 = φ(x1, x2)」的式子。關於此φ函數的作用,下列何者正確?
if (c) x = 1;
else x = 2;
y = x + 3;
- A在x1與x2之中選出較大的值並回傳
- B計算x1與x2相加的值並回傳
- C依照所經過的路徑,選擇x1或x2
查看答案與解析
正確答案:C. 依照所經過的路徑,選擇x1或x2
在SSA形式中,then側的指派為x1、else側的指派為x2,兩者名稱各異,因此匯合之後計算y時,必須表明該使用哪一個x。φ函數是表示匯合點上值的選擇的記號:若剛才是從then側過來就選x1,從else側過來就選x2。實際的機器碼中並沒有φ函數的指令,最後會替換為暫存器的複製等。它與值的大小或總和無關。
- A. 並非依值的大小來選擇。
- B. 並不是將值相加。
- C. 正確。依照所經過的路徑來選擇值。