Auto merge of #85741 - tmiasko:ssa, r=nagisa
Use preorder traversal when checking for SSA locals Traverse blocks in topological sort of dominance partial order, to ensure that local analyzer correctly identifies locals that are already in static single assignment form, while avoiding dependency on implicit numeric order of blocks. 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:
commit
0279cb11ed
1 changed files with 4 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue