gcc8以前と比較して、gcc9はバイナリ生成部分が更新されているようです。 既存のコンパイラのバイナリ生成に不満を持ったため、gcc9.1.0をビルドすることにしました。
前回gcc8.2.0をソースコードからコンパイルしました。 その時の知見が生かせたので、今回はスムーズにコンパイルできました。 道しるべとして今回も記録しておきます。
今回も3stageビルドを行いましたが、意味がなかったような気がします。
3stageビルドを無効化する場合、--disable-multilib
の横に--disable-bootstrap
を付けます。
mkdir build_gcc91_stuff cd build_gcc91_stuff/ wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz tar xf gcc-9.1.0.tar.gz cd gcc-9.1.0 ./contrib/download_prerequisites cd .. mkdir build cd build/ ../gcc-9.1.0/configure --prefix=/home/lpha/gcc91 --enable-languages=c,c++ --disable-multilib make -j 6 BOOT_CFLAGS='-march=native -O3' make install
バイナリ生成の違い
詳しく解析したわけではないのでよくわからないですが、以下の既存の系列とは違ったバイナリ生成を行うようです。
- gcc8以前
- clang全て
定数との整数演算命令の最適化は、clangより弱いままです。しかし、総合的な最適化力はclangより高そうに見えます。特に、機械語命令の順番がいい感じになっています。
リリースノートには、switch
文の最適化をいい感じにしたとか書いてありました。