bugfix with clean-spill opt: avoid if liverange starts at start of block (this is like a def) or if has starts-at-def flag.
This commit is contained in:
@@ -3656,6 +3656,12 @@ impl<'a, F: Function> Env<'a, F> {
|
|||||||
if clean_spillslot.is_some() {
|
if clean_spillslot.is_some() {
|
||||||
if self.cfginfo.insn_block[range.from.inst().index()]
|
if self.cfginfo.insn_block[range.from.inst().index()]
|
||||||
!= self.cfginfo.insn_block[range.to.prev().inst().index()]
|
!= self.cfginfo.insn_block[range.to.prev().inst().index()]
|
||||||
|
|| range.from
|
||||||
|
== self.cfginfo.block_entry
|
||||||
|
[self.cfginfo.insn_block[range.from.inst().index()].index()]
|
||||||
|
{
|
||||||
|
clean_spillslot = None;
|
||||||
|
} else if self.ranges[entry.index.index()].has_flag(LiveRangeFlag::StartsAtDef)
|
||||||
{
|
{
|
||||||
clean_spillslot = None;
|
clean_spillslot = None;
|
||||||
} else {
|
} else {
|
||||||
@@ -4335,25 +4341,26 @@ impl<'a, F: Function> Env<'a, F> {
|
|||||||
self.stats.edits_count = self.edits.len();
|
self.stats.edits_count = self.edits.len();
|
||||||
|
|
||||||
// Add debug annotations.
|
// Add debug annotations.
|
||||||
#[cfg(debug)]
|
if self.annotations_enabled && log::log_enabled!(log::Level::Debug) {
|
||||||
{
|
for i in 0..self.edits.len() {
|
||||||
if log::log_enabled!(log::Level::Debug) {
|
let &(pos, _, ref edit) = &self.edits[i];
|
||||||
for i in 0..self.edits.len() {
|
match edit {
|
||||||
let &(pos, _, ref edit) = &self.edits[i];
|
&Edit::Move { from, to, to_vreg } => {
|
||||||
match edit {
|
self.annotate(
|
||||||
&Edit::Move { from, to, to_vreg } => {
|
ProgPoint::from_index(pos),
|
||||||
self.annotate(
|
format!("move {} -> {} ({:?})", from, to, to_vreg),
|
||||||
ProgPoint::from_index(pos),
|
);
|
||||||
format!("move {} -> {} ({:?})", from, to, to_vreg),
|
}
|
||||||
);
|
&Edit::BlockParams {
|
||||||
}
|
ref vregs,
|
||||||
&Edit::BlockParams {
|
ref allocs,
|
||||||
ref vregs,
|
} => {
|
||||||
ref allocs,
|
let s = format!("blockparams vregs:{:?} allocs:{:?}", vregs, allocs);
|
||||||
} => {
|
self.annotate(ProgPoint::from_index(pos), s);
|
||||||
let s = format!("blockparams vregs:{:?} allocs:{:?}", vregs, allocs);
|
}
|
||||||
self.annotate(ProgPoint::from_index(pos), s);
|
&Edit::DefAlloc { alloc, vreg } => {
|
||||||
}
|
let s = format!("defalloc {:?} := {:?}", alloc, vreg);
|
||||||
|
self.annotate(ProgPoint::from_index(pos), s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user