いまのソース
こんなのソースを
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)