編譯器

關於SSA形式中介表示的特徵,下列何者正確?

  1. A對每個變數的指派在程式中恰好只有一次
  2. B所有變數都放在記憶體上,而不是暫存器
  3. C被改寫成完全不含條件分支指令的形式
查看答案與解析

正確答案:A. 對每個變數的指派在程式中恰好只有一次

在SSA形式中,會重新命名變數使每個變數只被指派一次,並在匯合點以φ函數選擇值。例如x被指派兩次時,會分成x1與x2,以明確區分使用的是哪一個。由於定義與使用的關係變得清楚,因此容易進行常數傳播與刪除無用程式碼等最佳化。分支由φ函數處理,所以並不是分支指令就此消失。變數也不是放在記憶體中,多半是作為暫存器的候選來處理。

  • A. 正確。重新命名使指派只有一次。
  • B. 這不是把變數放在記憶體中的形式。
  • C. 分支仍然保留,匯合點以φ函數處理。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 將上方程式碼轉為SSA形式後,if敘述之後會加入類似「x3 = φ(x1, x2)」的式子。關於此φ函數的作用,下列何者正確?
  2. 關於編譯器的常數摺疊(constant folding),下列哪個範例正確?
  3. 對上方程式碼反覆進行常數傳播與常數摺疊,最終會變成什麼樣的程式碼?
  4. 對上方程式碼進行共同子運算式消除時,下列說明何者正確?
  5. 在無用程式碼刪除(死碼消除)中被移除的對象,下列何者正確?

這個領域的比較