; ModuleID = 'sharp_module'
source_filename = "sharp_module"
define i64 @factorial_iterative(i64 %0) {
entry:
%n = alloca i64, align 8
store i64 %0, ptr %n, align 4
%result = alloca i64, align 8
store i64 1, ptr %result, align 4
%i = alloca i64, align 8
store i64 1, ptr %i, align 4
br label %whilecond
whilecond: ; preds = %whilebody, %entry
%i1 = load i64, ptr %i, align 4
%n2 = load i64, ptr %n, align 4
%letmp = icmp sle i64 %i1, %n2
br i1 %letmp, label %whilebody, label %afterwhile
whilebody: ; preds = %whilecond
%result3 = load i64, ptr %result, align 4
%i4 = load i64, ptr %i, align 4
%multmp = mul i64 %result3, %i4
store i64 %multmp, ptr %result, align 4
%i5 = load i64, ptr %i, align 4
%addtmp = add i64 %i5, 1
store i64 %addtmp, ptr %i, align 4
br label %whilecond
afterwhile: ; preds = %whilecond
%result6 = load i64, ptr %result, align 4
ret i64 %result6
}
define i64 @sum_to_n(i64 %0) {
entry:
%n = alloca i64, align 8
store i64 %0, ptr %n, align 4
%sum = alloca i64, align 8
store i64 0, ptr %sum, align 4
%i = alloca i64, align 8
store i64 0, ptr %i, align 4
br label %whilecond
whilecond: ; preds = %whilebody, %entry
%i1 = load i64, ptr %i, align 4
%n2 = load i64, ptr %n, align 4
%letmp = icmp sle i64 %i1, %n2
br i1 %letmp, label %whilebody, label %afterwhile
whilebody: ; preds = %whilecond
%sum3 = load i64, ptr %sum, align 4
%i4 = load i64, ptr %i, align 4
%i5 = load i64, ptr %i, align 4
br label %whilecond
afterwhile: ; preds = %whilecond
%sum6 = load i64, ptr %sum, align 4
ret i64 %sum6
}
define i64 @fibonacci_iterative(i64 %0) {
entry:
%n = alloca i64, align 8
store i64 %0, ptr %n, align 4
%n1 = load i64, ptr %n, align 4
%letmp = icmp sle i64 %n1, 1
br i1 %letmp, label %then, label %else
then: ; preds = %entry
%n2 = load i64, ptr %n, align 4
ret i64 %n2
else: ; preds = %entry
br label %ifcont
ifcont: ; preds = %else
%a = alloca i64, align 8
store i64 0, ptr %a, align 4
%b = alloca i64, align 8
store i64 1, ptr %b, align 4
%i = alloca i64, align 8
store i64 2, ptr %i, align 4
br label %whilecond
whilecond: ; preds = %whilebody, %ifcont
%i3 = load i64, ptr %i, align 4
%n4 = load i64, ptr %n, align 4
%letmp5 = icmp sle i64 %i3, %n4
br i1 %letmp5, label %whilebody, label %afterwhile
whilebody: ; preds = %whilecond
%a6 = load i64, ptr %a, align 4
%b7 = load i64, ptr %b, align 4
%addtmp = add i64 %a6, %b7
%temp = alloca i64, align 8
store i64 %addtmp, ptr %temp, align 4
%b8 = load i64, ptr %b, align 4
store i64 %b8, ptr %a, align 4
%temp9 = load i64, ptr %temp, align 4
store i64 %temp9, ptr %b, align 4
%i10 = load i64, ptr %i, align 4
br label %whilecond
afterwhile: ; preds = %whilecond
%b11 = load i64, ptr %b, align 4
ret i64 %b11
}
define i64 @gcd(i64 %0, i64 %1) {
entry:
%a = alloca i64, align 8
store i64 %0, ptr %a, align 4
%b = alloca i64, align 8
store i64 %1, ptr %b, align 4
br label %whilecond
whilecond: ; preds = %whilebody, %entry
%b1 = load i64, ptr %b, align 4
%netmp = icmp ne i64 %b1, 0
br i1 %netmp, label %whilebody, label %afterwhile
whilebody: ; preds = %whilecond
%b2 = load i64, ptr %b, align 4
%temp = alloca i64, align 8
store i64 %b2, ptr %temp, align 4
%a3 = load i64, ptr %a, align 4
%b4 = load i64, ptr %b, align 4
%modtmp = srem i64 %a3, %b4
store i64 %modtmp, ptr %b, align 4
%temp5 = load i64, ptr %temp, align 4
store i64 %temp5, ptr %a, align 4
br label %whilecond
afterwhile: ; preds = %whilecond
%a6 = load i64, ptr %a, align 4
ret i64 %a6
}
define i64 @main() {
entry:
%calltmp = call i64 @factorial_iterative(i64 5)
%fact5 = alloca i64, align 8
store i64 %calltmp, ptr %fact5, align 4
%calltmp1 = call i64 @sum_to_n(i64 10)
%sum10 = alloca i64, align 8
store i64 %calltmp1, ptr %sum10, align 4
%calltmp2 = call i64 @fibonacci_iterative(i64 10)
%fib10 = alloca i64, align 8
store i64 %calltmp2, ptr %fib10, align 4
%calltmp3 = call i64 @gcd(i64 48, i64 18)
%gcd_result = alloca i64, align 8
store i64 %calltmp3, ptr %gcd_result, align 4
%fact54 = load i64, ptr %fact5, align 4
%sum105 = load i64, ptr %sum10, align 4
%addtmp = add i64 %fact54, %sum105
%fib106 = load i64, ptr %fib10, align 4
%addtmp7 = add i64 %addtmp, %fib106
%gcd_result8 = load i64, ptr %gcd_result, align 4
%addtmp9 = add i64 %addtmp7, %gcd_result8
ret i64 %addtmp9
}