I'm working on a new optimization to get rid of spilled tmp variables (e.g. introduced by pre) to use the source mem ref instead of a stack slot. To do this, I added a loop into ira.c:ira() init_prune_stack_vars (); do { #ifndef IRA_NO_OBSTACK gcc_obstack_init (&ira_obstack); #endif bitmap_obstack_initialize (&ira_bitmap_obstack); ... ira_color (); } while (flag_prune_stack_vars && prune_stack_vars ()); To get it work, the prune_stack_vars function resets a couple of data. This is mostly working - but on some source files, it fails due to invalid reg_equivs. Since this also happens, if the optimizer does nothing and just loops once. Currently I'm calling this, before looping again regstat_free_n_sets_and_refs (); regstat_free_ri (); loop_optimizer_finalize (); free_dominance_info (CDI_DOMINATORS); Any hint, what I'm missing to reset?