最適化レベル
コンパイラでは、さまざまな最適化のレベルをサポートしています。 以下の表は、各レベルで一般的に実行される最適化の一覧です。
Optimization | None (best debug support) | Low | Medium | High (balanced) | To override |
|---|---|---|---|---|---|
Dead code elimination | ✔ | ✔ | ✔ | ✔ | — |
Redundant label elimination | ✔ | ✔ | ✔ | ✔ | — |
Redundant branch elimination | ✔ | ✔ | ✔ | ✔ | — |
Variables only live for as long as they are needed | — | ✔ | ✔ | ✔ | — |
Code hoisting | — | — | ✔ | ✔ | — |
Common sub-expression elimination | — | — | ✔ | ✔ | |
Live-dead analysis and optimization | — | — | ✔ | ✔ | — |
Redundant computation elimination | — | — | ✔ | ✔ | — |
Static clustering | — | — | ✔ | ✔ | |
Value-based optimizations | — | — | ✔ | ✔ | — |
Value propagation and simplification | — | — | ✔ | ✔ | — |
Code motion | — | — | ✔ | ✔ | |
Peephole optimization | — | — | ✔ | ✔ | — |
Cross jumping | — | — | — | ✔ | |
Function inlining | — | — | — | ✔ | |
Instruction scheduling | — | — | — | ✔ | |
Loop unrolling | — | — | — | ✔ | |
Type-based alias analysis | — | — | — | ✔ |
注記
一部の最適化は、個別に有効化/無効化が可能です。詳細については、変換の微調整を参照してください。
最適化レベルを高くするとコンパイル時間が長くなることがあり、また、生成されたコードとソースコードの関係がわかりにくくなるため、デバッグも困難になります。たとえば、最適化レベルの低、中、高の場合、変数がスコープ全体を通して有効とは限らないため、変数の格納に使用されたプロセッサレジスタは、最後に使用された状態のままで再使用される可能性があります。このため、C-SPYのウォッチウィンドウには、スコープ全体を通した変数の値が表示できない、または間違った値を表示することがあります。コードのデバッグが困難な場合は、最適化レベルを下げてください。