Skip to main content

IAR Embedded Workbench for Arm 10.10.x

最適化レベル

このセクションの内容:

コンパイラでは、さまざまな最適化のレベルをサポートしています。 以下の表は、各レベルで一般的に実行される最適化の一覧です。

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

—

—

✔

✔

‑‑no_cse

Live-dead analysis and optimization

—

—

✔

✔

—

Redundant computation elimination

—

—

✔

✔

—

Static clustering

—

—

✔

✔

‑‑no_clustering

Value-based optimizations

—

—

✔

✔

—

Value propagation and simplification

—

—

✔

✔

—

Code motion

—

—

✔

✔

‑‑no_code_motion

Peephole optimization

—

—

✔

✔

—

Cross jumping

—

—

—

✔

‑‑no_cross_jump

Function inlining

—

—

—

✔

‑‑no_inline

Instruction scheduling

—

—

—

✔

‑‑no_scheduling

Loop unrolling

—

—

—

✔

‑‑no_unroll

Type-based alias analysis

—

—

—

✔

‑‑no_tbaa

注記

一部の最適化は、個別に有効化/無効化が可能です。詳細については、変換の微調整を参照してください。

最適化レベルを高くするとコンパイル時間が長くなることがあり、また、生成されたコードとソースコードの関係がわかりにくくなるため、デバッグも困難になります。たとえば、最適化レベルの低、中、高の場合、変数がスコープ全体を通して有効とは限らないため、変数の格納に使用されたプロセッサレジスタは、最後に使用された状態のままで再使用される可能性があります。このため、C-SPYのウォッチウィンドウには、スコープ全体を通した変数の値が表示できない、または間違った値を表示することがあります。コードのデバッグが困難な場合は、最適化レベルを下げてください。