Skip to content

Commit 045b98c

Browse files
eddybLegNeato
authored andcommitted
[2024] linker/mem2reg: apply rewrite rules only once per insert_phis_all invocation.
1 parent e4ac5c8 commit 045b98c

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

crates/rustc_codegen_spirv/src/linker/mem2reg.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ fn insert_phis_all(
193193
for (var_map, _) in &var_maps_and_types {
194194
split_copy_memory(header, blocks, var_map);
195195
}
196+
197+
let mut rewrite_rules = FxHashMap::default();
196198
for &(ref var_map, base_var_type) in &var_maps_and_types {
197199
let blocks_with_phi = insert_phis(blocks, dominance_frontier, var_map);
198200
let mut renamer = Renamer {
@@ -205,16 +207,15 @@ fn insert_phis_all(
205207
phi_defs: FxHashSet::default(),
206208
visited: FxHashSet::default(),
207209
stack: Vec::new(),
208-
rewrite_rules: FxHashMap::default(),
210+
rewrite_rules: &mut rewrite_rules,
209211
};
210212
renamer.rename(0, None);
211-
// FIXME(eddyb) shouldn't this full rescan of the function be done once?
212-
apply_rewrite_rules(
213-
&renamer.rewrite_rules,
214-
blocks.values_mut().map(|block| &mut **block),
215-
);
216-
remove_nops(blocks);
217213
}
214+
apply_rewrite_rules(
215+
&rewrite_rules,
216+
blocks.values_mut().map(|block| &mut **block),
217+
);
218+
remove_nops(blocks);
218219
remove_old_variables(blocks, &var_maps_and_types);
219220
true
220221
}
@@ -443,7 +444,7 @@ struct Renamer<'a, 'b> {
443444
phi_defs: FxHashSet<Word>,
444445
visited: FxHashSet<usize>,
445446
stack: Vec<Word>,
446-
rewrite_rules: FxHashMap<Word, Word>,
447+
rewrite_rules: &'a mut FxHashMap<Word, Word>,
447448
}
448449

449450
impl Renamer<'_, '_> {

crates/rustc_codegen_spirv/src/linker/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ fn apply_rewrite_rules<'a>(
104104
)
105105
});
106106
for id in all_ids_mut {
107-
if let Some(&rewrite) = rewrite_rules.get(id) {
107+
while let Some(&rewrite) = rewrite_rules.get(id) {
108108
*id = rewrite;
109109
}
110110
}

0 commit comments

Comments
 (0)