1
Fork 0

Use preorder traversal when checking for SSA locals

When rebuilding the standard library, this change reduces the number of
locals that require an alloca from 62452 to 62348.
This commit is contained in:
Tomasz Miąsko 2021-05-27 00:00:00 +00:00
parent 69e2f23a41
commit 4237a05233

View file

@ -18,7 +18,10 @@ pub fn non_ssa_locals<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
let mir = fx.mir;
let mut analyzer = LocalAnalyzer::new(fx);
for (bb, data) in mir.basic_blocks().iter_enumerated() {
// If there exists a local definition that dominates all uses of that local,
// the definition should be visited first. Traverse blocks in preorder which
// is a topological sort of dominance partial order.
for (bb, data) in traversal::preorder(&mir) {
analyzer.visit_basic_block_data(bb, data);
}