This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

patch to fix PR56999


  The following patch fixes

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56999

The problem was in complicated interactions of coalescing and doing/undoing inheritance and assignment sub-passes through several iterations. One solution would be in modifying coalescing in order to take future actions in undoing inheritance. Another solution is to move coalesce pass after doing/undoing inheritance sub-passes. The first solution complicates code and make passes more dependable although potentially decreasing # passes of creating live ranges. The second solution makes coalescing pass simpler and less dependable. After some experiments I've chosen the 2nd solution as it makes code more maintainable and less error-prone. On my tests I found that in 32-bit mode it runs 10% more live-range passes (that is about 1/5th of LRA run time), in 64-bit mode the # passes are the same. I check cpu and real time on 500K lines fortran code and did not find any visible increase in compilation time.

  The patch was successfully bootstrapped on x86-64.

  Committed to trunk as rev. 198092.

2013-04-18  Vladimir Makarov  <vmakarov@redhat.com>

        PR rtl-optimization/56992
        * lra-coalesce.c (coalescable_pseudo_p): Remove 2nd parameter and
        related code.
        (lra_coalesce): Remove split_origin_bitmap and related code.
        * lra.c (lra): Coalesce after undoing inheritance. Recreate live
        ranges if necessary.

2013-04-18  Jakub Jelinek  <jakub@redhat.com>

        PR rtl-optimization/56992
        * g++.dg/opt/pr56999.C: New test.


Attachment: pr56999.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]