On Sat, Sep 29, 2012 at 10:26 PM, Steven Bosscher <stevenb....@gmail.com> wrote: > LRA create live ranges : 175.30 (15%) usr 2.14 (13%) sys 177.44 > (15%) wall 2761 kB ( 0%) ggc
I've tried to split this up a bit more: process_bb_lives ~50% create_start_finish_chains ~25% remove_some_program_points_and_update_live_ranges ~25% The latter two have a common structure with loops that look like this: for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) { for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next) Perhaps it's possible to do some of the work of compress_live_ranges during process_bb_lives, to create shorter live_ranges chains. Also, maybe doing something else than a linked list of live_ranges will help (unfortunately that's not a trivial change, it seems, because the lra_live_range_t type is used everywhere and there are no iterators or anything abstracted out like that -- just chain walks...). Still it does seem to me that a sorted VEC of lra_live_range objects probably would speed things up. Question is of course how much... :-) Ciao! Steven