いまのソース

こんなのソースを

fun foo( a, b )
{
	a + b
}

foo(1,4) * foo(5,7);

コンパイルすると

; ModuleID = 'test'
@format0 = internal constant [4 x i8] c"%d\0A\00"

declare i32 @printf(i8*, ...)

define void @puti(i32 %arg0) {
    %format0_address = getelementptr [4 x i8]* @format0, i32 0, i32 0
    call i32 (i8*, ...)* @printf( i8* %format0_address, i32 %arg0 )
    ret void
}

define i32 @main() {
EntryBlock:
    %ret24 = call i32 @foo( i32 1, i32 4 )
    %ret33 = call i32 @foo( i32 5, i32 7 )
    %reg34 = mul i32 %ret24, %ret33
    call void @puti( i32 %reg34 )
    ret i32 0
}

define internal i32 @foo(i32 %arg_a, i32 %arg_b) {
EntryBlock:
    %reg12 = add i32 %arg_a, %arg_b
    ret i32 %reg12
}

こうなる。(toplevel=main)