基本ブロック
コードのリストから基本ブロックを生成するアルゴリズムは単純である。コードをスキャンし、ブロックの開始や終端となる命令すなわち「ブロックの境界」をマークする。マークした境界ごとにリストを切り分ければ、基本ブロックができる。この方法は、公式な定義では「最長」の制御ブロックを生成するとは限らないが、通常十分(最長の基本ブロックとは、隣接の基本ブロックを、定義を侵すことなく取り込むことができないものを指す)である。
基本ブロックを終了させる命令には以下のものがある:
無条件、あるいは条件分岐命令、直接分岐も間接分岐も含む
呼び出し元の手続きへのreturn
例外処理を発生させうる命令
復帰しない関数は基本ブロックの終端になる。たとえば、例外や特別な呼び出しを発生するC言語の longjmp や exit 関数などがある
基本ブロックを開始させる命令には以下のものがある:
手続きや関数のエントリーポイント
ジャンプや分岐の対象
条件分岐命令の後の、分岐しなかった場合のコード
例外を発生させる命令の後のコード
例外ハンドラ
制御が基本ブロックの最後を通過することはないため、ブロックの境界は、基本ブロックを見つけた後に修正しなければならない場合もある。特に、分岐しなかった場合のコードは二方向の分岐に変換し、例外を発生させる関数呼び出しには無条件分岐を付き足なければならない。このため他のブロックの先頭にラベルをつける必要が生じる場合もある。