Enumerate a set of special purposes for function arguments that general purpose code needs to know about. Some of these argument purposes will only appear in the signature of the current function, representing things the prologue and epilogues need to know about like the link register and callee-saved registers. Get rid of the 'inreg' argument flag. Arguments can be pre-assigned to a specific register instead.
81 lines
1.8 KiB
Plaintext
81 lines
1.8 KiB
Plaintext
; 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):
|
|
return v4, v2, v3, v1
|
|
}
|
|
; check: function special1(i32 sret, i32 fp, i32 link) -> i32 link, i32 fp, i32 sret {
|
|
; check: ebb0($v1: i32, $v2: i32, $v3: i32):
|
|
; check: return $v3, $v2, $v1
|
|
; check: }
|