On Sun, Nov 9, 2014 at 8:47 AM, Vladimir Makarov <vmaka...@redhat.com> wrote: > The following patch solves PR63620. The details can be found > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63620 > > The patch is more than just the problem solution. It adds global live > analysis for pseudos when it is necessary (live info change on a BB > border triggers it). The patch opens a door for global optimizations > and transformations in LRA and it will be also useful for performance > problems reported by people in coming LRA rematerialization. > > The impact on compiler time is insignificant about 0.3% on whole > SPEC2000 compilation (and about the same on a compilation of 500K > lines FORTRAN file). > > The patch was successfully bootstrapped on x86/x86-64, ppc64, and ARM and > tested on x86/x86-64 and ppc64. > > Committed as rev. 217265. > > > 2014-11-09 Vladimir Makarov <vmaka...@redhat.com> > > PR rtl-optimization/63620 > * lra-constraints.c (substitute_pseudo): Add prefix lra_ to the > name. Move to lra.c. Make it external. > (substitute_pseudo_within_insn): Ditto. > (inherit_reload_reg, split_reg, remove_inheritance_pseudos): Use > the new names. > (undo_optional_reloads): Ditto. > * lra-int.h (lra_dump_bitmap_with_title, lra_substitute_pseudo): > New prototypes. > (lra_substitute_pseudo_within_insn): Ditto. > * lra-lives.c (bb_killed_pseudos, bb_gen_pseudos): New. > (mark_regno_live): Add parameter. Update bb_gen_pseudos. > (mark_regno_dead): Add parameter. Update bb_gen_pseudos and > bb_killed_pseudos. > (struct bb_data, bb_data_t, bb_data): New. > (get_bb_data, get_bb_data_by_index): Ditto. > (all_hard_regs_bitmap): New. > (live_trans_fun, live_con_fun_0, live_con_fun_n, all_blocks): New. > (initiate_live_solver, finish_live_solver): New. > (process_bb_lives): Change return type. Add code updating local > live data and removing dead insns. Pass new argument to > mark_regno_live and mark_regno_dead. Check changing bb pseudo > life info. Return the result. > (lra_create_live_ranges): Add code to do global pseudo live > analysis. > (lra_live_ranges_init): Call initiate_live_solver. > (lra_live_ranges_finish): Call finish_live_solver. > * lra.c (lra_dump_bitmap_with_title): New. > (lra_substitute_pseudo, lra_substitute_pseudo_within_insn): Move > from lra-constraints.c.
It caused libjava failures: FAIL: Array_3 execution - source compiled test FAIL: Array_3 -findirect-dispatch execution - source compiled test FAIL: Array_3 -O3 -findirect-dispatch execution - source compiled test FAIL: Divide_2 execution - source compiled test FAIL: Divide_2 -findirect-dispatch execution - source compiled test on Linux/ia32. -- H.J.