Files
wasmtime/cranelift/filetests/filetests/runtests/fibonacci.clif
Trevor Elliott a5698cedf8 cranelift: Remove brz and brnz (#5630)
Remove the brz and brnz instructions, as their behavior is now redundant with brif.
2023-01-30 20:34:56 +00:00

69 lines
1.6 KiB
Plaintext

test interpret
test run
target x86_64
target aarch64
target aarch64 sign_return_address
target aarch64 has_pauth sign_return_address
target s390x
; A non-recursive fibonacci implementation.
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
}
; run: %fibonacci(0) == 1
; run: %fibonacci(1) == 1
; run: %fibonacci(2) == 1
; run: %fibonacci(3) == 2
; run: %fibonacci(4) == 3
; run: %fibonacci(5) == 5
; run: %fibonacci(6) == 8
; run: %fibonacci(10) == 55
; A recursive fibonacci implementation.
function %fibonacci_recursive(i32) -> i32 {
fn0 = %fibonacci_recursive(i32) -> i32
block0(v0: i32):
v1 = icmp_imm ule v0, 2
brif v1, block2, block1(v0)
block1(v10: i32):
v11 = iadd_imm v10, -1
v12 = call fn0(v11)
v13 = iadd_imm v10, -2
v14 = call fn0(v13)
v15 = iadd v12, v14
return v15
block2:
v20 = iconst.i32 1
return v20
}
; run: %fibonacci_recursive(0) == 1
; run: %fibonacci_recursive(1) == 1
; run: %fibonacci_recursive(2) == 1
; run: %fibonacci_recursive(3) == 2
; run: %fibonacci_recursive(4) == 3
; run: %fibonacci_recursive(5) == 5
; run: %fibonacci_recursive(6) == 8
; run: %fibonacci_recursive(10) == 55