; ModuleID = 'sharp_module'
source_filename = "sharp_module"
define i64 @fibonacci(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
%ifcond = icmp ne i1 %letmp, i64 0
br i1 %ifcond, label %then, label %else
then: ; preds = %entry
%n2 = load i64, ptr %n, align 4
ret i64 %n2
else: ; preds = %entry
%n3 = load i64, ptr %n, align 4
%subtmp = sub i64 %n3, 1
%calltmp = call i64 @fibonacci(i64 %subtmp)
%n4 = load i64, ptr %n, align 4
%subtmp5 = sub i64 %n4, 2
%calltmp6 = call i64 @fibonacci(i64 %subtmp5)
%addtmp = add i64 %calltmp, %calltmp6
ret i64 %addtmp
ifcont: ; No predecessors!
ret i64 0
}
define i64 @factorial(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
%result1 = load i64, ptr %result, align 4
ret i64 %result1
}
define i64 @test_ops(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
%x = alloca i64, align 8
%a1 = load i64, ptr %a, align 4
%b2 = load i64, ptr %b, align 4
%addtmp = add i64 %a1, %b2
store i64 %addtmp, ptr %x, align 4
%y = alloca i64, align 8
%a3 = load i64, ptr %a, align 4
%b4 = load i64, ptr %b, align 4
%multmp = mul i64 %a3, %b4
store i64 %multmp, ptr %y, align 4
%z = alloca i64, align 8
%a5 = load i64, ptr %a, align 4
%b6 = load i64, ptr %b, align 4
%subtmp = sub i64 %a5, %b6
store i64 %subtmp, ptr %z, align 4
%x7 = load i64, ptr %x, align 4
%y8 = load i64, ptr %y, align 4
%addtmp9 = add i64 %x7, %y8
%z10 = load i64, ptr %z, align 4
%addtmp11 = add i64 %addtmp9, %z10
ret i64 %addtmp11
}
define i64 @main() {
entry:
%x = alloca i64, align 8
store i64 10, ptr %x, align 4
%y = alloca i64, align 8
store i64 20, ptr %y, align 4
%result = alloca i64, align 8
%x1 = load i64, ptr %x, align 4
%y2 = load i64, ptr %y, align 4
%calltmp = call i64 @test_ops(i64 %x1, i64 %y2)
store i64 %calltmp, ptr %result, align 4
%result3 = load i64, ptr %result, align 4
ret i64 %result3
}