FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

Interfaceのコンパイラ入門のビルドをやってみた(memsetで文句を言われたときの対処法)

以前MIPSコンパイラでCoremarkをコンパイルしようとしたときに、-O3を使うと何故かmemsetが登場してリンク時エラーになる件について、 いろいろ試していたら、以下のオプションで消えるようになった。

-fno-tree-loop-distribute-patterns

これを追加すると-O3オプションでコンパイルできるようになる。そして生成されたバイナリを見てみると、-O2オプションでコンパイルした場合と若干異なっている(大勢は変わっていないみたいだが) Coremarkの30万命令程度のプログラムで、数千命令程度の命令数削減?

$ tail coremark.rob.log coremark.rob2.log

※ こちらが -O2 オプションのもの
==> coremark.rob.log <==
    358881 [80001b7c] 00001021 addu  $v0, $zero, $zero         (30,58) :(36,02) $zero=>00000000 $zero=>00000000 $v0<=00000000
    358882 [80001b80] 8fbf0064 lw    $ra, 0x64($sp)            (23,41) :(37,03) $sp=>7f003fa0 $ra=>80001b7c (7f004004)=>bfc00094 $ra<=bfc00094
    358883 [80001b84] 8fb00060 lw    $s0, 0x60($sp)            (53,02) :(38,04) $sp=>7f003fa0 $s0=>00000000 (7f004000)=>00000000 $s0<=00000000
    358884 [80001b88] 03e00008 jr    $ra                                        $ra=>bfc00094 $zero=>00000000
    358885 [80001b8c] 27bd0068 addiu $sp, $sp, 0x68            (45,42) :(39,05) $sp=>7f003fa0 $sp=>7f003fa0 $sp<=7f004008
    358886 [bfc00094] 42000020 wait
==========================================================
                      Simulation Stop
              PC = bfc00094, InstCount = 358886
==========================================================

※ こちらが -O3 -fno-tree-loop-distribute-patterns オプションのもの。
==> coremark.rob2.log <==
    352532 [80002e5c] 8fbf006c lw    $ra, 0x6c($sp)            (02,07) :(26,56) $sp=>7f003f98 $ra=>80002e58 (7f004004)=>bfc00094 $ra<=bfc00094
    352533 [80002e60] 8fb10068 lw    $s1, 0x68($sp)            (29,23) :(27,57) $sp=>7f003f98 $s1=>00000000 (7f004000)=>00000000 $s1<=00000000
    352534 [80002e64] 8fb00064 lw    $s0, 0x64($sp)            (58,49) :(28,58) $sp=>7f003f98 $s0=>00000000 (7f003ffc)=>00000000 $s0<=00000000
    352535 [80002e68] 03e00008 jr    $ra                                        $ra=>bfc00094 $zero=>00000000
    352536 [80002e6c] 27bd0070 addiu $sp, $sp, 0x70            (17,15) :(29,59) $sp=>7f003f98 $sp=>7f003f98 $sp<=7f004008
    352537 [bfc00094] 42000020 wait
==========================================================
                      Simulation Stop
              PC = bfc00094, InstCount = 352537
==========================================================

サイクル性能にどの程度影響するのか調査するために、RTLを流してみるとデッドロックした。。。 あー、昨日のMUL命令最適化の不備が残っていて MUL命令が不定を出している。。。