23 lines
479 B
LLVM
23 lines
479 B
LLVM
define i64 @gcd_rec(i64 %a, i64 %b) {
|
|
%1 = alloca i64
|
|
store i64 %a, i64* %1
|
|
%cmp = icmp ne i64 %b, 0
|
|
br i1 %cmp, label %neq0, label %eq0
|
|
eq0:
|
|
ret i64 %a
|
|
neq0:
|
|
%2 = load i64, i64* %1
|
|
%3 = sub i64 %2, %b
|
|
store i64 %3, i64* %1
|
|
%cmp1 = icmp sgt i64 %3, %b
|
|
br i1 %cmp1, label %neq0, label %recurse
|
|
recurse:
|
|
%4 = call i64 @gcd_rec(i64 %b, i64 %3)
|
|
ret i64 %4
|
|
}
|
|
|
|
define i64 @main(i64 %argc, i8** %arcv) {
|
|
%1 = call i64 @gcd_rec(i64 424, i64 34)
|
|
ret i64 %1
|
|
}
|
|
|