Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

FRファミリFR81S MCUのSOFTUNE Cコンパイラの最適化レベル - KBA218675 - Community Translated (JA)

FRファミリFR81S MCUのSOFTUNE Cコンパイラの最適化レベル - KBA218675 - Community Translated (JA)

GeethaP_31
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by NoTa_4591161 Expert       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を含む)。

  • ループ展開ループ展開は、ループ回数を減らし、実行速度を向上させます。ただし、オブジェクトのサイズが大きくなります。したがって、オブジェクトのサイズが重要な場合は、この最適化を使用しないでください。

                                                       

展開する前fori = 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を指定した場合と同じ)標準関数(strcpystrcmpstrlenmemcpymemset)のインライン展開が実装されています。
0 件の賞賛
335 件の閲覧回数
寄稿者