37 lines
No EOL
819 B
LLVM
37 lines
No EOL
819 B
LLVM
declare i8* @ll_ltoa(i64)
|
|
declare void @ll_puts(i8*)
|
|
|
|
%arr = type [10 x i64]
|
|
|
|
@nums = global %arr [ i64 5, i64 1, i64 4, i64 2, i64 3, i64 6, i64 10, i64 9, i64 7, i64 8 ]
|
|
|
|
define void @iter(void(i64)* %f, %arr* %l) {
|
|
%1 = alloca i64
|
|
store i64 0, i64* %1
|
|
br label %loop
|
|
loop:
|
|
%i = load i64, i64* %1
|
|
%valid = icmp slt i64 %i, 10
|
|
br i1 %valid, label %body, label %post
|
|
body:
|
|
%idx = load i64, i64* %1
|
|
%p = getelementptr %arr, %arr* %l, i32 0, i32 %idx
|
|
%n = load i64, i64* %p
|
|
call void %f(i64 %n)
|
|
%newidx = add i64 %idx, 1
|
|
store i64 %newidx, i64* %1
|
|
br label %loop
|
|
post:
|
|
ret void
|
|
}
|
|
|
|
define void @print(i64 %x) {
|
|
%1 = call i8* @ll_ltoa(i64 %x)
|
|
call void @ll_puts(i8* %1)
|
|
ret void
|
|
}
|
|
|
|
define void @main(i64 %argc, i8** %arcv) {
|
|
call void @iter(void(i64)* @print, %arr* @nums)
|
|
ret void
|
|
} |