Community Translation - Optimization Level of SOFTUNE C Compiler in FR Family FR81S MCUs – KBA218675

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi,               

I would like to translate KBA218675 KBA into Japanese.

Please confirm to my work.

Thanks,

Kenshow

0 Likes
2 Replies
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi, Kenshow-san

Confirm to work this KBA.

Thanks

Jenna

Jenna Jo
0 Likes
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi Jenna-san,

                                

Japanese translation was over.
Please check below.

Original KBA:

Optimization Level of SOFTUNE C Compiler in FR Family FR81S MCUs – KBA218675

Thanks.

Kenshow

==============================

タイトル: FRファミリFR81S MCUのSOFTUNE Cコンパイラの最適化レベル – 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)のインライン展開が実装されています。

==============================

04-August-2020

  Kenshow

0 Likes