コンパイラ

基本ブロックの説明として正しいものはどれか。

  1. A途中に分岐の出入りがなく、必ず続けて実行される命令の並び
  2. B1つの関数の中に含まれる、すべての命令を1つにまとめたもの
  3. Cループの本体を何回分か並べて書き、繰り返しの回数を減らしたもの
答えと解説を見る

正解:A. 途中に分岐の出入りがなく、必ず続けて実行される命令の並び

基本ブロックは、入口が先頭だけ、出口が末尾だけの命令の並びで、一度実行が始まれば途中で抜けることも、途中から入ってくることもありません。分岐の飛び先になる命令や分岐命令の直後で区切って作ります。ブロックの中では実行の順番が決まっているので、局所的な最適化がしやすく、ブロックを節にした制御フローグラフで全体の流れを表します。関数全体は普通いくつもの基本ブロックからなり、ループ本体を並べるのはループ展開です。

  • A. 正しい。入口は先頭、出口は末尾だけの命令の並びです。
  • B. 関数全体は普通いくつもの基本ブロックからなります。
  • C. ループ本体を並べるのはループ展開です。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 制御フローグラフで、節と矢印が表しているものの組み合わせとして正しいものはどれか。
  2. SSA形式の中間表現の特徴として正しいものはどれか。
  3. 上のコードをSSA形式にすると、if文の後で「x3 = φ(x1, x2)」のような式が入る。このφ関数の働きとして正しいものはどれか。
  4. コンパイラの定数畳み込みの例として正しいものはどれか。
  5. 上のコードに定数伝播と定数畳み込みを繰り返し行うと、最終的にどのようなコードになるか。