Make sure return values are assigned an affinity.

When an EBB argument value is used only as a return value, it still
needs to be given a register affinity. Otherwise it would appear as a
ghost value with no affinity.

Do the same to call arguments.
This commit is contained in:
Jakob Stoklund Olesen
2017-06-28 19:30:36 -07:00
parent c4532b901e
commit cd1503eced
2 changed files with 35 additions and 5 deletions

View File

@@ -40,3 +40,26 @@ ebb0(v1: i32, v2: i32):
; nextln: return $v2, $v1
return v2, v1
}
; Return an EBB argument.
function %retebb(i32, i32) -> i32 {
ebb0(v1: i32, v2: i32):
brnz v1, ebb1(v1)
jump ebb1(v2)
ebb1(v10: i32):
return v10
}
; Pass an EBB argument as a function argument.
function %callebb(i32, i32) -> i32 {
fn0 = function %foo(i32) -> i32
ebb0(v1: i32, v2: i32):
brnz v1, ebb1(v1)
jump ebb1(v2)
ebb1(v10: i32):
v11 = call fn0(v10)
return v11
}