ちょと必要があってcoinsっていうコンパイラの最適化器を作る(補助をしてくれる)ソフトをいじってます.

coinsについてはこちら

■本家サイト
http://www.coins-project.org/

本プロジェクトでは、新しいコンパイラ方式を容易に実験、評価できるような共通インフラストラクチャ(COINS: A compiler infra structure)を開発した.その基本は、高水準中間表現(HIR: High level intermediate representation) と低水準中間表現(LIR: Low level intermediate representation) からなり、ソース言語からHIRへの変換部、HIRでの各種最適化部、HIRからLIRへの変換部、LIRでの各種最適化部、LIRからマシン語への変換部を適当に組み合せることによってコンパイラを実現出来る.各部のモジュール独立性とマシン仕様記述に基づくコード生成部自動生成等により、最適化や新機種向けコード生成等の新機能の組込が容易にできる.

http://www.coins-project.org/の概要より抜粋

で,小手調べにインストールしてtestプログラムを走らせてベンチにかけてみる.

一応,環境を適当に

MacOSX 10.5.6
gcc 4.0.1
javac 1.5.0_16

まずはcoinsをDLしてsrcディレクトリ下に展開する.

あと,ややこしいのでこのディレクトリにcoinsとでも名前を付ける.

$ cp ~/Desktop/coins-1.4.4.2-en.jar ./src/
$ cd ~/src
$ jar -xvf coins-1.4.4.2-en.jar
$ ln -s coins-1.4.4.2-en coins
$ cd coins

次にtestプログラムを正しく走らせるべく一部のスクリプトを修正する.

まず,ヘッダを移動

$ cp ./lang/c/include/samples/*.h ./lang/c/include/

で,emacs(や好みのエディタ)で coins/test/c/testdriver.sh(連続テスト用スクリプト)とcoins/test/c/testprepare.sh を修正する.

# testdriver.shファイル292行目
if ! gcc -lm -o $GCCOUT $CCCOUT &>$GCCLOG
# を
if ! gcc -arch x86_64 -lm -o $GCCOUT $CCCOUT &>$GCCLOG

# 同282行目
if ! java coins.driver.Driver -coins:${TARGET}preprocessor='cpp -I../lang/c/include' -S -o $CCCOUT $i &>$CCCLOG
# を
if ! java -classpath . coins.driver.Driver -coins:${TARGET}preprocessor='cpp -I../lang/c/include' -S -o $CCCOUT $i &>$CCCLOG
# classpathが'.'なのは後述

# testprepare.shファイル
if ! gcc -lm -o $OUT $SRC
# を
if ! gcc -arch x86_64 -lm -o $OUT $SRC

と修正する.

んで,走らせる.

coinsのドライバはcoins/classes下にあり,先ほどクラスパスを'.'と指定したのでclassesディレクトリから実行する.

ので,まずディレクトリを移る.

test用ファイルは全部で806個程有り,全部かけてみるなら,こう

$ cd classes
$ chmod +x ../test/c/testdriver.sh
$ ../test/c/testdriver.sh -v -t x86_64-mac ../test/c/*/*.c

さすがに終了までに小一時間かかった.

でレポートを見ると

Compile error : 1 0%
Assemble error : 0 0%
Runtime error : 2 0%
Illegal result : 28 3%
Succeeded : 775 96%
Total : 806

なんかエラってますね.

coins/testdriver-yymmdd-HHMMSSディレクトリが作られてログが吐かれてますね.

../test/c/LangSpec/cTest1.c # Runtime error
../test/c/LangSpec/tpSizeofFunc.c # Illegal result
../test/c/Mix1/matMult3.c # Illegal result
...........以下略

で,飽きたので又明日!

一応最後に,小生はめんどくさがりなので,ここまでをmakeにしておく

# coins/classes/Makefile

testall:
    ../test/c/testdriver.sh -v -t x86_64-mac ../test/c/*/*.c

これでおk

続く...