コード生成が出来るようになりました
とりあえず、コード生成が出来るようになりました。コード生成が正しいかどうかはこれから確かめます。
さっきの、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 }