Resolve all value aliases when computing live ranges.

Value aliases are only in the way during register allocation, so make
sure they are all dead as we enter the register allocation passes.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-29 15:54:06 -07:00
parent c82e68efea
commit 5f56f81251
2 changed files with 40 additions and 1 deletions

View File

@@ -366,7 +366,7 @@ impl Liveness {
/// Compute the live ranges of all SSA values used in `func`.
/// This clears out any existing analysis stored in this data structure.
pub fn compute(&mut self, isa: &TargetIsa, func: &Function, cfg: &ControlFlowGraph) {
pub fn compute(&mut self, isa: &TargetIsa, func: &mut Function, cfg: &ControlFlowGraph) {
self.ranges.clear();
// Get ISA data structures used for computing live range affinities.
@@ -386,6 +386,9 @@ impl Liveness {
}
for inst in func.layout.ebb_insts(ebb) {
// Eliminate all value aliases, they would confuse the register allocator.
func.dfg.resolve_aliases_in_arguments(inst);
// 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
// an unused value.