gcc9.1.0をソースコードからコンパイルした

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文の最適化をいい感じにしたとか書いてありました。