Open64構築メモ
Open64.net - Under Maintenance
Open64なるコンパイラがあることを知ったので、試しにビルドして
テストしてみたときのメモ。
ビルド前の修正
普通ではビルドできなかったので修正。
'osprey/ipa/local/Makefile.gbase'を以下のように修正。
'-CG:all_sched'というオプションが g++で認識されなかったので
削除しました。
#---------------------------------------------------------------------- # Temporary workaround #---------------------------------------------------------------------- -ipl_summarize_util.o: OPTIMIZER += -CG:all_sched=0 +ipl_summarize_util.o: OPTIMIZER +=
ビルド
fortranコンパイラをビルドしたら, internal errorに遭遇してしまったので,
無効化しました。
# ランタイムルーチン crti.o等を見つけられなかったので、LIBRARY_PATHの設定 % export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu # GCC同様, 別途ディレクトリを作って, configure, makeをしてください % mkdir build && cd build % ../configure --prefix=/home/syohei/local/open64 --disable-fortran % make -j2 % make install
テスト
Testgenの結果は以下の通り
------------------------------------------ Total : 35188 Passed Compile : 35188 (100.0 %) Failed Compile : 0 ( 0.0 %) Passed Execute : 35167 ( 99.9 %) Failed Execute : 21 ( 0.1 %) Test Start : Mon Oct 31 22:38:57 2011 Test Finish : Mon Oct 31 23:28:29 2011 ------------------------------------------
調べてみると以下のプログラムが '-O2'オプションで
期待する動作をしませんでした。
#include <stdio.h> long itest; int main(void) { unsigned Variable; itest = 0; Variable = -1; itest = -Variable; printf("itest=%ld, Variable=%d\n", itest, Variable); return 0; }
これの結果が以下のようになりました。
itest=-4294967295, Variable=-1
Variable(+4294967295)は '-'との計算が先に行われて(+1)、long型への変換が
行われるはずですが、これだと long型への変換(+4294967295)が行われて、
その後 '-'との計算(-4294967295)が行われているようです。
5.0ではなおっているんでしょうかね ?
普通使わないけど、わりとあるような気もするコードなので、
このバージョンはまだ使わない方がいいのかなと思いました。
追記(2011/NOV/11)
5.0がリリースされていたので試してみましたが、同じところでこけました。