; Parser tests for call and return syntax. test cat function %mini() { ebb1: return } ; sameln: function %mini() { ; nextln: ebb0: ; nextln: return ; nextln: } function %r1() -> i32, f32 { ebb1: v1 = iconst.i32 3 v2 = f32const 0.0 return v1, v2 } ; sameln: function %r1() -> i32, f32 { ; nextln: ebb0: ; nextln: $v1 = iconst.i32 3 ; nextln: $v2 = f32const 0.0 ; nextln: return $v1, $v2 ; nextln: } function %signatures() { sig10 = signature() sig11 = signature(i32, f64) -> i32, b1 fn5 = sig11 %foo fn8 = function %bar(i32) -> b1 } ; sameln: function %signatures() { ; nextln: $sig10 = signature() ; nextln: $sig11 = signature(i32, f64) -> i32, b1 ; nextln: sig2 = signature(i32) -> b1 ; nextln: $fn5 = $sig11 %foo ; nextln: $fn8 = sig2 %bar ; nextln: } function %direct() { fn0 = function %none() fn1 = function %one() -> i32 fn2 = function %two() -> i32, f32 ebb0: call fn0() v1 = call fn1() v2, v3 = call fn2() return } ; check: call $fn0() ; check: $v1 = call $fn1() ; check: $v2, $v3 = call $fn2() ; check: return function %indirect(i64) { sig0 = signature(i64) sig1 = signature() -> i32 sig2 = signature() -> i32, f32 ebb0(v0: i64): v1 = call_indirect sig1, v0() call_indirect sig0, v1(v0) v3, v4 = call_indirect sig2, v1() return } ; check: $v1 = call_indirect $sig1, $v0() ; check: call_indirect $sig0, $v1($v0) ; check: $v3, $v4 = call_indirect $sig2, $v1() ; check: return ; Special purpose function arguments function %special1(i32 sret, i32 fp, i32 csr, i32 link) -> i32 link, i32 fp, i32 csr, i32 sret { ebb0(v1: i32, v2: i32, v3: i32, v4: i32): return v4, v2, v3, v1 } ; check: function %special1(i32 sret, i32 fp, i32 csr, i32 link) -> i32 link, i32 fp, i32 csr, i32 sret { ; check: ebb0($v1: i32, $v2: i32, $v3: i32, $v4: i32): ; check: return $v4, $v2, $v3, $v1 ; check: }