Use a sorted array for (Ebb, Inst) interval again (fixes #1084);

This commit is contained in:
Benjamin Bouvier
2019-09-13 18:58:50 +02:00
parent 79784dfaf6
commit 4e3cb25983
10 changed files with 212 additions and 250 deletions

View File

@@ -98,7 +98,6 @@ where
let encinfo = isa.encoding_info();
let values_locations = &func.locations;
let liveness_ranges = regalloc.liveness().ranges();
let liveness_forest = regalloc.liveness().forest();
let mut ranges = HashMap::new();
let mut add_range = |label, range: (u32, u32), loc: ValueLoc| {
@@ -127,10 +126,7 @@ where
// Remove killed values.
tracked_values.retain(|(x, label, start_offset, last_loc)| {
let range = liveness_ranges.get(*x);
if range
.expect("value")
.killed_at(inst, ebb, &liveness_forest, &func.layout)
{
if range.expect("value").killed_at(inst, ebb, &func.layout) {
add_range(*label, (*start_offset, end_offset), *last_loc);
return false;
}
@@ -177,7 +173,7 @@ where
// Ignore dead/inactive Values.
let range = liveness_ranges.get(*v);
match range {
Some(r) => r.reaches_use(inst, ebb, &liveness_forest, &func.layout),
Some(r) => r.reaches_use(inst, ebb, &func.layout),
None => false,
}
});