コンパイラ

SSA形式の中間表現の特徴として正しいものはどれか。

  1. A各変数への代入がプログラム中でちょうど1回になる
  2. Bすべての変数が、レジスタではなくメモリ上に置かれる
  3. C条件分岐の命令を一切含まない形に書き直される
答えと解説を見る

正解:A. 各変数への代入がプログラム中でちょうど1回になる

SSA形式では、変数への代入が1回になるよう名前を付け替え、合流点ではφ関数で値を選びます。例えば x を2回代入するなら x1 と x2 に分け、どちらが使われているかを明確にします。定義と使用の関係がはっきりするため、定数伝播や不要コードの削除などの最適化がしやすくなります。分岐はφ関数で扱うので、分岐命令がなくなるわけではありません。変数がメモリに置かれる形でもなく、多くはレジスタの候補として扱われます。

  • A. 正しい。代入が1回になるよう名前を付け替えます。
  • B. 変数をメモリに置く形式ではありません。
  • C. 分岐はそのまま残り、合流点はφ関数で扱います。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 上のコードをSSA形式にすると、if文の後で「x3 = φ(x1, x2)」のような式が入る。このφ関数の働きとして正しいものはどれか。
  2. コンパイラの定数畳み込みの例として正しいものはどれか。
  3. 上のコードに定数伝播と定数畳み込みを繰り返し行うと、最終的にどのようなコードになるか。
  4. 上のコードに共通部分式の削除を行ったときの説明として正しいものはどれか。
  5. 不要コードの削除(デッドコード除去)で取り除かれるものとして正しいものはどれか。