CS153/hw6/llprograms/sp22_hw3/collatz.ll
jmug 0c04936ccf Updated hw6 to a newer version
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
2025-01-24 21:23:08 -08:00

27 lines
No EOL
533 B
LLVM

define i64 @collatz(i64 %n) {
%cmp = icmp sgt i64 %n, 1
br i1 %cmp, label %then, label %ret0
then:
%4 = shl i64 %n, 63
%5 = ashr i64 %4, 63
%6 = icmp eq i64 %5, 0
br i1 %6, label %even, label %odd
ret0:
ret i64 0
even:
%7 = ashr i64 %n, 1
%8 = call i64 @collatz(i64 %7)
%9 = add i64 %8, 1
ret i64 %9
odd:
%7 = mul i64 3, %n
%8 = add i64 1, %7
%9 = call i64 @collatz(i64 %8)
%10 = add i64 1, %9
ret i64 %10
}
define i64 @main(i64 %argc, i8** %arcv) {
%1 = call i64 @collatz(i64 7426)
ret i64 %1
}