Always create live ranges for dead EBB arguments.

The live value tracker expects them to be there.

We may eventually delete dead arguments from internal EBBs, but at least
the entry block needs to be able to handle dead function arguments.
This commit is contained in:
Jakob Stoklund Olesen
2017-05-11 11:42:44 -07:00
parent d03a217466
commit 9f743cf3a5
2 changed files with 14 additions and 0 deletions

View File

@@ -10,3 +10,10 @@ ebb0(v1: i32, v2: i32):
; sameln: iadd ; sameln: iadd
return return
} }
; Function with a dead argument.
function dead_arg(i32, i32) -> i32{
ebb0(v1: i32, v2: i32):
; check: return $v1
return v1
}

View File

@@ -311,6 +311,13 @@ impl Liveness {
// elimination pass if we visit a post-order of the dominator tree? // elimination pass if we visit a post-order of the dominator tree?
// TODO: Resolve value aliases while we're visiting instructions? // TODO: Resolve value aliases while we're visiting instructions?
for ebb in func.layout.ebbs() { for ebb in func.layout.ebbs() {
// Make sure we have created live ranges for dead EBB arguments.
// TODO: If these arguments are really dead, we could remove them, except for the entry
// block which must match the function signature.
for &arg in func.dfg.ebb_args(ebb) {
get_or_create(&mut self.ranges, arg, isa, func, &enc_info);
}
for inst in func.layout.ebb_insts(ebb) { for inst in func.layout.ebb_insts(ebb) {
// Make sure we have created live ranges for dead defs. // Make sure we have created live ranges for dead defs.
// TODO: When we implement DCE, we can use the absence of a live range to indicate // TODO: When we implement DCE, we can use the absence of a live range to indicate