This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: patch to fix PR63620
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Vladimir Makarov <vmakarov at redhat dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 9 Nov 2014 12:08:00 -0800
- Subject: Re: patch to fix PR63620
- Authentication-results: sourceware.org; auth=none
- References: <545F9AB8 dot 6010103 at redhat dot com>
On Sun, Nov 9, 2014 at 8:47 AM, Vladimir Makarov <vmakarov@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 <vmakarov@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.