コンパイラ
上のコードをSSA形式にすると、if文の後で「x3 = φ(x1, x2)」のような式が入る。このφ関数の働きとして正しいものはどれか。
if (c) x = 1;
else x = 2;
y = x + 3;
- Ax1とx2のうち、大きい方の値を選んで返す
- Bx1とx2を足した値を計算して返す
- C通ってきた道に応じて、x1かx2を選ぶ
答えと解説を見る
正解:C. 通ってきた道に応じて、x1かx2を選ぶ
SSA形式では、then側の代入をx1、else側の代入をx2と別の名前にするので、合流したあとのyの計算でどちらのxを使えばよいかを表す必要があります。φ関数は、直前にthen側から来たならx1、else側から来たならx2を選ぶという、合流点での値の選択を表す記号です。実際の機械語にはφ関数の命令はなく、最後にレジスタのコピーなどに置き換えます。値の大小や和とは関係ありません。
- A. 値の大小で選ぶわけではありません。
- B. 値を足すわけではありません。
- C. 正しい。通ってきた道に応じて値を選びます。