CS153/hw6/llprograms/sp24_hw3/fibonacci.ll

27 lines
790 B
LLVM
Raw Normal View History

%arr = type [2 x i64]
@fib_arr = global %arr [i64 1, i64 0]
define i64 @main(i64 %argc, i8** %arcv) {
%1 = call i64 @rec_fibonacci(i64 5, i64 1)
ret i64 %1
}
define i64 @rec_fibonacci(i64 %n, i64 %curr) {
%check_done = icmp eq i64 %curr, %n
br i1 %check_done, label %end, label %recurse
recurse:
%pt1 = getelementptr %arr, %arr* @fib_arr, i32 0, i64 0
%pt2 = getelementptr %arr, %arr* @fib_arr, i32 0, i64 1
%1 = load i64, i64* %pt1
%2 = load i64, i64* %pt2
%3 = add i64 %1, %2
store i64 %3, i64* %pt1
store i64 %1, i64* %pt2
%curr2 = add i64 %curr, 1
%ret = call i64 @rec_fibonacci(i64 %n, i64 %curr2)
ret i64 %ret
end:
%rv_pt = getelementptr %arr, %arr* @fib_arr, i32 0, i64 0
%rv = load i64, i64* %rv_pt
ret i64 %rv
}