2008-10-09
コード生成が出来るようになりました
とりあえず、コード生成が出来るようになりました。コード生成が正しいかどうかはこれから確かめます。
さっきの、foo, bar, bazはこんな感じに生成されます。
追記 見たら、全然正しくないです。まだまだ、苦労は続きそうです。
; ModuleID = 'yarv2llvm'
declare void @abort()
define i32 @""(i32) {
bb:
bb1: ; No predecessors!
ret i32 3649550
}
declare float @sqrtf(float)
define i32 @foo(i32) {
bb:
%1 = alloca float ; <float*> [#uses=4]
%2 = alloca float ; <float*> [#uses=5]
%3 = alloca float ; <float*> [#uses=5]
%4 = alloca float ; <float*> [#uses=6]
%5 = alloca i32 ; <i32*> [#uses=2]
%6 = alloca float ; <float*> [#uses=1]
%7 = alloca float ; <float*> [#uses=1]
%8 = alloca float ; <float*> [#uses=1]
bb1: ; No predecessors!
%9 = load float* %8 ; <float> [#uses=1]
store float %9, float* %4
%10 = load float* %7 ; <float> [#uses=1]
store float %10, float* %3
%11 = load float* %6 ; <float> [#uses=1]
store float %11, float* %2
%12 = load float* %4 ; <float> [#uses=1]
%13 = fcmp ueq float %12, 0.000000e+00 ; <i1> [#uses=1]
br i1 %13, label %bb3, label %bb2
bb2: ; preds = %bb1
%14 = load i32* %5 ; <i32> [#uses=1]
%15 = add i32 %14, 1 ; <i32> [#uses=1]
store i32 %15, i32* %5
%16 = load float* %3 ; <float> [#uses=1]
%17 = load float* %1 ; <float> [#uses=1]
%18 = fdiv float %16, %17 ; <float> [#uses=1]
store float %18, float* %3
%19 = load float* %2 ; <float> [#uses=1]
%20 = load float* %1 ; <float> [#uses=1]
%21 = fdiv float %19, %20 ; <float> [#uses=2]
store float %21, float* %2
ret float %21
bb3: ; preds = %bb1
%22 = load float* %4 ; <float> [#uses=1]
%23 = load float* %4 ; <float> [#uses=1]
%24 = mul float %22, %23 ; <float> [#uses=1]
%25 = load float* %3 ; <float> [#uses=1]
%26 = load float* %3 ; <float> [#uses=1]
%27 = mul float %25, %26 ; <float> [#uses=1]
%28 = add float %24, %27 ; <float> [#uses=1]
%29 = load float* %2 ; <float> [#uses=1]
%30 = load float* %2 ; <float> [#uses=1]
%31 = mul float %29, %30 ; <float> [#uses=1]
%32 = add float %28, %31 ; <float> [#uses=1]
%33 = call float @sqrtf(float %32) ; <float> [#uses=1]
store float %33, float* %1
%34 = load float* %4 ; <float> [#uses=1]
%35 = load float* %1 ; <float> [#uses=1]
%36 = fdiv float %34, %35 ; <float> [#uses=1]
store float %36, float* %4
}
define i32 @bar(i32) {
bb:
%1 = alloca i32 ; <i32*> [#uses=1]
bb1: ; No predecessors!
%2 = load i32* %1 ; <i32> [#uses=1]
%3 = add i32 %2, 1 ; <i32> [#uses=1]
ret i32 %3
}
define i32 @baz(i32) {
bb:
%1 = alloca float ; <float*> [#uses=1]
bb1: ; No predecessors!
%2 = load float* %1 ; <float> [#uses=1]
%3 = call float @sqrtf(float %2) ; <float> [#uses=1]
ret float %3
}
コメントを書く
トラックバック - http://d.hatena.ne.jp/miura1729/20081009/1223552973
リンク元
- 19 http://www.rubyist.net/~kazu/samidare/
- 8 http://www.google.co.jp/search?q=jemallocを読んでみる&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&client=firefox
- 3 http://d.hatena.ne.jp/keyword/LLVM
- 2 http://d.hatena.ne.jp/keyword/レポジトリ
- 2 http://www.google.co.jp/search?q=ruby/tk+アニメーション&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a
- 1 http://a.hatena.ne.jp/fujita-y/
- 1 http://blog-search.yahoo.co.jp/search?p=lisp&ei=UTF-8
- 1 http://d.hatena.ne.jp/gamella/20080329/1206760587
- 1 http://d.hatena.ne.jp/keyword/処理系
- 1 http://d.hatena.ne.jp/keyword/mmap