LLVM2.7 Hackathon

LLVM2.7 Hackathon http://atnd.org/events/4295 参加してきました。

前々から実装したいと考えていたKonohaのコンパイラを実装してみました。
いろいろ考えたけど、処理系に組み込む形ではなく、パッケージの形で
提供してみました。

#!/usr/local/bin/konoha
using llvm.*;

int fib(int n) {
        if(n<3) return 1;
        return fib(n-1)+fib(n-2);
}

print fib(36);
$ time -p konoha -g test/fib.k 
[fib.k:9] 14930352
real 0.53 user 0.52 sys 0.01

llvmを使用しない場合は以下のような結果になります。

real 2.20 user 2.18 sys 0.00

GetElementPointerのAPIを使うと配列、構造体の要素に
アクセスすることができるので、これをうまく使うことで
計算することができます。

今回はIntの計算と関数呼び出しのみに対応しました。
そのうち、Floatの計算、オブジェクトの操作に対応して
いきたいと考えています。