> 2011/10/2 Jan Hubicka <hubi...@ucw.cz>: > >> > Index: tree-sra.c > >> > =================================================================== > >> > *** tree-sra.c (revision 179423) > >> > --- tree-sra.c (working copy) > >> > *************** modify_function (struct cgraph_node *nod > >> > *** 4622,4627 **** > >> > --- 4622,4628 ---- > >> > VEC (cgraph_edge_p, heap) * redirect_callers = > >> > collect_callers_of_node (node); > >> > > >> > rebuild_cgraph_edges (); > >> > + free_dominance_info (CDI_DOMINATORS); > >> > pop_cfun (); > >> > current_function_decl = NULL_TREE; > >> > >> > >> Extra change to tree-sra, not in ChangeLog. Is this hunk needed? Or > >> unrelated fix for something else? > > > > It is needed - cgraph_remove_function sanity check that dminance info is > > clear and it is leaking here. > > In the version I comitted there is changelog entry, so this must've been > > next-to-last diff. Sorry > > for confussion. > > But we don't free dominance information when it is correct. So please don't > do that. Instead remove the sanity check and simply remove dominance > information when you remove the function isntead.
The purpose for that check is to avoid having dominance tree built for whole program. Local optimizers should always build dominance tree only for the current function, otherwise we sould burn quite noticeable % of memory in dominators that is no worthwhile because we never need it for whole program and it is cheaper to recompute. Normaly dominance info is freed for you by the passmanager, but because the code in question creates new function that is not walked by PM, it has to do by itself. Honza > > Thanks, > Richard. > > > Honza > > > >> > >> Ciao! > >> Steven > >