Factor some logic out of seal_ebb_header_block into parts.
This allows append_jump_argument to call just the part that it needs instead of the whole of seal_ebb_header_block, which is a nice cleanup on its own, and it also eliminates a cycle from the static call graph.
This commit is contained in:
@@ -371,7 +371,12 @@ where
|
|||||||
let (_, local_side_effects) = self.predecessors_lookup(func, val, var, ebb);
|
let (_, local_side_effects) = self.predecessors_lookup(func, val, var, ebb);
|
||||||
side_effects.append(local_side_effects);
|
side_effects.append(local_side_effects);
|
||||||
}
|
}
|
||||||
|
self.mark_ebb_header_block_sealed(block);
|
||||||
|
side_effects
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the `sealed` flag for `block`.
|
||||||
|
fn mark_ebb_header_block_sealed(&mut self, block: Block) {
|
||||||
// Then we mark the block as sealed.
|
// Then we mark the block as sealed.
|
||||||
match self.blocks[block] {
|
match self.blocks[block] {
|
||||||
BlockData::EbbBody { .. } => panic!("this should not happen"),
|
BlockData::EbbBody { .. } => panic!("this should not happen"),
|
||||||
@@ -381,7 +386,6 @@ where
|
|||||||
data.sealed = true;
|
data.sealed = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
side_effects
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Look up in the predecessors of an Ebb the def for a value an decides wether or not
|
/// Look up in the predecessors of an Ebb the def for a value an decides wether or not
|
||||||
@@ -521,7 +525,7 @@ where
|
|||||||
func.layout.append_ebb(middle_ebb);
|
func.layout.append_ebb(middle_ebb);
|
||||||
let block = self.declare_ebb_header_block(middle_ebb);
|
let block = self.declare_ebb_header_block(middle_ebb);
|
||||||
self.blocks[block].add_predecessor(jump_inst_block, jump_inst);
|
self.blocks[block].add_predecessor(jump_inst_block, jump_inst);
|
||||||
self.seal_ebb_header_block(middle_ebb, func);
|
self.mark_ebb_header_block_sealed(block);
|
||||||
for old_dest in func.jump_tables[jt].as_mut_slice() {
|
for old_dest in func.jump_tables[jt].as_mut_slice() {
|
||||||
if old_dest.unwrap() == dest_ebb {
|
if old_dest.unwrap() == dest_ebb {
|
||||||
*old_dest = PackedOption::from(middle_ebb);
|
*old_dest = PackedOption::from(middle_ebb);
|
||||||
|
|||||||
Reference in New Issue
Block a user