function %fibonacci(i32) -> i32 { block0(v0: i32): v1 = icmp_imm ule v0, 2 v2 = iconst.i32 1 ; handle base case, n <= 2 brif v1, block3(v2), block1(v0, v2) block1(v4: i32, v5:i32): v6 = iconst.i32 1 v7 = iadd_imm v4, -2 jump block2(v7, v5, v6) block2(v10: i32, v11: i32, v12: i32): ; params: n, fib(n-1), fib(n-2) v13 = iadd v11, v12 v14 = iadd_imm v10, -1 v15 = icmp_imm eq v14, 0 brif v15, block3(v13), block2(v14, v13, v11) block3(v20: i32): ; early return and end of loop return v20 }