@@ -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
449450impl Renamer < ' _ , ' _ > {
0 commit comments