命令スケジューリング
命令スケジューリング(めいれいスケジューリング、英: Instruction scheduling)は、コンパイラ最適化において考慮されるもののひとつで、具体的な内容はターゲットのマイクロアーキテクチャに依るが、より効率的にコードが実行されるよう、演算結果に影響を与えない範囲で命令の順序を入れ替え、より良い順序にするものである。例えば命令パイプラインの深いプロセッサなどで、そのプロセッサの命令レベルの並列性を可能な限り引き出すことが目標となる。
具体例としては、例えば、コードの意味を変えずに以下のようなことを実現する。
順序を並べ替えてパイプラインのストールを防ぐ
不正な、あるいは意味的にあいまいな操作(命令パイプラインのタイミング問題や、同期が取れていないハードウェア資源など)を避ける
パイプラインのストールは、構造的なハザード(プロセッサのハードウェア資源の制限)、データハザード(ある命令の出力が他の命令の実行に必要)、制御ハザード(分岐)によって引き起こされる。