Adaptive commitment-map scanning: re-probe from root if we skip too many entries in linear BTree scan
This commit is contained in:
@@ -46,12 +46,6 @@
|
|||||||
first preferred one), reload into it, spill out of it, and then
|
first preferred one), reload into it, spill out of it, and then
|
||||||
pop old val
|
pop old val
|
||||||
|
|
||||||
- Play more with commitment-map probing: linear scan through btree
|
|
||||||
(good for dense bundles, i.e., close ranges) vs. independent
|
|
||||||
lookup per range in bundle. Adapt based on distance? Do a fresh
|
|
||||||
range lookup if we skip N btree entries without advancing into
|
|
||||||
current bundle range?
|
|
||||||
|
|
||||||
- Profile allocations
|
- Profile allocations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -2532,6 +2526,7 @@ impl<'a, F: Function> Env<'a, F> {
|
|||||||
log::debug!(" -> range LR {:?}: {:?}", entry.index, entry.range);
|
log::debug!(" -> range LR {:?}: {:?}", entry.index, entry.range);
|
||||||
let key = LiveRangeKey::from_range(&entry.range);
|
let key = LiveRangeKey::from_range(&entry.range);
|
||||||
|
|
||||||
|
let mut skips = 0;
|
||||||
'alloc: loop {
|
'alloc: loop {
|
||||||
log::debug!(" -> PReg range {:?}", preg_range_iter.peek());
|
log::debug!(" -> PReg range {:?}", preg_range_iter.peek());
|
||||||
|
|
||||||
@@ -2545,8 +2540,23 @@ impl<'a, F: Function> Env<'a, F> {
|
|||||||
preg_range_iter.peek().unwrap().0
|
preg_range_iter.peek().unwrap().0
|
||||||
);
|
);
|
||||||
preg_range_iter.next();
|
preg_range_iter.next();
|
||||||
|
skips += 1;
|
||||||
|
if skips >= 16 {
|
||||||
|
let from_pos = entry.range.from;
|
||||||
|
let from_key = LiveRangeKey::from_range(&CodeRange {
|
||||||
|
from: from_pos,
|
||||||
|
to: from_pos,
|
||||||
|
});
|
||||||
|
preg_range_iter = self.pregs[reg.index()]
|
||||||
|
.allocations
|
||||||
|
.btree
|
||||||
|
.range(from_key..)
|
||||||
|
.peekable();
|
||||||
|
skips = 0;
|
||||||
|
}
|
||||||
continue 'alloc;
|
continue 'alloc;
|
||||||
}
|
}
|
||||||
|
skips = 0;
|
||||||
|
|
||||||
// If there are no more PReg allocations, we're done!
|
// If there are no more PReg allocations, we're done!
|
||||||
if preg_range_iter.peek().is_none() {
|
if preg_range_iter.peek().is_none() {
|
||||||
|
|||||||
Reference in New Issue
Block a user