Path: sran265!katsu From: katsu@sran14.sra.co.jp (Katsuhiro Watanabe) Message-ID: Date: 24 Sep 91 23:34:12 Organization: Software Research Associates, Inc.,Japan In-reply-to: hikichi@srarc2's message of 19 Sep 91 09:28:32 GMT Newsgroups: sra.comp.misc Subject: Re: A new C Compiler Distribution: sra References: <1991Sep19.092832.793@sra.co.jp> gcc の優秀さとは関係ないんですが、 記事 <1991Sep19.092832.793@sra.co.jp> で hikichi@srarc2 (Nobuyuki Hikichi) さんいはく > for (i = 0; i < 10; i++) > a[i] = i; > motorola 68020 用の a new c compiler では > cisc news/cc -O でコード生成をしたところ > gcc -O では > 加えて -fstrength-reduce をつけると  せっかく色々ならんだので、Sun 3/160(SUN OS 4.1) の cc の結果も 出してみます。主な部分だけ示せば、cc -O の場合 _f: link a6,#-12 moveq #0,d1 movl #_a,a0 movl #_a+40,d0 L77003: movl d1,a0@+ addql #1,d1 cmpl d0,a0 jcs L77003 unlk a6 rts のような感じです。-O3 だと、 _f: link a6,#-12 moveq #0,d1 movl #_a,a1 movl #_a+40,d0 lea a1@(12),a0 cmpl d0,a0 jcc L77010 L77003: movl d1,a1@+ addql #1,d1 movl d1,a1@+ addql #1,d1 movl d1,a1@+ addql #1,d1 movl d1,a1@+ addql #1,d1 lea a1@(12),a0 cmpl d0,a0 jcs L77003 jra LY00000 L77010: movl d1,a1@+ addql #1,d1 LY00000: cmpl d0,a1 jcs L77010 unlk a6 rts のように、ループアンローリング?でしたっけ?(メモリ転送をまとめたり、 分岐を減らしたり、キャッシュの利用を効率的にしたり、パイプラインを 乱さないようにしたりなどの様々な目的のために、ループを部分的に 展開すること………というやつのことを言いたいんです)までやっています。 (RISC 系のコードではよく見かけますよね。)  ループアンローリングはシステム構成によって最適な方策が異なると いわれているそうですが、Sun の cc は 当然 Sun の機械でだけ 速ければよいので、その方策までコンパイラーが決めてやってしまう といったところなんでしょうか? -- ----____----____ 渡邊克宏@ソフトウェア工学研究所(四谷)