FRファミリFR81S MCUのSOFTUNE Cコンパイラの最適化レベル - KBA218675 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by NoTa_4591161 Version: **
Translation - English: Optimization Level of SOFTUNE C Compiler in FR Family FR81S MCUs – KBA218675
回答:
1. 最適化レベル0
最適化は行われません。このレベルは、-Oを指定しないことと同等です。
2. 最適化レベル1
最適化は、プログラムフローの詳細な分析に従って行われます。
- 分岐直後の削除
- 連続ブランチの削除
- 次の実行順序を変更します
最適化前 | 最適化後 |
A=x; | (削除) |
if (...) { | if (...) { |
A=y;{ | A=y; |
} else { | } else { |
B=z; | B=z; A=x; |
} | } |
- 共通数式の削除
最適化前 | 最適化後 |
t1 = a + b; | t1 = a + b; |
t2 = a + b; | t2 = t1; |
- 一般的な式の削除定数が計算できる場合は、コンパイル時に行われます
- 定数の伝播定数が置換する変数は定数で置き換えられます。
最適化前 | 最適化後 | |
a = b; | (削除) | /* この後に「a」を使用しない */ |
= a; | =0; | /* 「a」を「0」に置き換えます */ |
- 非実行文の削除実行されていない文がある場合、そのような文は生成されません。
- ループ内で変更されていない数式の移動ループ内で変更されていない数式は、ループの外に移動されます。
- コピーの伝播
最適化前 | 最適化後 | |
a = b; | (削除) | /* この後に「a」を使用しないでください*/ |
/* この間に「a」と「b」を定義しないでください */ | ||
= a; | = b; | / *「a」を「b」に置き換えます* / |
- 未使用の変数の削除
最適化前 | 最適化後 |
a = b; | (削除) |
/* この後に「a」を使用しないでください */ |
- 単純な置換の削除
最適化前 | 最適化後 |
a = b; | a = b; |
b = a; | (削除) |
- 計算の簡素化計算高速計算への置き換え。
最適化前 | 最適化後 |
a = b * 2; | a = b << 2; |
- 関数のインライン展開(-x funcを指定した場合と同じ)。
- 「スイッチケース」のテーブル分岐
- 命令スケジューリングの実装(-Kscheduleを指定することによって影響を受けるものと同じ)
- 遅延分岐命令の最適な使用法
- LD命令のインターロックを回避する
- アセンブラー命令の最適化
- レジスタの割り当て
3. 最適化レベル2このレベルは次のように最適化されます(最適化レベル1を含む)。
- ループ展開ループ展開は、ループ回数を減らし、実行速度を向上させます。ただし、オブジェクトのサイズが大きくなります。したがって、オブジェクトのサイズが重要な場合は、この最適化を使用しないでください。
展開する前 | for(i = 0; i <3; i ++){a = 0;} |
展開後 | a [0] = 0; a [1] = 0; a [2] = 0; |
4. 最適化レベル3最適化レベル2によって提供される機能に加えて、次の最適化機能が実行されます。ただし、変換時間は増加します。
- ループのループ展開には2つの出口があります
- ループのループ展開には、「if」文に分岐があります
- 最適化機能を繰り返します。
5. 最適化レベル4最適化レベル3によって提供される機能に加えて、次の最適化機能が実行されます。
- 算術演算の評価タイプの変更(-K EOPTを指定することによる影響と同じ)
- 標準関数の展開/変更(-K LIBを指定した場合と同じ)標準関数(strcpy、strcmp、strlen、memcpy、memset)のインライン展開が実装されています。