CS153/hw6/llprograms/euclid.ll

24 lines
479 B
LLVM
Raw Normal View History

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
}